1// ALU test program. 2// Test 32 bit MAX, MIN, ABS instructions 3# mach: bfin 4 5.include "testutils.inc" 6 start 7 8 9// MAX 10// first operand is larger, so AN=0 11 R0.L = 0x0001; 12 R0.H = 0x0000; 13 R1.L = 0x0000; 14 R1.H = 0x0000; 15 R7 = MAX ( R0 , R1 ); 16 DBGA ( R7.L , 0x0001 ); 17 DBGA ( R7.H , 0x0000 ); 18 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 19 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 20 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 21 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 22 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 23 24// second operand is larger, so AN=1 25 R0.L = 0x0000; 26 R0.H = 0x0000; 27 R1.L = 0x0001; 28 R1.H = 0x0000; 29 R7 = MAX ( R0 , R1 ); 30 DBGA ( R7.L , 0x0001 ); 31 DBGA ( R7.H , 0x0000 ); 32 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 33 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 34 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 35 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 36 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 37 38// first operand is larger, check correct output with overflow 39 R0.L = 0xffff; 40 R0.H = 0x7fff; 41 R1.L = 0xffff; 42 R1.H = 0xffff; 43 R7 = MAX ( R0 , R1 ); 44 DBGA ( R7.L , 0xffff ); 45 DBGA ( R7.H , 0x7fff ); 46 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 47 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 48 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 49 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 50 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 51 52// second operand is larger, no overflow here 53 R0.L = 0xffff; 54 R0.H = 0xffff; 55 R1.L = 0xffff; 56 R1.H = 0x7fff; 57 R7 = MAX ( R0 , R1 ); 58 DBGA ( R7.L , 0xffff ); 59 DBGA ( R7.H , 0x7fff ); 60 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 61 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 62 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 63 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 64 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 65 66// second operand is larger, overflow 67 R0.L = 0xffff; 68 R0.H = 0x800f; 69 R1.L = 0xffff; 70 R1.H = 0x7fff; 71 R7 = MAX ( R0 , R1 ); 72 DBGA ( R7.L , 0xffff ); 73 DBGA ( R7.H , 0x7fff ); 74 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 75 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 76 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 77 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 78 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 79 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 80 CC = AV0S; R7 = CC; DBGA ( R7.L , 0x0 ); 81 CC = AV1S; R7 = CC; DBGA ( R7.L , 0x0 ); 82 83// both operands equal 84 R0.L = 0x0080; 85 R0.H = 0x8000; 86 R1.L = 0x0080; 87 R1.H = 0x8000; 88 R7 = MAX ( R0 , R1 ); 89 DBGA ( R7.L , 0x0080 ); 90 DBGA ( R7.H , 0x8000 ); 91 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 92 CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 93 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 94 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 95 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 96 97// MIN 98// second operand is smaller 99 R0.L = 0x0001; 100 R0.H = 0x0000; 101 R1.L = 0x0000; 102 R1.H = 0x0000; 103 R7 = MIN ( R0 , R1 ); 104 DBGA ( R7.L , 0x0000 ); 105 DBGA ( R7.H , 0x0000 ); 106 CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 107 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 108 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 109 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 110 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 111 112// first operand is smaller 113 R0.L = 0x0001; 114 R0.H = 0x8000; 115 R1.L = 0x0000; 116 R1.H = 0x0000; 117 R7 = MIN ( R0 , R1 ); 118 DBGA ( R7.L , 0x0001 ); 119 DBGA ( R7.H , 0x8000 ); 120 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 121 CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 122 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 123 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 124 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 125 126// first operand is smaller, overflow 127 R0.L = 0x0001; 128 R0.H = 0x8000; 129 R1.L = 0x0000; 130 R1.H = 0x0ff0; 131 R7 = MIN ( R0 , R1 ); 132 DBGA ( R7.L , 0x0001 ); 133 DBGA ( R7.H , 0x8000 ); 134 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 135 CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 136 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 137 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 138 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 139 140// equal operands 141 R0.L = 0x0001; 142 R0.H = 0x8000; 143 R1.L = 0x0001; 144 R1.H = 0x8000; 145 R7 = MIN ( R0 , R1 ); 146 DBGA ( R7.L , 0x0001 ); 147 DBGA ( R7.H , 0x8000 ); 148 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 149 CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 150 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 151 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 152 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 153 154// ABS 155 R0.L = 0x0001; 156 R0.H = 0x8000; 157 R7 = ABS R0; 158 _DBG R7; 159 _DBG ASTAT; 160 R6 = ASTAT; 161 162 _DBG R6; 163 DBGA ( R7.L , 0xffff ); 164 DBGA ( R7.H , 0x7fff ); 165//CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 166//CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 167//CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 168//CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 169//CC = VS; R7 = CC; DBGA ( R7.L , 0x1 ); 170//CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 171 172 R0.L = 0x0001; 173 R0.H = 0x0000; 174 R7 = ABS R0; 175 DBGA ( R7.L , 0x0001 ); 176 DBGA ( R7.H , 0x0000 ); 177 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 178 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 179 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 180 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 181 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 182 183 R0.L = 0x0000; 184 R0.H = 0x8000; 185 R7 = ABS R0; 186 DBGA ( R7.L , 0xffff ); 187 DBGA ( R7.H , 0x7fff ); 188 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 189 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 190 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 191 CC = V; R7 = CC; DBGA ( R7.L , 0x1 ); 192 CC = VS; R7 = CC; DBGA ( R7.L , 0x1 ); 193 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 194 195 R0.L = 0xffff; 196 R0.H = 0xffff; 197 R7 = ABS R0; 198 DBGA ( R7.L , 0x0001 ); 199 DBGA ( R7.H , 0x0000 ); 200 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 201 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 202 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 203 CC = V; R7 = CC; DBGA ( R7.L , 0x0 ); 204 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 205 206 R0.L = 0x0000; 207 R0.H = 0x0000; 208 R7 = ABS R0; 209 _DBG R7; 210 _DBG ASTAT; 211 R6 = ASTAT; 212 _DBG R6; 213 214 DBGA ( R7.L , 0x0000 ); 215 DBGA ( R7.H , 0x0000 ); 216 CC = VS; R6 = CC; DBGA (R6.L, 0x1); 217 CC = AZ; R6 = CC; DBGA (R6.L, 0x1); 218 219 pass 220