xref: /aosp_15_r20/external/llvm/test/CodeGen/SPARC/32abi.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparc -disable-sparc-delay-filler -disable-sparc-leaf-proc | FileCheck %s --check-prefix=CHECK --check-prefix=HARD --check-prefix=CHECK-BE
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparcel -disable-sparc-delay-filler -disable-sparc-leaf-proc | FileCheck %s --check-prefix=CHECK --check-prefix=HARD --check-prefix=CHECK-LE
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparc -disable-sparc-delay-filler -disable-sparc-leaf-proc -mattr=soft-float | FileCheck %s --check-prefix=CHECK --check-prefix=SOFT --check-prefix=CHECK-BE
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: intarg:
6*9880d681SAndroid Build Coastguard Worker; The save/restore frame is not strictly necessary here, but we would need to
7*9880d681SAndroid Build Coastguard Worker; refer to %o registers instead.
8*9880d681SAndroid Build Coastguard Worker; CHECK: save %sp, -96, %sp
9*9880d681SAndroid Build Coastguard Worker; CHECK: ld [%fp+96], [[R2:%[gilo][0-7]]]
10*9880d681SAndroid Build Coastguard Worker; CHECK: ld [%fp+92], [[R1:%[gilo][0-7]]]
11*9880d681SAndroid Build Coastguard Worker; CHECK: stb %i0, [%i4]
12*9880d681SAndroid Build Coastguard Worker; CHECK: stb %i1, [%i4]
13*9880d681SAndroid Build Coastguard Worker; CHECK: sth %i2, [%i4]
14*9880d681SAndroid Build Coastguard Worker; CHECK: st  %i3, [%i4]
15*9880d681SAndroid Build Coastguard Worker; CHECK: st  %i4, [%i4]
16*9880d681SAndroid Build Coastguard Worker; CHECK: st  %i5, [%i4]
17*9880d681SAndroid Build Coastguard Worker; CHECK: st  [[R1]], [%i4]
18*9880d681SAndroid Build Coastguard Worker; CHECK: st  [[R2]], [%i4]
19*9880d681SAndroid Build Coastguard Worker; CHECK: restore
20*9880d681SAndroid Build Coastguard Workerdefine void @intarg(i8  %a0,   ; %i0
21*9880d681SAndroid Build Coastguard Worker                    i8  %a1,   ; %i1
22*9880d681SAndroid Build Coastguard Worker                    i16 %a2,   ; %i2
23*9880d681SAndroid Build Coastguard Worker                    i32 %a3,   ; %i3
24*9880d681SAndroid Build Coastguard Worker                    i8* %a4,   ; %i4
25*9880d681SAndroid Build Coastguard Worker                    i32 %a5,   ; %i5
26*9880d681SAndroid Build Coastguard Worker                    i32 signext %a6,   ; [%fp+92]
27*9880d681SAndroid Build Coastguard Worker                    i8* %a7) { ; [%fp+96]
28*9880d681SAndroid Build Coastguard Worker  store i8 %a0, i8* %a4
29*9880d681SAndroid Build Coastguard Worker  store i8 %a1, i8* %a4
30*9880d681SAndroid Build Coastguard Worker  %p16 = bitcast i8* %a4 to i16*
31*9880d681SAndroid Build Coastguard Worker  store i16 %a2, i16* %p16
32*9880d681SAndroid Build Coastguard Worker  %p32 = bitcast i8* %a4 to i32*
33*9880d681SAndroid Build Coastguard Worker  store i32 %a3, i32* %p32
34*9880d681SAndroid Build Coastguard Worker  %pp = bitcast i8* %a4 to i8**
35*9880d681SAndroid Build Coastguard Worker  store i8* %a4, i8** %pp
36*9880d681SAndroid Build Coastguard Worker  store i32 %a5, i32* %p32
37*9880d681SAndroid Build Coastguard Worker  store i32 %a6, i32* %p32
38*9880d681SAndroid Build Coastguard Worker  store i8* %a7, i8** %pp
39*9880d681SAndroid Build Coastguard Worker  ret void
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: call_intarg:
43*9880d681SAndroid Build Coastguard Worker; CHECK: save %sp, -104, %sp
44*9880d681SAndroid Build Coastguard Worker; Use %o0-%o5 for outgoing arguments
45*9880d681SAndroid Build Coastguard Worker; CHECK: mov 5, %o5
46*9880d681SAndroid Build Coastguard Worker; CHECK: st %i0, [%sp+92]
47*9880d681SAndroid Build Coastguard Worker; CHECK: call intarg
48*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: add %sp
49*9880d681SAndroid Build Coastguard Worker; CHECK: restore
50*9880d681SAndroid Build Coastguard Workerdefine void @call_intarg(i32 %i0, i8* %i1) {
51*9880d681SAndroid Build Coastguard Worker  call void @intarg(i8 0, i8 1, i16 2, i32 3, i8* undef, i32 5, i32 %i0, i8* %i1)
52*9880d681SAndroid Build Coastguard Worker  ret void
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker;; Verify doubles starting with an even reg, starting with an odd reg,
56*9880d681SAndroid Build Coastguard Worker;; straddling the boundary of regs and mem, and floats in regs and mem.
57*9880d681SAndroid Build Coastguard Worker;
58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floatarg:
59*9880d681SAndroid Build Coastguard Worker; HARD: save %sp, -120, %sp
60*9880d681SAndroid Build Coastguard Worker; HARD: mov %i5, %g2
61*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ld [%fp+92], %g3
62*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %i4, %i5
63*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ! kill
64*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: std %g2, [%fp+-24]
65*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %i3, %i4
66*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: std %i4, [%fp+-16]
67*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ! kill
68*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: std %i0, [%fp+-8]
69*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: st %i2, [%fp+-28]
70*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ld [%fp+104], %f0
71*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ldd [%fp+96], %f2
72*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ld [%fp+-28], %f1
73*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ldd [%fp+-8], %f4
74*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ldd [%fp+-16], %f6
75*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: ldd [%fp+-24], %f8
76*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: fstod %f1, %f10
77*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: faddd %f4, %f10, %f4
78*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: faddd %f6, %f4, %f4
79*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: faddd %f8, %f4, %f4
80*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: faddd %f2, %f4, %f2
81*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: fstod %f0, %f0
82*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: faddd %f0, %f2, %f0
83*9880d681SAndroid Build Coastguard Worker; SOFT: save %sp, -96, %sp
84*9880d681SAndroid Build Coastguard Worker; SOFT: ld [%fp+104], %l0
85*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT: ld [%fp+96], %l1
86*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT: ld [%fp+100], %l2
87*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT: ld [%fp+92], %l3
88*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i2, %o0
89*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT: call __extendsfdf2
90*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT: nop
91*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o0, %i2
92*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o1, %g2
93*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i0, %o0
94*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o1
95*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i2, %o2
96*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %g2, %o3
97*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call __adddf3
98*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  nop
99*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o0, %i0
100*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o1, %i1
101*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i3, %o0
102*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i4, %o1
103*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i0, %o2
104*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o3
105*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call __adddf3
106*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  nop
107*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o0, %i0
108*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o1, %i1
109*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i5, %o0
110*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %l3, %o1
111*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i0, %o2
112*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o3
113*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call __adddf3
114*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  nop
115*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o0, %i0
116*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o1, %i1
117*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %l1, %o0
118*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %l2, %o1
119*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i0, %o2
120*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o3
121*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call __adddf3
122*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  nop
123*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o0, %i0
124*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o1, %i1
125*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %l0, %o0
126*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call __extendsfdf2
127*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  nop
128*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i0, %o2
129*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o3
130*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call __adddf3
131*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  nop
132*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o0, %i0
133*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %o1, %i1
134*9880d681SAndroid Build Coastguard Worker; CHECK: restore
135*9880d681SAndroid Build Coastguard Workerdefine double @floatarg(double %a0,   ; %i0,%i1
136*9880d681SAndroid Build Coastguard Worker                        float %a1,    ; %i2
137*9880d681SAndroid Build Coastguard Worker                        double %a2,   ; %i3, %i4
138*9880d681SAndroid Build Coastguard Worker                        double %a3,   ; %i5, [%fp+92] (using 4 bytes)
139*9880d681SAndroid Build Coastguard Worker                        double %a4,   ; [%fp+96] (using 8 bytes)
140*9880d681SAndroid Build Coastguard Worker                        float %a5) {  ; [%fp+104] (using 4 bytes)
141*9880d681SAndroid Build Coastguard Worker  %d1 = fpext float %a1 to double
142*9880d681SAndroid Build Coastguard Worker  %s1 = fadd double %a0, %d1
143*9880d681SAndroid Build Coastguard Worker  %s2 = fadd double %a2, %s1
144*9880d681SAndroid Build Coastguard Worker  %s3 = fadd double %a3, %s2
145*9880d681SAndroid Build Coastguard Worker  %s4 = fadd double %a4, %s3
146*9880d681SAndroid Build Coastguard Worker  %d5 = fpext float %a5 to double
147*9880d681SAndroid Build Coastguard Worker  %s5 = fadd double %d5, %s4
148*9880d681SAndroid Build Coastguard Worker  ret double %s5
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: call_floatarg:
152*9880d681SAndroid Build Coastguard Worker; HARD: save %sp, -112, %sp
153*9880d681SAndroid Build Coastguard Worker; HARD: mov %i2, %o1
154*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %i1, %o0
155*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: st %i0, [%sp+104]
156*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: std %o0, [%sp+96]
157*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: st %o1, [%sp+92]
158*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %i0, %o2
159*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %o0, %o3
160*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %o1, %o4
161*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: mov %o0, %o5
162*9880d681SAndroid Build Coastguard Worker; HARD-NEXT: call floatarg
163*9880d681SAndroid Build Coastguard Worker; HARD: std %f0, [%i4]
164*9880d681SAndroid Build Coastguard Worker; SOFT: st %i0, [%sp+104]
165*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  st %i2, [%sp+100]
166*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  st %i1, [%sp+96]
167*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  st %i2, [%sp+92]
168*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o0
169*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i2, %o1
170*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i0, %o2
171*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o3
172*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i2, %o4
173*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  mov  %i1, %o5
174*9880d681SAndroid Build Coastguard Worker; SOFT-NEXT:  call floatarg
175*9880d681SAndroid Build Coastguard Worker; SOFT:  std %o0, [%i4]
176*9880d681SAndroid Build Coastguard Worker; CHECK: restore
177*9880d681SAndroid Build Coastguard Workerdefine void @call_floatarg(float %f1, double %d2, float %f5, double *%p) {
178*9880d681SAndroid Build Coastguard Worker  %r = call double @floatarg(double %d2, float %f1, double %d2, double %d2,
179*9880d681SAndroid Build Coastguard Worker                             double %d2, float %f1)
180*9880d681SAndroid Build Coastguard Worker  store double %r, double* %p
181*9880d681SAndroid Build Coastguard Worker  ret void
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker;; i64 arguments should effectively work the same as double: split
185*9880d681SAndroid Build Coastguard Worker;; into two locations.  This is different for little-endian vs big
186*9880d681SAndroid Build Coastguard Worker;; endian, since the 64-bit math needs to be split
187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: i64arg:
188*9880d681SAndroid Build Coastguard Worker; CHECK:  save %sp, -96, %sp
189*9880d681SAndroid Build Coastguard Worker; CHECK-BE: ld [%fp+100], %g2
190*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: ld [%fp+96], %g3
191*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: ld [%fp+92], %g4
192*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addcc %i1, %i2, %i1
193*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addxcc %i0, 0, %i0
194*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addcc %i4, %i1, %i1
195*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addxcc %i3, %i0, %i0
196*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addcc %g4, %i1, %i1
197*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: ld [%fp+104], %i2
198*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addxcc %i5, %i0, %i0
199*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addcc %g2, %i1, %i1
200*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addxcc %g3, %i0, %i0
201*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addcc %i2, %i1, %i1
202*9880d681SAndroid Build Coastguard Worker; CHECK-BE-NEXT: addxcc %i0, 0, %i0
203*9880d681SAndroid Build Coastguard Worker;
204*9880d681SAndroid Build Coastguard Worker; CHECK-LE: ld [%fp+96], %g2
205*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: ld [%fp+100], %g3
206*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: ld [%fp+92], %g4
207*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addcc %i0, %i2, %i0
208*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addxcc %i1, 0, %i1
209*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addcc %i3, %i0, %i0
210*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addxcc %i4, %i1, %i1
211*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addcc %i5, %i0, %i0
212*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: ld [%fp+104], %i2
213*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addxcc %g4, %i1, %i1
214*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addcc %g2, %i0, %i0
215*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addxcc %g3, %i1, %i1
216*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addcc %i2, %i0, %i0
217*9880d681SAndroid Build Coastguard Worker; CHECK-LE-NEXT: addxcc %i1, 0, %i1
218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: restore
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine i64 @i64arg(i64 %a0,    ; %i0,%i1
222*9880d681SAndroid Build Coastguard Worker		   i32 %a1,    ; %i2
223*9880d681SAndroid Build Coastguard Worker		   i64 %a2,    ; %i3, %i4
224*9880d681SAndroid Build Coastguard Worker		   i64 %a3,    ; %i5, [%fp+92] (using 4 bytes)
225*9880d681SAndroid Build Coastguard Worker		   i64 %a4,    ; [%fp+96] (using 8 bytes)
226*9880d681SAndroid Build Coastguard Worker                   i32 %a5) {  ; [%fp+104] (using 4 bytes)
227*9880d681SAndroid Build Coastguard Worker  %a1L = zext i32 %a1 to i64
228*9880d681SAndroid Build Coastguard Worker  %s1 = add i64 %a0, %a1L
229*9880d681SAndroid Build Coastguard Worker  %s2 = add i64 %a2, %s1
230*9880d681SAndroid Build Coastguard Worker  %s3 = add i64 %a3, %s2
231*9880d681SAndroid Build Coastguard Worker  %s4 = add i64 %a4, %s3
232*9880d681SAndroid Build Coastguard Worker  %a5L = zext i32 %a5 to i64
233*9880d681SAndroid Build Coastguard Worker  %s5 = add i64 %a5L, %s4
234*9880d681SAndroid Build Coastguard Worker  ret i64 %s5
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: call_i64arg:
238*9880d681SAndroid Build Coastguard Worker; CHECK: save %sp, -112, %sp
239*9880d681SAndroid Build Coastguard Worker; CHECK: st %i0, [%sp+104]
240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: st %i2, [%sp+100]
241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: st %i1, [%sp+96]
242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: st %i2, [%sp+92]
243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov      %i1, %o0
244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov      %i2, %o1
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov      %i0, %o2
246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov      %i1, %o3
247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov      %i2, %o4
248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov      %i1, %o5
249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call i64arg
250*9880d681SAndroid Build Coastguard Worker; CHECK: std %o0, [%i3]
251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: restore
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Workerdefine void @call_i64arg(i32 %a0, i64 %a1, i64* %p) {
254*9880d681SAndroid Build Coastguard Worker  %r = call i64 @i64arg(i64 %a1, i32 %a0, i64 %a1, i64 %a1, i64 %a1, i32 %a0)
255*9880d681SAndroid Build Coastguard Worker  store i64 %r, i64* %p
256*9880d681SAndroid Build Coastguard Worker  ret void
257*9880d681SAndroid Build Coastguard Worker}
258