xref: /llvm-project/llvm/test/CodeGen/RISCV/rv64-double-convert.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1768b0b4eSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
3768b0b4eSCraig Topper; RUN:   -target-abi=lp64 | FileCheck %s -check-prefixes=CHECK,RV64I
4768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
5768b0b4eSCraig Topper; RUN:   -target-abi=lp64d | FileCheck %s -check-prefixes=CHECK,RV64ID
6768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
7768b0b4eSCraig Topper; RUN:   -target-abi=lp64 | FileCheck %s -check-prefixes=CHECK,RV64IDINX
8768b0b4eSCraig Topper
9768b0b4eSCraig Topperdefine i128 @fptosi_f64_to_i128(double %a) nounwind {
10768b0b4eSCraig Topper; CHECK-LABEL: fptosi_f64_to_i128:
11768b0b4eSCraig Topper; CHECK:       # %bb.0:
12768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, -16
13768b0b4eSCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14768b0b4eSCraig Topper; CHECK-NEXT:    call __fixdfti
15768b0b4eSCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, 16
17768b0b4eSCraig Topper; CHECK-NEXT:    ret
18768b0b4eSCraig Topper  %1 = fptosi double %a to i128
19768b0b4eSCraig Topper  ret i128 %1
20768b0b4eSCraig Topper}
21768b0b4eSCraig Topper
22768b0b4eSCraig Topperdefine i128 @fptoui_f64_to_i128(double %a) nounwind {
23768b0b4eSCraig Topper; CHECK-LABEL: fptoui_f64_to_i128:
24768b0b4eSCraig Topper; CHECK:       # %bb.0:
25768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, -16
26768b0b4eSCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
27768b0b4eSCraig Topper; CHECK-NEXT:    call __fixunsdfti
28768b0b4eSCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, 16
30768b0b4eSCraig Topper; CHECK-NEXT:    ret
31768b0b4eSCraig Topper  %1 = fptoui double %a to i128
32768b0b4eSCraig Topper  ret i128 %1
33768b0b4eSCraig Topper}
34768b0b4eSCraig Topper
35768b0b4eSCraig Topperdefine double @sitofp_i128_to_f64(i128 %a) nounwind {
36768b0b4eSCraig Topper; CHECK-LABEL: sitofp_i128_to_f64:
37768b0b4eSCraig Topper; CHECK:       # %bb.0:
38768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, -16
39768b0b4eSCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
40768b0b4eSCraig Topper; CHECK-NEXT:    call __floattidf
41768b0b4eSCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
42768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, 16
43768b0b4eSCraig Topper; CHECK-NEXT:    ret
44768b0b4eSCraig Topper  %1 = sitofp i128 %a to double
45768b0b4eSCraig Topper  ret double %1
46768b0b4eSCraig Topper}
47768b0b4eSCraig Topper
48768b0b4eSCraig Topperdefine double @uitofp_i128_to_f64(i128 %a) nounwind {
49768b0b4eSCraig Topper; CHECK-LABEL: uitofp_i128_to_f64:
50768b0b4eSCraig Topper; CHECK:       # %bb.0:
51768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, -16
52768b0b4eSCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
53768b0b4eSCraig Topper; CHECK-NEXT:    call __floatuntidf
54768b0b4eSCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
55768b0b4eSCraig Topper; CHECK-NEXT:    addi sp, sp, 16
56768b0b4eSCraig Topper; CHECK-NEXT:    ret
57768b0b4eSCraig Topper  %1 = uitofp i128 %a to double
58768b0b4eSCraig Topper  ret double %1
59768b0b4eSCraig Topper}
60768b0b4eSCraig Topper
61768b0b4eSCraig Topperdefine i128 @fptosi_sat_f64_to_i128(double %a) nounwind {
62768b0b4eSCraig Topper; RV64I-LABEL: fptosi_sat_f64_to_i128:
63768b0b4eSCraig Topper; RV64I:       # %bb.0:
64768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, -64
65768b0b4eSCraig Topper; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
66768b0b4eSCraig Topper; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
67768b0b4eSCraig Topper; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
68768b0b4eSCraig Topper; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
69768b0b4eSCraig Topper; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
70768b0b4eSCraig Topper; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
71768b0b4eSCraig Topper; RV64I-NEXT:    sd s5, 8(sp) # 8-byte Folded Spill
72768b0b4eSCraig Topper; RV64I-NEXT:    mv s0, a0
73768b0b4eSCraig Topper; RV64I-NEXT:    li a1, -449
74768b0b4eSCraig Topper; RV64I-NEXT:    slli a1, a1, 53
75768b0b4eSCraig Topper; RV64I-NEXT:    call __gedf2
76*9122c523SPengcheng Wang; RV64I-NEXT:    mv s2, a0
77768b0b4eSCraig Topper; RV64I-NEXT:    mv a0, s0
78768b0b4eSCraig Topper; RV64I-NEXT:    call __fixdfti
79*9122c523SPengcheng Wang; RV64I-NEXT:    mv s1, a0
80768b0b4eSCraig Topper; RV64I-NEXT:    mv s3, a1
81768b0b4eSCraig Topper; RV64I-NEXT:    li s5, -1
82*9122c523SPengcheng Wang; RV64I-NEXT:    bgez s2, .LBB4_2
83768b0b4eSCraig Topper; RV64I-NEXT:  # %bb.1:
84768b0b4eSCraig Topper; RV64I-NEXT:    slli s3, s5, 63
85768b0b4eSCraig Topper; RV64I-NEXT:  .LBB4_2:
86768b0b4eSCraig Topper; RV64I-NEXT:    li a0, 575
87768b0b4eSCraig Topper; RV64I-NEXT:    slli a0, a0, 53
88768b0b4eSCraig Topper; RV64I-NEXT:    addi a1, a0, -1
89768b0b4eSCraig Topper; RV64I-NEXT:    mv a0, s0
90768b0b4eSCraig Topper; RV64I-NEXT:    call __gtdf2
91768b0b4eSCraig Topper; RV64I-NEXT:    mv s4, a0
92768b0b4eSCraig Topper; RV64I-NEXT:    blez a0, .LBB4_4
93768b0b4eSCraig Topper; RV64I-NEXT:  # %bb.3:
94768b0b4eSCraig Topper; RV64I-NEXT:    srli s3, s5, 1
95768b0b4eSCraig Topper; RV64I-NEXT:  .LBB4_4:
96768b0b4eSCraig Topper; RV64I-NEXT:    mv a0, s0
97768b0b4eSCraig Topper; RV64I-NEXT:    mv a1, s0
98768b0b4eSCraig Topper; RV64I-NEXT:    call __unorddf2
99768b0b4eSCraig Topper; RV64I-NEXT:    snez a0, a0
100*9122c523SPengcheng Wang; RV64I-NEXT:    slti a1, s2, 0
101*9122c523SPengcheng Wang; RV64I-NEXT:    sgtz a2, s4
102768b0b4eSCraig Topper; RV64I-NEXT:    addi a0, a0, -1
103*9122c523SPengcheng Wang; RV64I-NEXT:    addi a3, a1, -1
104768b0b4eSCraig Topper; RV64I-NEXT:    and a1, a0, s3
105*9122c523SPengcheng Wang; RV64I-NEXT:    and a3, a3, s1
106*9122c523SPengcheng Wang; RV64I-NEXT:    neg a2, a2
107*9122c523SPengcheng Wang; RV64I-NEXT:    or a2, a2, a3
108768b0b4eSCraig Topper; RV64I-NEXT:    and a0, a0, a2
109768b0b4eSCraig Topper; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
110768b0b4eSCraig Topper; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
111768b0b4eSCraig Topper; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
112768b0b4eSCraig Topper; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
113768b0b4eSCraig Topper; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
114768b0b4eSCraig Topper; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
115768b0b4eSCraig Topper; RV64I-NEXT:    ld s5, 8(sp) # 8-byte Folded Reload
116768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, 64
117768b0b4eSCraig Topper; RV64I-NEXT:    ret
118768b0b4eSCraig Topper;
119768b0b4eSCraig Topper; RV64ID-LABEL: fptosi_sat_f64_to_i128:
120768b0b4eSCraig Topper; RV64ID:       # %bb.0:
121768b0b4eSCraig Topper; RV64ID-NEXT:    addi sp, sp, -32
122768b0b4eSCraig Topper; RV64ID-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
123768b0b4eSCraig Topper; RV64ID-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
124768b0b4eSCraig Topper; RV64ID-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill
125768b0b4eSCraig Topper; RV64ID-NEXT:    lui a0, %hi(.LCPI4_0)
126768b0b4eSCraig Topper; RV64ID-NEXT:    fld fa5, %lo(.LCPI4_0)(a0)
127768b0b4eSCraig Topper; RV64ID-NEXT:    fmv.d fs0, fa0
128768b0b4eSCraig Topper; RV64ID-NEXT:    fle.d s0, fa5, fa0
129768b0b4eSCraig Topper; RV64ID-NEXT:    call __fixdfti
130768b0b4eSCraig Topper; RV64ID-NEXT:    li a2, -1
131768b0b4eSCraig Topper; RV64ID-NEXT:    bnez s0, .LBB4_2
132768b0b4eSCraig Topper; RV64ID-NEXT:  # %bb.1:
133768b0b4eSCraig Topper; RV64ID-NEXT:    slli a1, a2, 63
134768b0b4eSCraig Topper; RV64ID-NEXT:  .LBB4_2:
135768b0b4eSCraig Topper; RV64ID-NEXT:    lui a3, %hi(.LCPI4_1)
136768b0b4eSCraig Topper; RV64ID-NEXT:    fld fa5, %lo(.LCPI4_1)(a3)
137768b0b4eSCraig Topper; RV64ID-NEXT:    flt.d a3, fa5, fs0
138768b0b4eSCraig Topper; RV64ID-NEXT:    beqz a3, .LBB4_4
139768b0b4eSCraig Topper; RV64ID-NEXT:  # %bb.3:
140768b0b4eSCraig Topper; RV64ID-NEXT:    srli a1, a2, 1
141768b0b4eSCraig Topper; RV64ID-NEXT:  .LBB4_4:
142768b0b4eSCraig Topper; RV64ID-NEXT:    feq.d a2, fs0, fs0
143768b0b4eSCraig Topper; RV64ID-NEXT:    neg a3, a3
144768b0b4eSCraig Topper; RV64ID-NEXT:    neg a4, s0
145*9122c523SPengcheng Wang; RV64ID-NEXT:    neg a2, a2
146768b0b4eSCraig Topper; RV64ID-NEXT:    and a0, a4, a0
147*9122c523SPengcheng Wang; RV64ID-NEXT:    and a1, a2, a1
148768b0b4eSCraig Topper; RV64ID-NEXT:    or a0, a3, a0
149768b0b4eSCraig Topper; RV64ID-NEXT:    and a0, a2, a0
150768b0b4eSCraig Topper; RV64ID-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
151768b0b4eSCraig Topper; RV64ID-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
152768b0b4eSCraig Topper; RV64ID-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload
153768b0b4eSCraig Topper; RV64ID-NEXT:    addi sp, sp, 32
154768b0b4eSCraig Topper; RV64ID-NEXT:    ret
155768b0b4eSCraig Topper;
156768b0b4eSCraig Topper; RV64IDINX-LABEL: fptosi_sat_f64_to_i128:
157768b0b4eSCraig Topper; RV64IDINX:       # %bb.0:
158768b0b4eSCraig Topper; RV64IDINX-NEXT:    addi sp, sp, -32
159768b0b4eSCraig Topper; RV64IDINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
160768b0b4eSCraig Topper; RV64IDINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
161768b0b4eSCraig Topper; RV64IDINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
162768b0b4eSCraig Topper; RV64IDINX-NEXT:    mv s0, a0
163768b0b4eSCraig Topper; RV64IDINX-NEXT:    li a0, -449
164768b0b4eSCraig Topper; RV64IDINX-NEXT:    slli a0, a0, 53
165768b0b4eSCraig Topper; RV64IDINX-NEXT:    fle.d s1, a0, s0
166768b0b4eSCraig Topper; RV64IDINX-NEXT:    mv a0, s0
167768b0b4eSCraig Topper; RV64IDINX-NEXT:    call __fixdfti
168768b0b4eSCraig Topper; RV64IDINX-NEXT:    li a2, -1
169768b0b4eSCraig Topper; RV64IDINX-NEXT:    bnez s1, .LBB4_2
170768b0b4eSCraig Topper; RV64IDINX-NEXT:  # %bb.1:
171768b0b4eSCraig Topper; RV64IDINX-NEXT:    slli a1, a2, 63
172768b0b4eSCraig Topper; RV64IDINX-NEXT:  .LBB4_2:
173768b0b4eSCraig Topper; RV64IDINX-NEXT:    lui a3, %hi(.LCPI4_0)
174768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld a3, %lo(.LCPI4_0)(a3)
175768b0b4eSCraig Topper; RV64IDINX-NEXT:    flt.d a3, a3, s0
176768b0b4eSCraig Topper; RV64IDINX-NEXT:    beqz a3, .LBB4_4
177768b0b4eSCraig Topper; RV64IDINX-NEXT:  # %bb.3:
178768b0b4eSCraig Topper; RV64IDINX-NEXT:    srli a1, a2, 1
179768b0b4eSCraig Topper; RV64IDINX-NEXT:  .LBB4_4:
180768b0b4eSCraig Topper; RV64IDINX-NEXT:    feq.d a2, s0, s0
181768b0b4eSCraig Topper; RV64IDINX-NEXT:    neg a3, a3
182768b0b4eSCraig Topper; RV64IDINX-NEXT:    neg a4, s1
183*9122c523SPengcheng Wang; RV64IDINX-NEXT:    neg a2, a2
184768b0b4eSCraig Topper; RV64IDINX-NEXT:    and a0, a4, a0
185*9122c523SPengcheng Wang; RV64IDINX-NEXT:    and a1, a2, a1
186768b0b4eSCraig Topper; RV64IDINX-NEXT:    or a0, a3, a0
187768b0b4eSCraig Topper; RV64IDINX-NEXT:    and a0, a2, a0
188768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
189768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
190768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
191768b0b4eSCraig Topper; RV64IDINX-NEXT:    addi sp, sp, 32
192768b0b4eSCraig Topper; RV64IDINX-NEXT:    ret
193768b0b4eSCraig Topper  %1 = tail call i128 @llvm.fptosi.sat.i128.f64(double %a)
194768b0b4eSCraig Topper  ret i128 %1
195768b0b4eSCraig Topper}
196768b0b4eSCraig Topperdeclare i128 @llvm.fptosi.sat.i128.f64(double)
197768b0b4eSCraig Topper
198768b0b4eSCraig Topperdefine i128 @fptoui_sat_f64_to_i128(double %a) nounwind {
199768b0b4eSCraig Topper; RV64I-LABEL: fptoui_sat_f64_to_i128:
200768b0b4eSCraig Topper; RV64I:       # %bb.0:
201768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, -48
202768b0b4eSCraig Topper; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
203768b0b4eSCraig Topper; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
204768b0b4eSCraig Topper; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
205768b0b4eSCraig Topper; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
206768b0b4eSCraig Topper; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill
207768b0b4eSCraig Topper; RV64I-NEXT:    mv s0, a0
208768b0b4eSCraig Topper; RV64I-NEXT:    li a1, 0
209768b0b4eSCraig Topper; RV64I-NEXT:    call __gedf2
210768b0b4eSCraig Topper; RV64I-NEXT:    slti a0, a0, 0
211768b0b4eSCraig Topper; RV64I-NEXT:    addi s2, a0, -1
212768b0b4eSCraig Topper; RV64I-NEXT:    mv a0, s0
213768b0b4eSCraig Topper; RV64I-NEXT:    call __fixunsdfti
214768b0b4eSCraig Topper; RV64I-NEXT:    mv s1, a1
215768b0b4eSCraig Topper; RV64I-NEXT:    and s3, s2, a0
216768b0b4eSCraig Topper; RV64I-NEXT:    li a0, 1151
217768b0b4eSCraig Topper; RV64I-NEXT:    slli a0, a0, 52
218768b0b4eSCraig Topper; RV64I-NEXT:    addi a1, a0, -1
219768b0b4eSCraig Topper; RV64I-NEXT:    mv a0, s0
220768b0b4eSCraig Topper; RV64I-NEXT:    call __gtdf2
221768b0b4eSCraig Topper; RV64I-NEXT:    sgtz a0, a0
222*9122c523SPengcheng Wang; RV64I-NEXT:    and a1, s2, s1
223*9122c523SPengcheng Wang; RV64I-NEXT:    neg a2, a0
224*9122c523SPengcheng Wang; RV64I-NEXT:    or a0, a2, s3
225*9122c523SPengcheng Wang; RV64I-NEXT:    or a1, a2, a1
226768b0b4eSCraig Topper; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
227768b0b4eSCraig Topper; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
228768b0b4eSCraig Topper; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
229768b0b4eSCraig Topper; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
230768b0b4eSCraig Topper; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload
231768b0b4eSCraig Topper; RV64I-NEXT:    addi sp, sp, 48
232768b0b4eSCraig Topper; RV64I-NEXT:    ret
233768b0b4eSCraig Topper;
234768b0b4eSCraig Topper; RV64ID-LABEL: fptoui_sat_f64_to_i128:
235768b0b4eSCraig Topper; RV64ID:       # %bb.0:
236768b0b4eSCraig Topper; RV64ID-NEXT:    addi sp, sp, -32
237768b0b4eSCraig Topper; RV64ID-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
238768b0b4eSCraig Topper; RV64ID-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
239768b0b4eSCraig Topper; RV64ID-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill
240768b0b4eSCraig Topper; RV64ID-NEXT:    fmv.d fs0, fa0
241768b0b4eSCraig Topper; RV64ID-NEXT:    fmv.d.x fa5, zero
242768b0b4eSCraig Topper; RV64ID-NEXT:    fle.d a0, fa5, fa0
243768b0b4eSCraig Topper; RV64ID-NEXT:    neg s0, a0
244768b0b4eSCraig Topper; RV64ID-NEXT:    call __fixunsdfti
245768b0b4eSCraig Topper; RV64ID-NEXT:    lui a2, %hi(.LCPI5_0)
246768b0b4eSCraig Topper; RV64ID-NEXT:    fld fa5, %lo(.LCPI5_0)(a2)
247768b0b4eSCraig Topper; RV64ID-NEXT:    and a0, s0, a0
248*9122c523SPengcheng Wang; RV64ID-NEXT:    and a1, s0, a1
249768b0b4eSCraig Topper; RV64ID-NEXT:    flt.d a2, fa5, fs0
250768b0b4eSCraig Topper; RV64ID-NEXT:    neg a2, a2
251768b0b4eSCraig Topper; RV64ID-NEXT:    or a0, a2, a0
252768b0b4eSCraig Topper; RV64ID-NEXT:    or a1, a2, a1
253768b0b4eSCraig Topper; RV64ID-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
254768b0b4eSCraig Topper; RV64ID-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
255768b0b4eSCraig Topper; RV64ID-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload
256768b0b4eSCraig Topper; RV64ID-NEXT:    addi sp, sp, 32
257768b0b4eSCraig Topper; RV64ID-NEXT:    ret
258768b0b4eSCraig Topper;
259768b0b4eSCraig Topper; RV64IDINX-LABEL: fptoui_sat_f64_to_i128:
260768b0b4eSCraig Topper; RV64IDINX:       # %bb.0:
261768b0b4eSCraig Topper; RV64IDINX-NEXT:    addi sp, sp, -32
262768b0b4eSCraig Topper; RV64IDINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
263768b0b4eSCraig Topper; RV64IDINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
264768b0b4eSCraig Topper; RV64IDINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
265768b0b4eSCraig Topper; RV64IDINX-NEXT:    mv s0, a0
266768b0b4eSCraig Topper; RV64IDINX-NEXT:    fle.d a0, zero, a0
267768b0b4eSCraig Topper; RV64IDINX-NEXT:    neg s1, a0
268768b0b4eSCraig Topper; RV64IDINX-NEXT:    mv a0, s0
269768b0b4eSCraig Topper; RV64IDINX-NEXT:    call __fixunsdfti
270768b0b4eSCraig Topper; RV64IDINX-NEXT:    lui a2, %hi(.LCPI5_0)
271768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld a2, %lo(.LCPI5_0)(a2)
272768b0b4eSCraig Topper; RV64IDINX-NEXT:    and a0, s1, a0
273*9122c523SPengcheng Wang; RV64IDINX-NEXT:    and a1, s1, a1
274768b0b4eSCraig Topper; RV64IDINX-NEXT:    flt.d a2, a2, s0
275768b0b4eSCraig Topper; RV64IDINX-NEXT:    neg a2, a2
276768b0b4eSCraig Topper; RV64IDINX-NEXT:    or a0, a2, a0
277768b0b4eSCraig Topper; RV64IDINX-NEXT:    or a1, a2, a1
278768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
279768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
280768b0b4eSCraig Topper; RV64IDINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
281768b0b4eSCraig Topper; RV64IDINX-NEXT:    addi sp, sp, 32
282768b0b4eSCraig Topper; RV64IDINX-NEXT:    ret
283768b0b4eSCraig Topper  %1 = tail call i128 @llvm.fptoui.sat.i128.f64(double %a)
284768b0b4eSCraig Topper  ret i128 %1
285768b0b4eSCraig Topper}
286768b0b4eSCraig Topperdeclare i128 @llvm.fptoui.sat.i128.f64(double)
287