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