aboutsummaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
authorJim Lin <jim@andestech.com>2023-07-25 08:31:04 +0800
committerJim Lin <jim@andestech.com>2023-07-25 10:11:36 +0800
commit2398e260806f8beabe017e408225b30897b29198 (patch)
tree70c35ec6f5f1d1634f48f847369661282d78f765 /llvm
parente7c9a99dfe21bac8028375a52e3ce1db5c8924f0 (diff)
downloadllvm-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.td58
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],