From: Colin LeMahieu Date: Mon, 15 Dec 2014 21:17:03 +0000 (+0000) Subject: [Hexagon] Adding misc multiply encodings and tests. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1eb5ad1ecda739264a8f383ff65c20f6e259c466;p=oota-llvm.git [Hexagon] Adding misc multiply encodings and tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224273 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Hexagon/HexagonInstrInfo.td b/lib/Target/Hexagon/HexagonInstrInfo.td index 9cf057d1855..efda5ea0018 100644 --- a/lib/Target/Hexagon/HexagonInstrInfo.td +++ b/lib/Target/Hexagon/HexagonInstrInfo.td @@ -2008,6 +2008,54 @@ def M2_mpyud_nac_lh_s1: T_M2_mpyd_acc <0b01, 1, 1, 1>; def M2_mpyud_nac_ll_s1: T_M2_mpyd_acc <0b00, 1, 1, 1>; } +let hasNewValue = 1, opNewValue = 0 in +class T_MType_mpy RegTyBits, RegisterClass RC, + bits<3> MajOp, bits<3> MinOp, bit isSat = 0, bit isRnd = 0, + string op2Suffix = "", bit isRaw = 0, bit isHi = 0 > + : MInst <(outs IntRegs:$dst), (ins RC:$src1, RC:$src2), + "$dst = "#mnemonic + #"($src1, $src2"#op2Suffix#")" + #!if(MajOp{2}, ":<<1", "") + #!if(isRnd, ":rnd", "") + #!if(isSat, ":sat", "") + #!if(isRaw, !if(isHi, ":raw:hi", ":raw:lo"), ""), [] > { + bits<5> dst; + bits<5> src1; + bits<5> src2; + + let IClass = 0b1110; + + let Inst{27-24} = RegTyBits; + let Inst{23-21} = MajOp; + let Inst{20-16} = src1; + let Inst{13} = 0b0; + let Inst{12-8} = src2; + let Inst{7-5} = MinOp; + let Inst{4-0} = dst; + } + +class T_MType_rr1 MajOp, bits<3> MinOp, + bit isSat = 0, bit isRnd = 0 > + : T_MType_mpy; + +class T_MType_rr2 MajOp, bits<3> MinOp, + bit isSat = 0, bit isRnd = 0, string op2str = "" > + : T_MType_mpy; + +let CextOpcode = "mpyi", InputType = "reg", isCodeGenOnly = 0 in +def M2_mpyi : T_MType_rr1 <"mpyi", 0b000, 0b000>, ImmRegRel; + +let isCodeGenOnly = 0 in +def M2_mpyu_up : T_MType_rr1 <"mpyu", 0b010, 0b001>; + +let isCodeGenOnly = 0 in +def M2_dpmpyss_rnd_s0 : T_MType_rr1 <"mpy", 0b001, 0b001, 0, 1>; + +let isCodeGenOnly = 0 in { +def M2_hmmpyh_rs1 : T_MType_rr2 <"mpy", 0b101, 0b100, 1, 1, ".h">; +def M2_hmmpyl_rs1 : T_MType_rr2 <"mpy", 0b111, 0b100, 1, 1, ".l">; +} + // Multiply and use lower result. // Rd=+mpyi(Rs,#u8) let isExtendable = 1, opExtendable = 2, isExtentSigned = 0, opExtentBits = 8 in diff --git a/test/MC/Disassembler/Hexagon/xtype_mpy.txt b/test/MC/Disassembler/Hexagon/xtype_mpy.txt index f90310203c5..2bc9a77e0ad 100644 --- a/test/MC/Disassembler/Hexagon/xtype_mpy.txt +++ b/test/MC/Disassembler/Hexagon/xtype_mpy.txt @@ -1,5 +1,7 @@ # RUN: llvm-mc --triple hexagon -disassemble < %s | FileCheck %s +0x11 0xdf 0x15 0xed +# CHECK: r17 = mpyi(r21, r31) 0x10 0xdf 0x95 0xe6 # CHECK: r17:16 += mpy(r21.l, r31.l):<<1 0x30 0xdf 0x95 0xe6 @@ -120,3 +122,11 @@ # CHECK: r17 -= mpyu(r21.h, r31.l):<<1 0x71 0xdf 0xf5 0xee # CHECK: r17 -= mpyu(r21.h, r31.h):<<1 +0x31 0xdf 0x35 0xed +# CHECK: r17 = mpy(r21, r31):rnd +0x31 0xdf 0x55 0xed +# CHECK: r17 = mpyu(r21, r31) +0x91 0xdf 0xb5 0xed +# CHECK: r17 = mpy(r21, r31.h):<<1:rnd:sat +0x91 0xdf 0xf5 0xed +# CHECK: r17 = mpy(r21, r31.l):<<1:rnd:sat