@@ -12,13 +12,13 @@ define arm_aapcscc void @irq_fn() alignstack(8) "interrupt"="IRQ" {
12
12
13
13
; Also need special function return setting pc and CPSR simultaneously.
14
14
; CHECK-A-LABEL: irq_fn:
15
- ; CHECK-A: push {r0, r1, r2, r3, r11, r12, lr}
16
- ; CHECK-A: add r11, sp, #16
17
- ; CHECK-A: sub sp, sp, #{{[0-9]+}}
15
+ ; CHECK-A: push {r0, r1, r2, r3, r10, r11, r12, lr}
16
+ ; CHECK-A: add r11, sp, #20
17
+ ; CHECK-A-NOT : sub sp, sp, #{{[0-9]+}}
18
18
; CHECK-A: bic sp, sp, #7
19
19
; CHECK-A: bl bar
20
- ; CHECK-A: sub sp, r11, #16
21
- ; CHECK-A: pop {r0, r1, r2, r3, r11, r12, lr}
20
+ ; CHECK-A: sub sp, r11, #20
21
+ ; CHECK-A: pop {r0, r1, r2, r3, r10, r11, r12, lr}
22
22
; CHECK-A: subs pc, lr, #4
23
23
24
24
; CHECK-A-THUMB-LABEL: irq_fn:
@@ -35,15 +35,15 @@ define arm_aapcscc void @irq_fn() alignstack(8) "interrupt"="IRQ" {
35
35
; Normal AAPCS function (r0-r3 pushed onto stack by hardware, lr set to
36
36
; appropriate sentinel so no special return needed).
37
37
; CHECK-M-LABEL: irq_fn:
38
- ; CHECK-M: push {r4, r7, lr}
39
- ; CHECK-M: add r7, sp, #4
38
+ ; CHECK-M: push {r4, r6, r7, lr}
39
+ ; CHECK-M: add r7, sp, #8
40
40
; CHECK-M: mov r4, sp
41
41
; CHECK-M: bic r4, r4, #7
42
42
; CHECK-M: mov sp, r4
43
43
; CHECK-M: blx _bar
44
- ; CHECK-M: subs r4, r7, #4
44
+ ; CHECK-M: sub.w r4, r7, #8
45
45
; CHECK-M: mov sp, r4
46
- ; CHECK-M: pop {r4, r7, pc}
46
+ ; CHECK-M: pop {r4, r6, r7, pc}
47
47
48
48
call arm_aapcscc void @bar ()
49
49
ret void
@@ -88,13 +88,13 @@ define arm_aapcscc void @swi_fn() alignstack(8) "interrupt"="SWI" {
88
88
89
89
define arm_aapcscc void @undef_fn () alignstack (8 ) "interrupt" ="UNDEF" {
90
90
; CHECK-A-LABEL: undef_fn:
91
- ; CHECK-A: push {r0, r1, r2, r3, r11, r12, lr}
92
- ; CHECK-A: add r11, sp, #16
93
- ; CHECK-A: sub sp, sp, #{{[0-9]+}}
91
+ ; CHECK-A: push {r0, r1, r2, r3, r10, r11, r12, lr}
92
+ ; CHECK-A: add r11, sp, #20
93
+ ; CHECK-A-NOT : sub sp, sp, #{{[0-9]+}}
94
94
; CHECK-A: bic sp, sp, #7
95
95
; [...]
96
- ; CHECK-A: sub sp, r11, #16
97
- ; CHECK-A: pop {r0, r1, r2, r3, r11, r12, lr}
96
+ ; CHECK-A: sub sp, r11, #20
97
+ ; CHECK-A: pop {r0, r1, r2, r3, r10, r11, r12, lr}
98
98
; CHECK-A: subs pc, lr, #0
99
99
100
100
call void @bar ()
@@ -103,13 +103,13 @@ define arm_aapcscc void @undef_fn() alignstack(8) "interrupt"="UNDEF" {
103
103
104
104
define arm_aapcscc void @abort_fn () alignstack (8 ) "interrupt" ="ABORT" {
105
105
; CHECK-A-LABEL: abort_fn:
106
- ; CHECK-A: push {r0, r1, r2, r3, r11, r12, lr}
107
- ; CHECK-A: add r11, sp, #16
108
- ; CHECK-A: sub sp, sp, #{{[0-9]+}}
106
+ ; CHECK-A: push {r0, r1, r2, r3, r10, r11, r12, lr}
107
+ ; CHECK-A: add r11, sp, #20
108
+ ; CHECK-A-NOT : sub sp, sp, #{{[0-9]+}}
109
109
; CHECK-A: bic sp, sp, #7
110
110
; [...]
111
- ; CHECK-A: sub sp, r11, #16
112
- ; CHECK-A: pop {r0, r1, r2, r3, r11, r12, lr}
111
+ ; CHECK-A: sub sp, r11, #20
112
+ ; CHECK-A: pop {r0, r1, r2, r3, r10, r11, r12, lr}
113
113
; CHECK-A: subs pc, lr, #4
114
114
115
115
call void @bar ()
0 commit comments