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