1*6ca2c52aSchristos/* ALU test program. 2*6ca2c52aSchristos * Test instructions 3*6ca2c52aSchristos * r3= + (r0,r0); 4*6ca2c52aSchristos * r3= + (r0,r0) s; 5*6ca2c52aSchristos * r3= - (r0,r0); 6*6ca2c52aSchristos * r3= - (r0,r0) s; 7*6ca2c52aSchristos */ 8*6ca2c52aSchristos# mach: bfin 9*6ca2c52aSchristos 10*6ca2c52aSchristos.include "testutils.inc" 11*6ca2c52aSchristos start 12*6ca2c52aSchristos 13*6ca2c52aSchristos 14*6ca2c52aSchristos// overflow positive 15*6ca2c52aSchristos R0.L = 0xffff; 16*6ca2c52aSchristos R0.H = 0x7fff; 17*6ca2c52aSchristos R7 = 0; 18*6ca2c52aSchristos ASTAT = R7; 19*6ca2c52aSchristos R3 = R0 + R0 (NS); 20*6ca2c52aSchristos DBGA ( R3.L , 0xfffe ); 21*6ca2c52aSchristos DBGA ( R3.H , 0xffff ); 22*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 23*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 24*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 25*6ca2c52aSchristos CC = VS; R7 = CC; DBGA ( R7.L , 0x1 ); 26*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 27*6ca2c52aSchristos 28*6ca2c52aSchristos// overflow negative 29*6ca2c52aSchristos R0.L = 0x0000; 30*6ca2c52aSchristos R0.H = 0x8000; 31*6ca2c52aSchristos R7 = 0; 32*6ca2c52aSchristos ASTAT = R7; 33*6ca2c52aSchristos R3 = R0 + R0 (NS); 34*6ca2c52aSchristos DBGA ( R3.L , 0x0000 ); 35*6ca2c52aSchristos DBGA ( R3.H , 0x0000 ); 36*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 37*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 38*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 39*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 ); 40*6ca2c52aSchristos 41*6ca2c52aSchristos// zero 42*6ca2c52aSchristos R0.L = 0xffff; 43*6ca2c52aSchristos R0.H = 0xffff; 44*6ca2c52aSchristos R1.L = 0x0001; 45*6ca2c52aSchristos R1.H = 0x0000; 46*6ca2c52aSchristos R7 = 0; 47*6ca2c52aSchristos ASTAT = R7; 48*6ca2c52aSchristos R3 = R1 + R0 (NS); 49*6ca2c52aSchristos DBGA ( R3.L , 0x0000 ); 50*6ca2c52aSchristos DBGA ( R3.H , 0x0000 ); 51*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 52*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 53*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 54*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 ); 55*6ca2c52aSchristos 56*6ca2c52aSchristos// saturate positive 57*6ca2c52aSchristos R0.L = 0; 58*6ca2c52aSchristos R0.H = 0x7fff; 59*6ca2c52aSchristos R7 = 0; 60*6ca2c52aSchristos ASTAT = R7; 61*6ca2c52aSchristos R3 = R0 + R0 (S); 62*6ca2c52aSchristos DBGA ( R3.L , 0xffff ); 63*6ca2c52aSchristos DBGA ( R3.H , 0x7fff ); 64*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 65*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 66*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 67*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 68*6ca2c52aSchristos 69*6ca2c52aSchristos// saturate negative 70*6ca2c52aSchristos R0.L = 0; 71*6ca2c52aSchristos R0.H = 0x8000; 72*6ca2c52aSchristos R7 = 0; 73*6ca2c52aSchristos ASTAT = R7; 74*6ca2c52aSchristos R3 = R0 + R0 (S); 75*6ca2c52aSchristos DBGA ( R3.L , 0x0000 ); 76*6ca2c52aSchristos DBGA ( R3.H , 0x8000 ); 77*6ca2c52aSchristos 78*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 79*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 80*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 81*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 ); 82*6ca2c52aSchristos 83*6ca2c52aSchristos// saturate positive with subtraction 84*6ca2c52aSchristos R0.L = 0xffff; 85*6ca2c52aSchristos R0.H = 0xffff; 86*6ca2c52aSchristos R1.L = 0xffff; 87*6ca2c52aSchristos R1.H = 0x7fff; 88*6ca2c52aSchristos R7 = 0; 89*6ca2c52aSchristos ASTAT = R7; 90*6ca2c52aSchristos R3 = R1 - R0 (S); 91*6ca2c52aSchristos DBGA ( R3.L , 0xffff ); 92*6ca2c52aSchristos DBGA ( R3.H , 0x7fff ); 93*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 94*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 95*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 96*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 97*6ca2c52aSchristos 98*6ca2c52aSchristos// saturate negative with subtraction 99*6ca2c52aSchristos R0.L = 0x1; 100*6ca2c52aSchristos R0.H = 0x0; 101*6ca2c52aSchristos R1.L = 0x0000; 102*6ca2c52aSchristos R1.H = 0x8000; 103*6ca2c52aSchristos R7 = 0; 104*6ca2c52aSchristos ASTAT = R7; 105*6ca2c52aSchristos R3 = R1 - R0 (S); 106*6ca2c52aSchristos DBGA ( R3.L , 0x0000 ); 107*6ca2c52aSchristos DBGA ( R3.H , 0x8000 ); 108*6ca2c52aSchristos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 109*6ca2c52aSchristos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 110*6ca2c52aSchristos CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 111*6ca2c52aSchristos CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 ); 112*6ca2c52aSchristos 113*6ca2c52aSchristos pass 114