mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
ARM: use AAPCS-style prologues for embedded MachO.
Darwin prologues save their GPRs in two stages: a narrow push of r0-r7 & lr, followed by a wide push of the remaining registers if there are any. AAPCS uses a single push.w instruction. It turns out that, on average, enough registers get pushed that code is smaller in the AAPCS prologue, which is a nice property for M-class programmers. They also have other options available for back-traces, so can hopefully deal with the fact that FP & LR aren't adjacent in memory. rdar://problem/15909583 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209895 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -35,15 +35,15 @@ define arm_aapcscc void @irq_fn() alignstack(8) "interrupt"="IRQ" {
|
||||
; Normal AAPCS function (r0-r3 pushed onto stack by hardware, lr set to
|
||||
; appropriate sentinel so no special return needed).
|
||||
; CHECK-M-LABEL: irq_fn:
|
||||
; CHECK-M: push {r4, r6, r7, lr}
|
||||
; CHECK-M: add r7, sp, #8
|
||||
; CHECK-M: push.w {r4, r10, r11, lr}
|
||||
; CHECK-M: add.w r11, sp, #8
|
||||
; CHECK-M: mov r4, sp
|
||||
; CHECK-M: bic r4, r4, #7
|
||||
; CHECK-M: mov sp, r4
|
||||
; CHECK-M: blx _bar
|
||||
; CHECK-M: sub.w r4, r7, #8
|
||||
; CHECK-M: sub.w r4, r11, #8
|
||||
; CHECK-M: mov sp, r4
|
||||
; CHECK-M: pop {r4, r6, r7, pc}
|
||||
; CHECK-M: pop.w {r4, r10, r11, pc}
|
||||
|
||||
call arm_aapcscc void @bar()
|
||||
ret void
|
||||
|
Reference in New Issue
Block a user