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