| Scott Michel | 6887caf | 2009-01-06 03:36:14 +0000 | [diff] [blame] | 1 | //===--- SPU128InstrInfo.td - Cell SPU 128-bit operations -*- tablegen -*--===// |
| 2 | // |
| 3 | // Cell SPU 128-bit operations |
| 4 | // |
| Scott Michel | 6887caf | 2009-01-06 03:36:14 +0000 | [diff] [blame] | 5 | //===----------------------------------------------------------------------===// |
| 6 | |
| 7 | // zext 32->128: Zero extend 32-bit to 128-bit |
| 8 | def : Pat<(i128 (zext R32C:$rSrc)), |
| 9 | (ROTQMBYIr128_zext_r32 R32C:$rSrc, 12)>; |
| 10 | |
| 11 | // zext 64->128: Zero extend 64-bit to 128-bit |
| 12 | def : Pat<(i128 (zext R64C:$rSrc)), |
| 13 | (ROTQMBYIr128_zext_r64 R64C:$rSrc, 8)>; |
| 14 | |
| 15 | // zext 16->128: Zero extend 16-bit to 128-bit |
| 16 | def : Pat<(i128 (zext R16C:$rSrc)), |
| 17 | (ROTQMBYIr128_zext_r32 (ANDi16i32 R16C:$rSrc, (ILAr32 0xffff)), 12)>; |
| 18 | |
| 19 | // zext 8->128: Zero extend 8-bit to 128-bit |
| 20 | def : Pat<(i128 (zext R8C:$rSrc)), |
| 21 | (ROTQMBYIr128_zext_r32 (ANDIi8i32 R8C:$rSrc, 0xf), 12)>; |
| Scott Michel | ed7d79f | 2009-01-21 04:58:48 +0000 | [diff] [blame] | 22 | |
| 23 | // anyext 32->128: Zero extend 32-bit to 128-bit |
| 24 | def : Pat<(i128 (anyext R32C:$rSrc)), |
| 25 | (ROTQMBYIr128_zext_r32 R32C:$rSrc, 12)>; |
| 26 | |
| 27 | // anyext 64->128: Zero extend 64-bit to 128-bit |
| 28 | def : Pat<(i128 (anyext R64C:$rSrc)), |
| 29 | (ROTQMBYIr128_zext_r64 R64C:$rSrc, 8)>; |
| 30 | |
| 31 | // anyext 16->128: Zero extend 16-bit to 128-bit |
| 32 | def : Pat<(i128 (anyext R16C:$rSrc)), |
| 33 | (ROTQMBYIr128_zext_r32 (ANDi16i32 R16C:$rSrc, (ILAr32 0xffff)), 12)>; |
| 34 | |
| 35 | // anyext 8->128: Zero extend 8-bit to 128-bit |
| 36 | def : Pat<(i128 (anyext R8C:$rSrc)), |
| 37 | (ROTQMBYIr128_zext_r32 (ANDIi8i32 R8C:$rSrc, 0xf), 12)>; |
| 38 | |
| 39 | // Shift left |
| 40 | def : Pat<(shl GPRC:$rA, R32C:$rB), |
| 41 | (SHLQBYBIr128 (SHLQBIr128 GPRC:$rA, R32C:$rB), R32C:$rB)>; |