Index: llvm/lib/Target/Mips/MipsInstrInfo.td |
=================================================================== |
--- a/llvm/lib/Target/Mips/MipsInstrInfo.td |
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.td |
@@ -540,6 +540,37 @@ class AtomicCmpSwap<PatFrag Op, string W |
// Pseudo instructions |
//===----------------------------------------------------------------------===// |
+// @LOCALMOD-START |
+ |
+// Older Macro based SFI Model |
+def SFI_GUARD_LOAD_STORE : |
+MipsPseudo<(outs CPURegs:$dst), (ins CPURegs:$src1, CPURegs:$src2), |
+ "sfi_load_store_preamble\t$dst, $src1, $src2", []>; |
+ |
+def SFI_GUARD_INDIRECT_CALL : |
+MipsPseudo<(outs CPURegs:$dst), (ins CPURegs:$src1, CPURegs:$src2), |
+ "sfi_indirect_call_preamble\t$dst, $src1, $src2", []>; |
+ |
+def SFI_GUARD_INDIRECT_JMP : |
+MipsPseudo<(outs CPURegs:$dst), (ins CPURegs:$src1, CPURegs:$src2), |
+ "sfi_indirect_jump_preamble\t$dst, $src1, $src2", []>; |
+ |
+def SFI_GUARD_CALL : |
+MipsPseudo<(outs), (ins), "sfi_call_preamble", []>; |
+ |
+def SFI_GUARD_RETURN : |
+MipsPseudo<(outs CPURegs:$dst), (ins CPURegs:$src1, CPURegs:$src2), |
+ "sfi_return_preamble\t$dst, $src1, $src2", []>; |
+ |
+def SFI_NOP_IF_AT_BUNDLE_END : |
+MipsPseudo<(outs), (ins), "sfi_nop_if_at_bundle_end", []>; |
+ |
+def SFI_DATA_MASK : |
+MipsPseudo<(outs CPURegs:$dst), (ins CPURegs:$src1, CPURegs:$src2), |
+ "sfi_data_mask\t$dst, $src1, $src2", []>; |
+ |
+// @LOCALMOD-END |
+ |
// As stack alignment is always done with addiu, we need a 16-bit immediate |
let Defs = [SP], Uses = [SP] in { |
def ADJCALLSTACKDOWN : MipsPseudo<(outs), (ins uimm16:$amt), |