From d69e4e2945cdb1eb28d578545fd33e260c15dc2c Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Tue, 16 Dec 2014 16:27:17 +0000 Subject: [PATCH] [Hexagon] Adding saturate and swizzle instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224343 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Hexagon/HexagonInstrInfo.td | 22 +++++++++++++++++++++ test/MC/Disassembler/Hexagon/xtype_perm.txt | 14 +++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 test/MC/Disassembler/Hexagon/xtype_perm.txt diff --git a/lib/Target/Hexagon/HexagonInstrInfo.td b/lib/Target/Hexagon/HexagonInstrInfo.td index 79ca41bdee5..b5711c27fee 100644 --- a/lib/Target/Hexagon/HexagonInstrInfo.td +++ b/lib/Target/Hexagon/HexagonInstrInfo.td @@ -2710,6 +2710,14 @@ class T_S2op_1 RegTyBits, RegisterClass RCOut, class T_S2op_1_di MajOp, bits<3> MinOp> : T_S2op_1 ; +let hasNewValue = 1 in +class T_S2op_1_id MajOp, bits<3> MinOp, bit isSat = 0> + : T_S2op_1 ; + +let hasNewValue = 1 in +class T_S2op_1_ii MajOp, bits<3> MinOp, bit isSat = 0> + : T_S2op_1 ; + // Sign extend word to doubleword let isCodeGenOnly = 0 in def A2_sxtw : T_S2op_1_di <"sxtw", 0b01, 0b000>; @@ -2720,6 +2728,20 @@ def: Pat <(i64 (sext I32:$src)), (A2_sxtw I32:$src)>; // STYPE/ALU - //===----------------------------------------------------------------------===// + +// Swizzle the bytes of a word +let isCodeGenOnly = 0 in +def A2_swiz : T_S2op_1_ii <"swiz", 0b10, 0b111>; + +// Saturate +let Defs = [USR_OVF], isCodeGenOnly = 0 in { + def A2_sat : T_S2op_1_id <"sat", 0b11, 0b000>; + def A2_satb : T_S2op_1_ii <"satb", 0b11, 0b111>; + def A2_satub : T_S2op_1_ii <"satub", 0b11, 0b110>; + def A2_sath : T_S2op_1_ii <"sath", 0b11, 0b100>; + def A2_satuh : T_S2op_1_ii <"satuh", 0b11, 0b101>; +} + //===----------------------------------------------------------------------===// // STYPE/BIT + //===----------------------------------------------------------------------===// diff --git a/test/MC/Disassembler/Hexagon/xtype_perm.txt b/test/MC/Disassembler/Hexagon/xtype_perm.txt new file mode 100644 index 00000000000..1de3d11d820 --- /dev/null +++ b/test/MC/Disassembler/Hexagon/xtype_perm.txt @@ -0,0 +1,14 @@ +# RUN: llvm-mc --triple hexagon -disassemble < %s | FileCheck %s + +0x11 0xc0 0xd4 0x88 +# CHECK: r17 = sat(r21:20) +0x91 0xc0 0xd5 0x8c +# CHECK: r17 = sath(r21) +0xb1 0xc0 0xd5 0x8c +# CHECK: r17 = satuh(r21) +0xd1 0xc0 0xd5 0x8c +# CHECK: r17 = satub(r21) +0xf1 0xc0 0xd5 0x8c +# CHECK: r17 = satb(r21) +0xf1 0xc0 0x95 0x8c +# CHECK: r17 = swiz(r21)