1 1.1 christos // reg-based SHIFT test program. 2 1.1 christos // Test r4 = ASHIFT (r2 by rl3); 3 1.1 christos // Test r4 = LSHIFT (r2 by rl3); 4 1.1 christos # mach: bfin 5 1.1 christos 6 1.1 christos .include "testutils.inc" 7 1.1 christos start 8 1.1 christos 9 1.1 christos 10 1.1 christos R0.L = 0x0001; 11 1.1 christos R0.H = 0x8000; 12 1.1 christos 13 1.1 christos // arithmetic 14 1.1 christos // left by 31 15 1.1 christos // 8000 0001 -> 8000 0000 16 1.1 christos R7 = 0; 17 1.1 christos ASTAT = R7; 18 1.1 christos R3.L = 31; 19 1.1 christos R3.H = 0; 20 1.1 christos R6 = ASHIFT R0 BY R3.L; 21 1.1 christos DBGA ( R6.L , 0x0000 ); 22 1.1 christos DBGA ( R6.H , 0x8000 ); 23 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 24 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 25 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 26 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 27 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 28 1.1 christos 29 1.1 christos // arithmetic 30 1.1 christos // left by 32 31 1.1 christos // 8000 0001 -> 8000 0000 32 1.1 christos R7 = 0; 33 1.1 christos ASTAT = R7; 34 1.1 christos R3.L = 32; 35 1.1 christos R3.H = 0; 36 1.1 christos R6 = ASHIFT R0 BY R3.L; 37 1.1 christos DBGA ( R6.L , 0xffff ); 38 1.1 christos DBGA ( R6.H , 0xffff ); 39 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 40 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 41 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 42 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 43 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 44 1.1 christos 45 1.1 christos // arithmetic 46 1.1 christos // left by 40 47 1.1 christos // 8000 0001 -> 8000 0000 48 1.1 christos R7 = 0; 49 1.1 christos ASTAT = R7; 50 1.1 christos R3.L = 40; 51 1.1 christos R3.H = 0; 52 1.1 christos R6 = ASHIFT R0 BY R3.L; 53 1.1 christos DBGA ( R6.L , 0xFF80 ); 54 1.1 christos DBGA ( R6.H , 0xFFFF ); 55 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 56 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 57 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 58 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 59 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 60 1.1 christos 61 1.1 christos // arithmetic 62 1.1 christos // left by -32 63 1.1 christos // 8000 0001 -> 8000 0000 64 1.1 christos R7 = 0; 65 1.1 christos ASTAT = R7; 66 1.1 christos R3.L = -32; 67 1.1 christos R3.H = 0; 68 1.1 christos R6 = ASHIFT R0 BY R3.L; 69 1.1 christos DBGA ( R6.L , 0xffff ); 70 1.1 christos DBGA ( R6.H , 0xffff ); 71 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 72 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 73 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 74 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 75 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 76 1.1 christos 77 1.1 christos // arithmetic 78 1.1 christos // left by 63 (off scale) 79 1.1 christos // 8000 0001 -> 0000 0000 80 1.1 christos R7 = 0; 81 1.1 christos ASTAT = R7; 82 1.1 christos R0.L = 1; 83 1.1 christos R0.H = 0; 84 1.1 christos R3.L = 63; 85 1.1 christos R3.H = 0; 86 1.1 christos R6 = ASHIFT R0 BY R3.L; 87 1.1 christos DBGA ( R6.L , 0x0000 ); 88 1.1 christos DBGA ( R6.H , 0x0000 ); 89 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 90 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 91 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 92 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 93 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 94 1.1 christos 95 1.1 christos // arithmetic 96 1.1 christos // left by 255 looks like -1 (mask 7 bits) 97 1.1 christos // 8000 0001 -> 0000 0000 98 1.1 christos R7 = 0; 99 1.1 christos ASTAT = R7; 100 1.1 christos R0.L = 0x0100; 101 1.1 christos R0.H = 0; 102 1.1 christos R3.L = 255; 103 1.1 christos R3.H = 0; 104 1.1 christos R6 = ASHIFT R0 BY R3.L; 105 1.1 christos DBGA ( R6.L , 0x0080 ); 106 1.1 christos DBGA ( R6.H , 0x0000 ); 107 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 108 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 109 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 110 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 111 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 112 1.1 christos 113 1.1 christos // arithmetic 114 1.1 christos // left by 1 115 1.1 christos // 8000 0001 -> 0000 0002 116 1.1 christos R0.L = 0x0001; 117 1.1 christos R0.H = 0x8000; 118 1.1 christos R3.L = 1; 119 1.1 christos R3.H = 0; 120 1.1 christos R6 = ASHIFT R0 BY R3.L; 121 1.1 christos DBGA ( R6.L , 0x0002 ); 122 1.1 christos DBGA ( R6.H , 0x0000 ); 123 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 124 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 125 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 126 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 127 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 128 1.1 christos 129 1.1 christos // arithmetic 130 1.1 christos // right by 1 131 1.1 christos // 8000 0001 -> 0000 0002 132 1.1 christos R0.L = 0x0001; 133 1.1 christos R0.H = 0x8000; 134 1.1 christos R3.L = -1; 135 1.1 christos R3.H = 0; 136 1.1 christos R6 = ASHIFT R0 BY R3.L; 137 1.1 christos DBGA ( R6.L , 0x0000 ); 138 1.1 christos DBGA ( R6.H , 0xc000 ); 139 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 140 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 141 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 142 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 143 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 144 1.1 christos 145 1.1 christos // arithmetic 146 1.1 christos // right by -31 147 1.1 christos // 8000 0001 -> ffff ffff 148 1.1 christos R0.L = 0x0001; 149 1.1 christos R0.H = 0x8000; 150 1.1 christos R3.L = -31; 151 1.1 christos R3.H = 0; 152 1.1 christos R6 = ASHIFT R0 BY R3.L; 153 1.1 christos DBGA ( R6.L , 0xffff ); 154 1.1 christos DBGA ( R6.H , 0xffff ); 155 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 156 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 157 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 158 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 159 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 160 1.1 christos 161 1.1 christos // logic 162 1.1 christos // left by largest positive magnitude of 31 (0x1f) 163 1.1 christos // 8000 0001 -> 8000 0000 164 1.1 christos R0.L = 0x0001; 165 1.1 christos R0.H = 0x8000; 166 1.1 christos R3.L = 31; 167 1.1 christos R3.H = 0; 168 1.1 christos R6 = ASHIFT R0 BY R3.L; 169 1.1 christos DBGA ( R6.L , 0x0000 ); 170 1.1 christos DBGA ( R6.H , 0x8000 ); 171 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 172 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 173 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 174 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 175 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 176 1.1 christos 177 1.1 christos // logic 178 1.1 christos // left by 1 179 1.1 christos // 8000 0001 -> 0000 0002 180 1.1 christos R0.L = 0x0001; 181 1.1 christos R0.H = 0x8000; 182 1.1 christos R3.L = 1; 183 1.1 christos R3.H = 0; 184 1.1 christos R6 = LSHIFT R0 BY R3.L; 185 1.1 christos DBGA ( R6.L , 0x0002 ); 186 1.1 christos DBGA ( R6.H , 0x0000 ); 187 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 188 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 189 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 190 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 191 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 192 1.1 christos 193 1.1 christos // logic 194 1.1 christos // right by 1 195 1.1 christos // 8000 0001 -> 4000 0000 196 1.1 christos R0.L = 0x0001; 197 1.1 christos R0.H = 0x8000; 198 1.1 christos R3.L = -1; 199 1.1 christos R3.H = 0; 200 1.1 christos R6 = LSHIFT R0 BY R3.L; 201 1.1 christos DBGA ( R6.L , 0x0000 ); 202 1.1 christos DBGA ( R6.H , 0x4000 ); 203 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 204 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 205 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 206 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 207 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 208 1.1 christos 209 1.1 christos // logic 210 1.1 christos // right by largest negative magnitude of -31 211 1.1 christos // 8000 0001 -> 0000 0001 212 1.1 christos R0.L = 0x0001; 213 1.1 christos R0.H = 0x8000; 214 1.1 christos R3.L = -31; 215 1.1 christos R3.H = 0; 216 1.1 christos R6 = LSHIFT R0 BY R3.L; 217 1.1 christos DBGA ( R6.L , 0x0001 ); 218 1.1 christos DBGA ( R6.H , 0x0000 ); 219 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 220 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 221 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 222 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 223 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 224 1.1 christos 225 1.1 christos // logic 226 1.1 christos // right by -32 227 1.1 christos // 8000 0001 -> 0000 0001 228 1.1 christos R0.L = 0x0001; 229 1.1 christos R0.H = 0x8000; 230 1.1 christos R3.L = -32; 231 1.1 christos R3.H = 0; 232 1.1 christos R6 = LSHIFT R0 BY R3.L; 233 1.1 christos DBGA ( R6.L , 0x0000 ); 234 1.1 christos DBGA ( R6.H , 0x0000 ); 235 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 236 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 237 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 238 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 239 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 240 1.1 christos 241 1.1 christos // logic 242 1.1 christos // by +40 243 1.1 christos // 8000 0001 -> 0000 0001 244 1.1 christos R0.L = 0x0001; 245 1.1 christos R0.H = 0x8000; 246 1.1 christos R3.L = 40; 247 1.1 christos R3.H = 0; 248 1.1 christos R6 = LSHIFT R0 BY R3.L; 249 1.1 christos DBGA ( R6.L , 0x0080 ); 250 1.1 christos DBGA ( R6.H , 0x0000 ); 251 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 252 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 253 1.1 christos 254 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 255 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 256 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 257 1.1 christos 258 1.1 christos // rot 259 1.1 christos // left by 1 260 1.1 christos // 8000 0001 -> 0000 0002 cc=1 261 1.1 christos R7 = 0; 262 1.1 christos CC = R7; 263 1.1 christos R6 = ROT R0 BY 1; 264 1.1 christos DBGA ( R6.L , 0x0002 ); 265 1.1 christos DBGA ( R6.H , 0x0000 ); 266 1.1 christos R7 = CC; DBGA ( R7.L , 0x0001 ); 267 1.1 christos 268 1.1 christos // rot 269 1.1 christos // right by -1 270 1.1 christos // 8000 0001 -> 4000 0000 cc=1 271 1.1 christos R7 = 0; 272 1.1 christos CC = R7; 273 1.1 christos R6 = ROT R0 BY -1; 274 1.1 christos DBGA ( R6.L , 0x0000 ); 275 1.1 christos DBGA ( R6.H , 0x4000 ); 276 1.1 christos R7 = CC; DBGA ( R7.L , 0x0001 ); 277 1.1 christos 278 1.1 christos // rot 279 1.1 christos // right by largest positive magnitude of 31 280 1.1 christos // 8000 0001 -> a000 0000 cc=0 281 1.1 christos R7 = 0; 282 1.1 christos CC = R7; 283 1.1 christos R6 = ROT R0 BY 31; 284 1.1 christos DBGA ( R6.L , 0x0000 ); 285 1.1 christos DBGA ( R6.H , 0xa000 ); 286 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 ); 287 1.1 christos 288 1.1 christos // rot 289 1.1 christos // right by largest positive magnitude of 31 with cc=1 290 1.1 christos // 8000 0001 cc=1 -> a000 0000 cc=0 291 1.1 christos R7 = 1; 292 1.1 christos CC = R7; 293 1.1 christos R6 = ROT R0 BY 31; 294 1.1 christos DBGA ( R6.L , 0x0000 ); 295 1.1 christos DBGA ( R6.H , 0xe000 ); 296 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 ); 297 1.1 christos 298 1.1 christos // rot 299 1.1 christos // right by largest negative magnitude of -31 300 1.1 christos // 8000 0001 -> 0000 0005 cc=0 301 1.1 christos R7 = 0; 302 1.1 christos CC = R7; 303 1.1 christos R6 = ROT R0 BY -31; 304 1.1 christos DBGA ( R6.L , 0x0005 ); 305 1.1 christos DBGA ( R6.H , 0x0000 ); 306 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 ); 307 1.1 christos 308 1.1 christos // rot 309 1.1 christos // right by largest negative magnitude of -31 with cc=1 310 1.1 christos // 8000 0001 cc=1 -> 0000 0007 cc=0 311 1.1 christos R7 = 1; 312 1.1 christos CC = R7; 313 1.1 christos R6 = ROT R0 BY -31; 314 1.1 christos DBGA ( R6.L , 0x0007 ); 315 1.1 christos DBGA ( R6.H , 0x0000 ); 316 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 ); 317 1.1 christos 318 1.1 christos // rot 319 1.1 christos // left by 7 320 1.1 christos // 8000 0001 cc=1 -> 0000 00e0 cc=0 321 1.1 christos R7 = 1; 322 1.1 christos CC = R7; 323 1.1 christos R6 = ROT R0 BY 7; 324 1.1 christos DBGA ( R6.L , 0x00e0 ); 325 1.1 christos DBGA ( R6.H , 0x0000 ); 326 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 ); 327 1.1 christos 328 1.1 christos // rot by zero 329 1.1 christos // 8000 0001 -> 8000 000 330 1.1 christos R7 = 1; 331 1.1 christos CC = R7; 332 1.1 christos R6 = ROT R0 BY 0; 333 1.1 christos DBGA ( R6.L , 0x0001 ); 334 1.1 christos DBGA ( R6.H , 0x8000 ); 335 1.1 christos R7 = CC; DBGA ( R7.L , 0x0001 ); 336 1.1 christos 337 1.1 christos // 0 by 1 338 1.1 christos R7 = 0; 339 1.1 christos R0 = 0; 340 1.1 christos ASTAT = R7; 341 1.1 christos R6 = R0 << 1; 342 1.1 christos DBGA ( R6.L , 0x0000 ); 343 1.1 christos DBGA ( R6.H , 0x0000 ); 344 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 345 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 346 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 347 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 348 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 349 1.1 christos 350 1.1 christos pass 351