| // ALU test program. |
| // Test dual 16 bit MAX, MIN, ABS instructions |
| # mach: bfin |
| |
| .include "testutils.inc" |
| start |
| |
| R0 = 0; |
| ASTAT = R0; |
| // MAX |
| // first operand is larger, so AN=0 |
| R0.L = 0x0001; |
| R0.H = 0x0002; |
| R1.L = 0x0000; |
| R1.H = 0x0000; |
| R7 = MAX ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0x0001 ); |
| DBGA ( R7.H , 0x0002 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| // second operand is larger |
| R0.L = 0x0000; |
| R0.H = 0x0000; |
| R1.L = 0x0001; |
| R1.H = 0x0022; |
| R7 = MAX ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0x0001 ); |
| DBGA ( R7.H , 0x0022 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| // one operand larger, one smaller. |
| R0.L = 0x000a; |
| R0.H = 0x0000; |
| R1.L = 0x0001; |
| R1.H = 0x0022; |
| R7 = MAX ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0x000a ); |
| DBGA ( R7.H , 0x0022 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| R0.L = 0x8001; |
| R0.H = 0xffff; |
| R1.L = 0x8000; |
| R1.H = 0x0022; |
| R7 = MAX ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0x8001 ); |
| DBGA ( R7.H , 0x0022 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| R0.L = 0x8000; |
| R0.H = 0xffff; |
| R1.L = 0x8000; |
| R1.H = 0x0022; |
| R7 = MAX ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0x8000 ); |
| DBGA ( R7.H , 0x0022 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| // MIN |
| // second operand is smaller |
| R0.L = 0x0001; |
| R0.H = 0x0004; |
| R1.L = 0x0000; |
| R1.H = 0x0000; |
| R7 = MIN ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0x0000 ); |
| DBGA ( R7.H , 0x0000 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| // first operand is smaller |
| R0.L = 0xffff; |
| R0.H = 0x8001; |
| R1.L = 0x0000; |
| R1.H = 0x0000; |
| R7 = MIN ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0xffff ); |
| DBGA ( R7.H , 0x8001 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| // one of each |
| R0.L = 0xffff; |
| R0.H = 0x0034; |
| R1.L = 0x0999; |
| R1.H = 0x0010; |
| R7 = MIN ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0xffff ); |
| DBGA ( R7.H , 0x0010 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| R0.L = 0xffff; |
| R0.H = 0x0010; |
| R1.L = 0x0999; |
| R1.H = 0x0010; |
| R7 = MIN ( R0 , R1 ) (V); |
| DBGA ( R7.L , 0xffff ); |
| DBGA ( R7.H , 0x0010 ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| // ABS |
| R0.L = 0x0001; |
| R0.H = 0x8001; |
| R7 = ABS R0 (V); |
| DBGA ( R7.L , 0x0001 ); |
| DBGA ( R7.H , 0x7fff ); |
| _DBG ASTAT; |
| R6 = ASTAT; |
| _DBG R6; |
| |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = VS; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| R0.L = 0x0001; |
| R0.H = 0x8000; |
| R7 = ABS R0 (V); |
| DBGA ( R7.L , 0x0001 ); |
| DBGA ( R7.H , 0x7fff ); |
| CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); |
| CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = VS; R7 = CC; DBGA ( R7.L , 0x1 ); |
| CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); |
| |
| R0.L = 0x0000; |
| R0.H = 0xffff; |
| R7 = ABS R0 (V); |
| _DBG R7; |
| _DBG ASTAT; |
| R6 = ASTAT; |
| _DBG R6; |
| DBGA ( R7.L , 0x0000 ); |
| DBGA ( R7.H , 0x0001 ); |
| CC = VS; R6 = CC; DBGA ( R6.L, 0x1 ); |
| CC = AZ; R6 = CC; DBGA ( R6.L, 0x1 ); |
| |
| pass |