@@ -87,3 +87,78 @@ define fp128 @f128_direct_spill(i32 %o0, i32 %o1, i32 %o2, i32 %o3, i32 %o4, i32
8787 ret fp128 %ret
8888}
8989declare fp128 @f128_callee_spill (i32 %o0 , i32 %o1 , i32 %o2 , i32 %o3 , i32 %o4 , i32 %o5 , fp128 %a )
90+
91+ define inreg { fp128 , fp128 } @f128_complex (fp128 %num ) nounwind {
92+ ; SPARC32-LABEL: f128_complex:
93+ ; SPARC32: ! %bb.0:
94+ ; SPARC32-NEXT: save %sp, -192, %sp
95+ ; SPARC32-NEXT: ldd [%i0], %f0
96+ ; SPARC32-NEXT: ldd [%i0+8], %f4
97+ ; SPARC32-NEXT: std %f4, [%fp+-24]
98+ ; SPARC32-NEXT: std %f0, [%fp+-32]
99+ ; SPARC32-NEXT: std %f4, [%fp+-8]
100+ ; SPARC32-NEXT: add %fp, -16, %o0
101+ ; SPARC32-NEXT: add %fp, -32, %o1
102+ ; SPARC32-NEXT: call f128_complex_callee
103+ ; SPARC32-NEXT: std %f0, [%fp+-16]
104+ ; SPARC32-NEXT: sethi %hi(.LCPI2_0), %i0
105+ ; SPARC32-NEXT: ldd [%i0+%lo(.LCPI2_0)], %f8
106+ ; SPARC32-NEXT: add %i0, %lo(.LCPI2_0), %i0
107+ ; SPARC32-NEXT: ldd [%i0+8], %f12
108+ ; SPARC32-NEXT: std %f4, [%fp+-96]
109+ ; SPARC32-NEXT: std %f6, [%fp+-88] ! 16-byte Folded Spill
110+ ; SPARC32-NEXT: std %f8, [%fp+-80]
111+ ; SPARC32-NEXT: std %f12, [%fp+-72]
112+ ; SPARC32-NEXT: std %f2, [%fp+-56]
113+ ; SPARC32-NEXT: std %f0, [%fp+-64]
114+ ; SPARC32-NEXT: add %fp, -48, %i0
115+ ; SPARC32-NEXT: add %fp, -64, %o0
116+ ; SPARC32-NEXT: add %fp, -80, %o1
117+ ; SPARC32-NEXT: call _Q_add
118+ ; SPARC32-NEXT: st %i0, [%sp+64]
119+ ; SPARC32-NEXT: unimp 16
120+ ; SPARC32-NEXT: ldd [%fp+-48], %f0
121+ ; SPARC32-NEXT: ldd [%fp+-40], %f2
122+ ; SPARC32-NEXT: ldd [%fp+-96], %f4
123+ ; SPARC32-NEXT: ldd [%fp+-88], %f6 ! 16-byte Folded Reload
124+ ; SPARC32-NEXT: ret
125+ ; SPARC32-NEXT: restore
126+ ;
127+ ; SPARC64-LABEL: f128_complex:
128+ ; SPARC64: ! %bb.0:
129+ ; SPARC64-NEXT: save %sp, -240, %sp
130+ ; SPARC64-NEXT: fmovd %f0, %f4
131+ ; SPARC64-NEXT: fmovd %f2, %f6
132+ ; SPARC64-NEXT: call f128_complex_callee
133+ ; SPARC64-NEXT: nop
134+ ; SPARC64-NEXT: std %f4, [%fp+1983]
135+ ; SPARC64-NEXT: std %f6, [%fp+1991] ! 16-byte Folded Spill
136+ ; SPARC64-NEXT: sethi %h44(.LCPI2_0), %i0
137+ ; SPARC64-NEXT: add %i0, %m44(.LCPI2_0), %i0
138+ ; SPARC64-NEXT: sllx %i0, 12, %i0
139+ ; SPARC64-NEXT: ldd [%i0+%l44(.LCPI2_0)], %f4
140+ ; SPARC64-NEXT: add %i0, %l44(.LCPI2_0), %i0
141+ ; SPARC64-NEXT: ldd [%i0+8], %f8
142+ ; SPARC64-NEXT: std %f2, [%fp+2023]
143+ ; SPARC64-NEXT: std %f0, [%fp+2015]
144+ ; SPARC64-NEXT: std %f4, [%fp+1999]
145+ ; SPARC64-NEXT: std %f8, [%fp+2007]
146+ ; SPARC64-NEXT: add %fp, 2031, %o0
147+ ; SPARC64-NEXT: add %fp, 2015, %o1
148+ ; SPARC64-NEXT: call _Qp_add
149+ ; SPARC64-NEXT: add %fp, 1999, %o2
150+ ; SPARC64-NEXT: ldd [%fp+2031], %f0
151+ ; SPARC64-NEXT: ldd [%fp+2039], %f2
152+ ; SPARC64-NEXT: ldd [%fp+1983], %f4
153+ ; SPARC64-NEXT: ldd [%fp+1991], %f6 ! 16-byte Folded Reload
154+ ; SPARC64-NEXT: ret
155+ ; SPARC64-NEXT: restore
156+ %call = call inreg { fp128 , fp128 } @f128_complex_callee (fp128 %num , fp128 %num )
157+ %real = extractvalue { fp128 , fp128 } %call , 0
158+ %imag = extractvalue { fp128 , fp128 } %call , 1
159+ %add = fadd fp128 %real , 0xL00000000000000003FFF000000000000
160+ %tmp = insertvalue { fp128 , fp128 } poison, fp128 %add , 0
161+ %ret = insertvalue { fp128 , fp128 } %tmp , fp128 %imag , 1
162+ ret { fp128 , fp128 } %ret
163+ }
164+ declare inreg { fp128 , fp128 } @f128_complex_callee (fp128 %a , fp128 %b )
0 commit comments