blob: 3031fda543817a491c9429a5a20e454eb7d57376 [file] [log] [blame]
Scott Michel6887caf2009-01-06 03:36:14 +00001//===--- SPU128InstrInfo.td - Cell SPU 128-bit operations -*- tablegen -*--===//
2//
3// Cell SPU 128-bit operations
4//
Scott Michel6887caf2009-01-06 03:36:14 +00005//===----------------------------------------------------------------------===//
6
7// zext 32->128: Zero extend 32-bit to 128-bit
8def : Pat<(i128 (zext R32C:$rSrc)),
9 (ROTQMBYIr128_zext_r32 R32C:$rSrc, 12)>;
10
11// zext 64->128: Zero extend 64-bit to 128-bit
12def : Pat<(i128 (zext R64C:$rSrc)),
13 (ROTQMBYIr128_zext_r64 R64C:$rSrc, 8)>;
14
15// zext 16->128: Zero extend 16-bit to 128-bit
16def : 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
20def : Pat<(i128 (zext R8C:$rSrc)),
21 (ROTQMBYIr128_zext_r32 (ANDIi8i32 R8C:$rSrc, 0xf), 12)>;
Scott Micheled7d79f2009-01-21 04:58:48 +000022
23// anyext 32->128: Zero extend 32-bit to 128-bit
24def : Pat<(i128 (anyext R32C:$rSrc)),
25 (ROTQMBYIr128_zext_r32 R32C:$rSrc, 12)>;
26
27// anyext 64->128: Zero extend 64-bit to 128-bit
28def : Pat<(i128 (anyext R64C:$rSrc)),
29 (ROTQMBYIr128_zext_r64 R64C:$rSrc, 8)>;
30
31// anyext 16->128: Zero extend 16-bit to 128-bit
32def : 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
36def : Pat<(i128 (anyext R8C:$rSrc)),
37 (ROTQMBYIr128_zext_r32 (ANDIi8i32 R8C:$rSrc, 0xf), 12)>;
38
39// Shift left
40def : Pat<(shl GPRC:$rA, R32C:$rB),
41 (SHLQBYBIr128 (SHLQBIr128 GPRC:$rA, R32C:$rB), R32C:$rB)>;