1//Original:/testcases/core/c_dsp32shiftim_lhalf_rn/c_dsp32shiftim_lhalf_rn.dsp 2// Spec Reference: dspshiftimm dreg_lo(hi) = lshift (dreg_lo(hi) by imm5) 3# mach: bfin 4 5.include "testutils.inc" 6 start 7 8 9 10// lshift : neg data, count (+)=left (half reg) 11// d_lo = lshift (d_lo BY d_lo) 12// RLx by RLx 13imm32 r0, 0x00000000; 14R0.L = -1; 15imm32 r1, 0x00008001; 16imm32 r2, 0x00008002; 17imm32 r3, 0x00008003; 18imm32 r4, 0x00008004; 19imm32 r5, 0x00008005; 20imm32 r6, 0x00008006; 21imm32 r7, 0x00008007; 22R0.L = R0.L >> 1; 23R1.L = R1.L >> 2; 24R2.L = R2.L >> 3; 25R3.L = R3.L >> 4; 26R4.L = R4.L >> 5; 27R5.L = R5.L >> 6; 28R6.L = R6.L >> 7; 29R7.L = R7.L >> 8; 30CHECKREG r0, 0x00007FFF; 31CHECKREG r1, 0x00002000; 32CHECKREG r2, 0x00001000; 33CHECKREG r3, 0x00000800; 34CHECKREG r4, 0x00000400; 35CHECKREG r5, 0x00000200; 36CHECKREG r6, 0x00000100; 37CHECKREG r7, 0x00000080; 38 39imm32 r0, 0x00008001; 40R1.L = -1; 41imm32 r2, 0x00008002; 42imm32 r3, 0x00008003; 43imm32 r4, 0x00008004; 44imm32 r5, 0x00008005; 45imm32 r6, 0x00008006; 46imm32 r7, 0x00008007; 47R0.L = R0.L >> 9; 48R1.L = R1.L >> 10; 49R2.L = R2.L >> 11; 50R3.L = R3.L >> 12; 51R4.L = R4.L >> 13; 52R5.L = R5.L >> 14; 53R6.L = R6.L >> 15; 54R7.L = R7.L >> 10; 55CHECKREG r0, 0x00000040; 56CHECKREG r1, 0x0000003F; 57CHECKREG r2, 0x00000010; 58CHECKREG r3, 0x00000008; 59CHECKREG r4, 0x00000004; 60CHECKREG r5, 0x00000002; 61CHECKREG r6, 0x00000001; 62CHECKREG r7, 0x00000020; 63 64 65imm32 r0, 0x30008001; 66imm32 r1, 0x30008001; 67R2.L = -15; 68imm32 r3, 0x30008003; 69imm32 r4, 0x30008004; 70imm32 r5, 0x30008005; 71imm32 r6, 0x30008006; 72imm32 r7, 0x30008007; 73R7.L = R0.L >> 1; 74R6.L = R1.L >> 2; 75R5.L = R2.L >> 3; 76R4.L = R3.L >> 4; 77R3.L = R4.L >> 5; 78R2.L = R5.L >> 6; 79R0.L = R7.L >> 8; 80R1.L = R6.L >> 7; 81CHECKREG r0, 0x30000040; 82CHECKREG r1, 0x30000040; 83CHECKREG r2, 0x0000007F; 84CHECKREG r3, 0x30000040; 85CHECKREG r4, 0x30000800; 86CHECKREG r5, 0x30001FFE; 87CHECKREG r6, 0x30002000; 88CHECKREG r7, 0x30004000; 89 90imm32 r0, 0x00008001; 91imm32 r1, 0x00008001; 92imm32 r2, 0x00008002; 93R3.L = -16; 94imm32 r4, 0x00008004; 95imm32 r5, 0x00008005; 96imm32 r6, 0x00008006; 97imm32 r7, 0x00008007; 98R6.L = R0.L >> 13; 99R5.L = R1.L >> 13; 100R4.L = R2.L >> 13; 101R3.L = R3.L >> 13; 102R2.L = R4.L >> 13; 103R1.L = R5.L >> 13; 104R0.L = R6.L >> 13; 105R7.L = R7.L >> 13; 106CHECKREG r0, 0x00000000; 107CHECKREG r1, 0x00000000; 108CHECKREG r2, 0x00000000; 109CHECKREG r3, 0x30000007; 110CHECKREG r4, 0x00000004; 111CHECKREG r5, 0x00000004; 112CHECKREG r6, 0x00000004; 113CHECKREG r7, 0x00000004; 114 115// d_lo = lshift (d_hi BY d_lo) 116// RHx by RLx 117imm32 r0, 0x00000000; 118imm32 r1, 0x80010000; 119imm32 r2, 0x80020000; 120imm32 r3, 0x80030000; 121imm32 r4, 0x80040000; 122imm32 r5, 0x80050000; 123imm32 r6, 0x80060000; 124imm32 r7, 0x80070000; 125R0.L = R0.H >> 1; 126R1.L = R1.H >> 1; 127R2.L = R2.H >> 1; 128R3.L = R3.H >> 1; 129R4.L = R4.H >> 1; 130R5.L = R5.H >> 1; 131R6.L = R6.H >> 1; 132R7.L = R7.H >> 1; 133CHECKREG r0, 0x00000000; 134CHECKREG r1, 0x80014000; 135CHECKREG r2, 0x80024001; 136CHECKREG r3, 0x80034001; 137CHECKREG r4, 0x80044002; 138CHECKREG r5, 0x80054002; 139CHECKREG r6, 0x80064003; 140CHECKREG r7, 0x80074003; 141 142imm32 r0, 0x80010000; 143R1.L = -1; 144imm32 r2, 0x80020000; 145imm32 r3, 0x80030000; 146imm32 r4, 0x80040000; 147imm32 r5, 0x80050000; 148imm32 r6, 0x80060000; 149imm32 r7, 0x80070000; 150R1.L = R0.H >> 10; 151R2.L = R1.H >> 11; 152R3.L = R2.H >> 12; 153R4.L = R3.H >> 13; 154R5.L = R4.H >> 14; 155R6.L = R5.H >> 15; 156R0.L = R7.H >> 15; 157R7.L = R6.H >> 15; 158CHECKREG r0, 0x80010001; 159CHECKREG r1, 0x80010020; 160CHECKREG r2, 0x80020010; 161CHECKREG r3, 0x80030008; 162CHECKREG r4, 0x80040004; 163CHECKREG r5, 0x80050002; 164CHECKREG r6, 0x80060001; 165CHECKREG r7, 0x80070001; 166 167 168imm32 r0, 0xa0010000; 169imm32 r1, 0xa0010000; 170R2.L = -15; 171imm32 r3, 0xa0030000; 172imm32 r4, 0xa0040000; 173imm32 r5, 0xa0050000; 174imm32 r6, 0xa0060000; 175imm32 r7, 0xa0070000; 176R2.L = R0.H >> 2; 177R3.L = R1.H >> 2; 178R4.L = R2.H >> 2; 179R5.L = R3.H >> 2; 180R6.L = R4.H >> 2; 181R7.L = R5.H >> 2; 182R0.L = R6.H >> 2; 183R1.L = R7.H >> 2; 184CHECKREG r0, 0xA0012801; 185CHECKREG r1, 0xA0012801; 186CHECKREG r2, 0x80022800; 187CHECKREG r3, 0xA0032800; 188CHECKREG r4, 0xA0042000; 189CHECKREG r5, 0xA0052800; 190CHECKREG r6, 0xA0062801; 191CHECKREG r7, 0xA0072801; 192 193imm32 r0, 0xb0010001; 194imm32 r1, 0xb0010001; 195imm32 r2, 0xb0020002; 196R3.L = -16; 197imm32 r4, 0xb0040004; 198imm32 r5, 0xb0050005; 199imm32 r6, 0xb0060006; 200imm32 r7, 0xb0070007; 201R3.L = R0.H >> 13; 202R4.L = R1.H >> 13; 203R5.L = R2.H >> 13; 204R6.L = R3.H >> 13; 205R7.L = R4.H >> 13; 206R0.L = R5.H >> 13; 207R1.L = R6.H >> 13; 208R2.L = R7.H >> 13; 209CHECKREG r0, 0xB0010005; 210CHECKREG r1, 0xB0010005; 211CHECKREG r2, 0xB0020005; 212CHECKREG r3, 0xA0030005; 213CHECKREG r4, 0xB0040005; 214CHECKREG r5, 0xB0050005; 215CHECKREG r6, 0xB0060005; 216CHECKREG r7, 0xB0070005; 217 218// d_hi = lshift (d_lo BY d_lo) 219// RLx by RLx 220imm32 r0, 0x00000001; 221imm32 r1, 0x00000001; 222imm32 r2, 0x00000002; 223imm32 r3, 0x00000003; 224imm32 r4, 0x00000004; 225imm32 r5, 0x00000005; 226imm32 r6, 0x00000006; 227imm32 r7, 0x00000007; 228R0.H = R0.L >> 14; 229R1.H = R1.L >> 14; 230R2.H = R2.L >> 14; 231R3.H = R3.L >> 14; 232R4.H = R4.L >> 14; 233R5.H = R5.L >> 14; 234R6.H = R6.L >> 14; 235R7.H = R7.L >> 14; 236CHECKREG r0, 0x00000001; 237CHECKREG r1, 0x00000001; 238CHECKREG r2, 0x00000002; 239CHECKREG r3, 0x00000003; 240CHECKREG r4, 0x00000004; 241CHECKREG r5, 0x00000005; 242CHECKREG r6, 0x00000006; 243CHECKREG r7, 0x00000007; 244 245imm32 r0, 0x00008001; 246imm32 r1, 0x00008001; 247imm32 r2, 0x00008002; 248imm32 r3, 0x00008003; 249imm32 r4, 0x00008004; 250R5.L = -1; 251imm32 r6, 0x00008006; 252imm32 r7, 0x00008007; 253R1.H = R0.L >> 5; 254R0.H = R7.L >> 5; 255R2.H = R1.L >> 5; 256R3.H = R2.L >> 5; 257R4.H = R3.L >> 5; 258R5.H = R4.L >> 5; 259R6.H = R5.L >> 5; 260R7.H = R6.L >> 5; 261CHECKREG r0, 0x04008001; 262CHECKREG r1, 0x04008001; 263CHECKREG r2, 0x04008002; 264CHECKREG r3, 0x04008003; 265CHECKREG r4, 0x04008004; 266CHECKREG r5, 0x0400FFFF; 267CHECKREG r6, 0x07FF8006; 268CHECKREG r7, 0x04008007; 269 270 271imm32 r0, 0x00009001; 272imm32 r1, 0x00009001; 273imm32 r2, 0x00009002; 274imm32 r3, 0x00009003; 275imm32 r4, 0x00009004; 276imm32 r5, 0x00009005; 277R6.L = -15; 278imm32 r7, 0x00009007; 279R3.H = R0.L >> 14; 280R4.H = R1.L >> 14; 281R5.H = R2.L >> 14; 282R6.H = R3.L >> 14; 283R7.H = R4.L >> 14; 284R0.H = R5.L >> 14; 285R1.H = R6.L >> 14; 286R2.H = R7.L >> 14; 287CHECKREG r0, 0x00029001; 288CHECKREG r1, 0x00039001; 289CHECKREG r2, 0x00029002; 290CHECKREG r3, 0x00029003; 291CHECKREG r4, 0x00029004; 292CHECKREG r5, 0x00029005; 293CHECKREG r6, 0x0002FFF1; 294CHECKREG r7, 0x00029007; 295 296imm32 r0, 0x0000a001; 297imm32 r1, 0x0000a001; 298imm32 r2, 0x0000a002; 299imm32 r3, 0x0000a003; 300imm32 r4, 0x0000a004; 301imm32 r5, 0x0000a005; 302imm32 r6, 0x0000a006; 303R7.L = -16; 304R4.H = R0.L >> 15; 305R5.H = R1.L >> 15; 306R6.H = R2.L >> 15; 307R7.H = R3.L >> 15; 308R0.H = R4.L >> 15; 309R1.H = R5.L >> 15; 310R2.H = R6.L >> 15; 311R3.H = R7.L >> 15; 312CHECKREG r0, 0x0001A001; 313CHECKREG r1, 0x0001A001; 314CHECKREG r2, 0x0001A002; 315CHECKREG r3, 0x0001A003; 316CHECKREG r4, 0x0001A004; 317CHECKREG r5, 0x0001A005; 318CHECKREG r6, 0x0001A006; 319CHECKREG r7, 0x0001FFF0; 320 321// d_lo = lshft (d_hi BY d_lo) 322// RHx by RLx 323imm32 r0, 0x80010000; 324imm32 r1, 0x80010000; 325imm32 r2, 0x80020000; 326imm32 r3, 0x80030000; 327R4.L = -1; 328imm32 r5, 0x80050000; 329imm32 r6, 0x80060000; 330imm32 r7, 0x80070000; 331R0.H = R0.H >> 4; 332R1.H = R1.H >> 4; 333R2.H = R2.H >> 4; 334R3.H = R3.H >> 4; 335R4.H = R4.H >> 4; 336R5.H = R5.H >> 4; 337R6.H = R6.H >> 4; 338R7.H = R7.H >> 4; 339CHECKREG r0, 0x08000000; 340CHECKREG r1, 0x08000000; 341CHECKREG r2, 0x08000000; 342CHECKREG r3, 0x08000000; 343CHECKREG r4, 0x0000FFFF; 344CHECKREG r5, 0x08000000; 345CHECKREG r6, 0x08000000; 346CHECKREG r7, 0x08000000; 347 348imm32 r0, 0x80010000; 349imm32 r1, 0x80010000; 350imm32 r2, 0x80020000; 351imm32 r3, 0x80030000; 352imm32 r4, 0x80040000; 353R5.L = -1; 354imm32 r6, 0x80060000; 355imm32 r7, 0x80070000; 356R1.H = R0.H >> 15; 357R2.H = R1.H >> 15; 358R3.H = R2.H >> 15; 359R4.H = R3.H >> 15; 360R5.H = R4.H >> 15; 361R6.H = R5.H >> 15; 362R0.H = R7.H >> 15; 363R7.H = R6.H >> 15; 364CHECKREG r0, 0x00010000; 365CHECKREG r1, 0x00010000; 366CHECKREG r2, 0x00000000; 367CHECKREG r3, 0x00000000; 368CHECKREG r4, 0x00000000; 369CHECKREG r5, 0x0000FFFF; 370CHECKREG r6, 0x00000000; 371CHECKREG r7, 0x00000000; 372 373 374imm32 r0, 0xd0010000; 375imm32 r1, 0xd0010000; 376imm32 r2, 0xd0020000; 377imm32 r3, 0xd0030000; 378imm32 r4, 0xd0040000; 379imm32 r5, 0xd0050000; 380R6.L = -15; 381imm32 r7, 0xd0070000; 382R3.H = R0.H >> 6; 383R4.H = R1.H >> 6; 384R5.H = R2.H >> 6; 385R6.H = R3.H >> 6; 386R7.H = R4.H >> 6; 387R0.H = R5.H >> 6; 388R1.H = R6.H >> 6; 389R2.H = R7.H >> 6; 390CHECKREG r0, 0x000D0000; 391CHECKREG r1, 0x00000000; 392CHECKREG r2, 0x00000000; 393CHECKREG r3, 0x03400000; 394CHECKREG r4, 0x03400000; 395CHECKREG r5, 0x03400000; 396CHECKREG r6, 0x000DFFF1; 397CHECKREG r7, 0x000D0000; 398 399imm32 r0, 0xe0010000; 400imm32 r1, 0xe0010000; 401imm32 r2, 0xe0020000; 402imm32 r3, 0xe0030000; 403imm32 r4, 0xe0040000; 404imm32 r5, 0xe0050000; 405imm32 r6, 0xe0060000; 406R7.L = -16; 407R4.H = R0.H >> 7; 408R5.H = R1.H >> 7; 409R6.H = R2.H >> 7; 410R7.H = R3.H >> 7; 411R0.H = R4.H >> 7; 412R1.H = R5.H >> 7; 413R2.H = R6.H >> 7; 414R3.H = R7.H >> 7; 415CHECKREG r0, 0x00030000; 416CHECKREG r1, 0x00030000; 417CHECKREG r2, 0x00030000; 418CHECKREG r3, 0x00030000; 419CHECKREG r4, 0x01C00000; 420CHECKREG r5, 0x01C00000; 421CHECKREG r6, 0x01C00000; 422CHECKREG r7, 0x01C0FFF0; 423 424pass 425