From 19985e9a8dccc69ef66ad425d74c6dba354b88ad Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Fri, 5 Dec 2014 20:07:19 +0000 Subject: [PATCH] [Hexagon] Adding tfrih/l instructions. llvm-svn: 223506 --- llvm/lib/Target/Hexagon/HexagonInstrInfo.td | 22 ++++++++++++++++++++++ llvm/test/MC/Disassembler/Hexagon/alu32_alu.txt | 4 ++++ 2 files changed, 26 insertions(+) diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.td b/llvm/lib/Target/Hexagon/HexagonInstrInfo.td index aeaaf53..08d1d6c 100644 --- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.td +++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.td @@ -391,6 +391,28 @@ multiclass ALU32_Pbase; } +let hasSideEffects = 0, hasNewValue = 1 in +class T_tfr16 + : ALU32Inst <(outs IntRegs:$Rx), (ins IntRegs:$src1, u16Imm:$u16), + "$Rx"#!if(isHi, ".h", ".l")#" = #$u16", + [], "$src1 = $Rx" > { + bits<5> Rx; + bits<16> u16; + + let IClass = 0b0111; + let Inst{27-26} = 0b00; + let Inst{25-24} = !if(isHi, 0b10, 0b01); + let Inst{23-22} = u16{15-14}; + let Inst{21} = 0b1; + let Inst{20-16} = Rx; + let Inst{13-0} = u16{13-0}; + } + +let isCodeGenOnly = 0 in { +def A2_tfril: T_tfr16<0>; +def A2_tfrih: T_tfr16<1>; +} + multiclass ALU32_Pred { let isPredicatedFalse = PredNot in { defm _c#NAME : ALU32_Pbase; diff --git a/llvm/test/MC/Disassembler/Hexagon/alu32_alu.txt b/llvm/test/MC/Disassembler/Hexagon/alu32_alu.txt index c92b993..10ee34f 100644 --- a/llvm/test/MC/Disassembler/Hexagon/alu32_alu.txt +++ b/llvm/test/MC/Disassembler/Hexagon/alu32_alu.txt @@ -16,5 +16,9 @@ # CHECK: r17 = sub(r31, r21) 0x11 0xc0 0xbf 0x70 # CHECK: r17 = sxtb(r31) +0x15 0xc0 0x31 0x72 +# CHECK: r17.h = #21 +0x15 0xc0 0x31 0x71 +# CHECK: r17.l = #21 0x11 0xc0 0xd5 0x70 # CHECK: r17 = zxth(r21) -- 2.7.4