3031fda543817a491c9429a5a20e454eb7d57376
[oota-llvm.git] / lib / Target / CellSPU / SPU128InstrInfo.td
1 //===--- SPU128InstrInfo.td - Cell SPU 128-bit operations -*- tablegen -*--===//
2 //
3 //                     Cell SPU 128-bit operations
4 //
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)>;
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)>;