mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Fix for setjmp/longjmp exception handling on ARM. setjmp clobbers CPSR.
rdar://problem/9556069 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132699 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b3e705f889
commit
a1099f184d
@ -3772,7 +3772,7 @@ let isCall = 1,
|
||||
// These are pseudo-instructions and are lowered to individual MC-insts, so
|
||||
// no encoding information is necessary.
|
||||
let Defs =
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR,
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR, CPSR,
|
||||
QQQQ0, QQQQ1, QQQQ2, QQQQ3 ], hasSideEffects = 1, isBarrier = 1 in {
|
||||
def Int_eh_sjlj_setjmp : PseudoInst<(outs), (ins GPR:$src, GPR:$val),
|
||||
NoItinerary,
|
||||
@ -3781,7 +3781,7 @@ let Defs =
|
||||
}
|
||||
|
||||
let Defs =
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR ],
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR, CPSR ],
|
||||
hasSideEffects = 1, isBarrier = 1 in {
|
||||
def Int_eh_sjlj_setjmp_nofp : PseudoInst<(outs), (ins GPR:$src, GPR:$val),
|
||||
NoItinerary,
|
||||
|
@ -1460,7 +1460,7 @@ def tTPsoft : TIx2<0b11110, 0b11, 1, (outs), (ins), IIC_Br,
|
||||
// Defs. By doing so, we also cause the prologue/epilogue code to actively
|
||||
// preserve all of the callee-saved resgisters, which is exactly what we want.
|
||||
// $val is a scratch register for our use.
|
||||
let Defs = [ R0, R1, R2, R3, R4, R5, R6, R7, R12 ],
|
||||
let Defs = [ R0, R1, R2, R3, R4, R5, R6, R7, R12, CPSR ],
|
||||
hasSideEffects = 1, isBarrier = 1, isCodeGenOnly = 1 in
|
||||
def tInt_eh_sjlj_setjmp : ThumbXI<(outs),(ins tGPR:$src, tGPR:$val),
|
||||
AddrModeNone, SizeSpecial, NoItinerary, "","",
|
||||
|
@ -2969,7 +2969,7 @@ let isCall = 1,
|
||||
// all of the callee-saved resgisters, which is exactly what we want.
|
||||
// $val is a scratch register for our use.
|
||||
let Defs =
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR,
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR, CPSR,
|
||||
QQQQ0, QQQQ1, QQQQ2, QQQQ3 ],
|
||||
hasSideEffects = 1, isBarrier = 1, isCodeGenOnly = 1 in {
|
||||
def t2Int_eh_sjlj_setjmp : Thumb2XI<(outs), (ins tGPR:$src, tGPR:$val),
|
||||
@ -2979,7 +2979,7 @@ let Defs =
|
||||
}
|
||||
|
||||
let Defs =
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR ],
|
||||
[ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, LR, CPSR ],
|
||||
hasSideEffects = 1, isBarrier = 1, isCodeGenOnly = 1 in {
|
||||
def t2Int_eh_sjlj_setjmp_nofp : Thumb2XI<(outs), (ins tGPR:$src, tGPR:$val),
|
||||
AddrModeNone, SizeSpecial, NoItinerary, "", "",
|
||||
|
Loading…
x
Reference in New Issue
Block a user