| 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),
|
|
|