diff options
author | Jim Lin <jim@andestech.com> | 2023-07-25 08:31:04 +0800 |
---|---|---|
committer | Jim Lin <jim@andestech.com> | 2023-07-25 10:11:36 +0800 |
commit | 2398e260806f8beabe017e408225b30897b29198 (patch) | |
tree | 70c35ec6f5f1d1634f48f847369661282d78f765 /llvm | |
parent | e7c9a99dfe21bac8028375a52e3ce1db5c8924f0 (diff) | |
download | llvm-2398e260806f8beabe017e408225b30897b29198.zip llvm-2398e260806f8beabe017e408225b30897b29198.tar.gz llvm-2398e260806f8beabe017e408225b30897b29198.tar.bz2 |
[RISCV] Add a common class for cm.push, cm.popret, cm.popretz and cm.pop.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D156092
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Target/RISCV/RISCVInstrInfoZc.td | 58 |
1 files changed, 16 insertions, 42 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td index ff7cdef..6687343 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td @@ -129,10 +129,16 @@ class RVZcArith_r<bits<5> funct5, string OpcodeStr> : let Constraints = "$rd = $rd_wb"; } -class RVInstZcCPPP<dag outs, dag ins, string opcodestr, string argstr> - : RVInst16<outs, ins, opcodestr, argstr, [], InstFormatOther> { +class RVInstZcCPPP<bits<5> funct5, string opcodestr> + : RVInst16<(outs), (ins rlist:$rlist, spimm:$spimm), + opcodestr, "{$rlist}, $spimm", [], InstFormatOther> { + bits<4> rlist; + bits<16> spimm; let Inst{1-0} = 0b10; + let Inst{3-2} = spimm{5-4}; + let Inst{7-4} = rlist; + let Inst{12-8} = funct5; let Inst{15-13} = 0b101; } @@ -189,49 +195,17 @@ def CM_MVSA01 : RVInst16CA<0b101011, 0b01, 0b10, (outs SR07:$rs1, SR07:$rs2), } // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]... let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp] in { -let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in -def CM_PUSH : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm), - "cm.push", "{$rlist}, $spimm"> { - bits<4> rlist; - bits<16> spimm; - - let Inst{12-8} = 0b11000; - let Inst{7-4} = rlist; - let Inst{3-2} = spimm{5-4}; -} - -let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in -def CM_POPRET : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm), - "cm.popret", "{$rlist}, $spimm"> { - bits<4> rlist; - bits<16> spimm; - - let Inst{12-8} = 0b11110; - let Inst{7-4} = rlist; - let Inst{3-2} = spimm{5-4}; -} - -let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in -def CM_POPRETZ : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm), - "cm.popretz", "{$rlist}, $spimm"> { - bits<4> rlist; - bits<16> spimm; +let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in +def CM_PUSH : RVInstZcCPPP<0b11000, "cm.push">; - let Inst{12-8} = 0b11100; - let Inst{7-4} = rlist; - let Inst{3-2} = spimm{5-4}; -} +let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in +def CM_POPRET : RVInstZcCPPP<0b11110, "cm.popret">; -let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in -def CM_POP : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm), - "cm.pop", "{$rlist}, $spimm"> { - bits<4> rlist; - bits<16> spimm; +let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in +def CM_POPRETZ : RVInstZcCPPP<0b11100, "cm.popretz">; - let Inst{12-8} = 0b11010; - let Inst{7-4} = rlist; - let Inst{3-2} = spimm{5-4}; -} +let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in +def CM_POP : RVInstZcCPPP<0b11010, "cm.pop">; } // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]... let DecoderNamespace = "RVZcmt", Predicates = [HasStdExtZcmt], |