|
7 | 7 | ; RUN: | FileCheck %s -check-prefixes=CHECK,RV64IZFINX |
8 | 8 |
|
9 | 9 | define i128 @fptosi_f32_to_i128(float %a) nounwind { |
10 | | -; RV64I-LABEL: fptosi_f32_to_i128: |
11 | | -; RV64I: # %bb.0: |
12 | | -; RV64I-NEXT: addi sp, sp, -16 |
13 | | -; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
14 | | -; RV64I-NEXT: sext.w a0, a0 |
15 | | -; RV64I-NEXT: call __fixsfti |
16 | | -; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
17 | | -; RV64I-NEXT: addi sp, sp, 16 |
18 | | -; RV64I-NEXT: ret |
19 | | -; |
20 | | -; RV64IF-LABEL: fptosi_f32_to_i128: |
21 | | -; RV64IF: # %bb.0: |
22 | | -; RV64IF-NEXT: addi sp, sp, -16 |
23 | | -; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
24 | | -; RV64IF-NEXT: call __fixsfti |
25 | | -; RV64IF-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
26 | | -; RV64IF-NEXT: addi sp, sp, 16 |
27 | | -; RV64IF-NEXT: ret |
28 | | -; |
29 | | -; RV64IZFINX-LABEL: fptosi_f32_to_i128: |
30 | | -; RV64IZFINX: # %bb.0: |
31 | | -; RV64IZFINX-NEXT: addi sp, sp, -16 |
32 | | -; RV64IZFINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
33 | | -; RV64IZFINX-NEXT: call __fixsfti |
34 | | -; RV64IZFINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
35 | | -; RV64IZFINX-NEXT: addi sp, sp, 16 |
36 | | -; RV64IZFINX-NEXT: ret |
| 10 | +; CHECK-LABEL: fptosi_f32_to_i128: |
| 11 | +; CHECK: # %bb.0: |
| 12 | +; CHECK-NEXT: addi sp, sp, -16 |
| 13 | +; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 14 | +; CHECK-NEXT: call __fixsfti |
| 15 | +; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 16 | +; CHECK-NEXT: addi sp, sp, 16 |
| 17 | +; CHECK-NEXT: ret |
37 | 18 | %1 = fptosi float %a to i128 |
38 | 19 | ret i128 %1 |
39 | 20 | } |
40 | 21 |
|
41 | 22 | define i128 @fptoui_f32_to_i128(float %a) nounwind { |
42 | | -; RV64I-LABEL: fptoui_f32_to_i128: |
43 | | -; RV64I: # %bb.0: |
44 | | -; RV64I-NEXT: addi sp, sp, -16 |
45 | | -; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
46 | | -; RV64I-NEXT: sext.w a0, a0 |
47 | | -; RV64I-NEXT: call __fixunssfti |
48 | | -; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
49 | | -; RV64I-NEXT: addi sp, sp, 16 |
50 | | -; RV64I-NEXT: ret |
51 | | -; |
52 | | -; RV64IF-LABEL: fptoui_f32_to_i128: |
53 | | -; RV64IF: # %bb.0: |
54 | | -; RV64IF-NEXT: addi sp, sp, -16 |
55 | | -; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
56 | | -; RV64IF-NEXT: call __fixunssfti |
57 | | -; RV64IF-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
58 | | -; RV64IF-NEXT: addi sp, sp, 16 |
59 | | -; RV64IF-NEXT: ret |
60 | | -; |
61 | | -; RV64IZFINX-LABEL: fptoui_f32_to_i128: |
62 | | -; RV64IZFINX: # %bb.0: |
63 | | -; RV64IZFINX-NEXT: addi sp, sp, -16 |
64 | | -; RV64IZFINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
65 | | -; RV64IZFINX-NEXT: call __fixunssfti |
66 | | -; RV64IZFINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
67 | | -; RV64IZFINX-NEXT: addi sp, sp, 16 |
68 | | -; RV64IZFINX-NEXT: ret |
| 23 | +; CHECK-LABEL: fptoui_f32_to_i128: |
| 24 | +; CHECK: # %bb.0: |
| 25 | +; CHECK-NEXT: addi sp, sp, -16 |
| 26 | +; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 27 | +; CHECK-NEXT: call __fixunssfti |
| 28 | +; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 29 | +; CHECK-NEXT: addi sp, sp, 16 |
| 30 | +; CHECK-NEXT: ret |
69 | 31 | %1 = fptoui float %a to i128 |
70 | 32 | ret i128 %1 |
71 | 33 | } |
@@ -107,38 +69,38 @@ define i128 @fptosi_sat_f32_to_i128(float %a) nounwind { |
107 | 69 | ; RV64I-NEXT: sd s3, 24(sp) # 8-byte Folded Spill |
108 | 70 | ; RV64I-NEXT: sd s4, 16(sp) # 8-byte Folded Spill |
109 | 71 | ; RV64I-NEXT: sd s5, 8(sp) # 8-byte Folded Spill |
110 | | -; RV64I-NEXT: mv s0, a0 |
| 72 | +; RV64I-NEXT: mv s1, a0 |
111 | 73 | ; RV64I-NEXT: lui a1, 1044480 |
112 | 74 | ; RV64I-NEXT: call __gesf2 |
113 | | -; RV64I-NEXT: mv s1, a0 |
114 | | -; RV64I-NEXT: sext.w a0, s0 |
115 | | -; RV64I-NEXT: call __fixsfti |
116 | 75 | ; RV64I-NEXT: mv s2, a0 |
| 76 | +; RV64I-NEXT: mv a0, s1 |
| 77 | +; RV64I-NEXT: call __fixsfti |
| 78 | +; RV64I-NEXT: mv s0, a0 |
117 | 79 | ; RV64I-NEXT: mv s3, a1 |
118 | 80 | ; RV64I-NEXT: li s5, -1 |
119 | | -; RV64I-NEXT: bgez s1, .LBB4_2 |
| 81 | +; RV64I-NEXT: bgez s2, .LBB4_2 |
120 | 82 | ; RV64I-NEXT: # %bb.1: |
121 | 83 | ; RV64I-NEXT: slli s3, s5, 63 |
122 | 84 | ; RV64I-NEXT: .LBB4_2: |
123 | 85 | ; RV64I-NEXT: lui a1, 520192 |
124 | 86 | ; RV64I-NEXT: addiw a1, a1, -1 |
125 | | -; RV64I-NEXT: mv a0, s0 |
| 87 | +; RV64I-NEXT: mv a0, s1 |
126 | 88 | ; RV64I-NEXT: call __gtsf2 |
127 | 89 | ; RV64I-NEXT: mv s4, a0 |
128 | 90 | ; RV64I-NEXT: blez a0, .LBB4_4 |
129 | 91 | ; RV64I-NEXT: # %bb.3: |
130 | 92 | ; RV64I-NEXT: srli s3, s5, 1 |
131 | 93 | ; RV64I-NEXT: .LBB4_4: |
132 | | -; RV64I-NEXT: mv a0, s0 |
133 | | -; RV64I-NEXT: mv a1, s0 |
| 94 | +; RV64I-NEXT: mv a0, s1 |
| 95 | +; RV64I-NEXT: mv a1, s1 |
134 | 96 | ; RV64I-NEXT: call __unordsf2 |
135 | 97 | ; RV64I-NEXT: snez a0, a0 |
136 | | -; RV64I-NEXT: slti a1, s1, 0 |
| 98 | +; RV64I-NEXT: slti a1, s2, 0 |
137 | 99 | ; RV64I-NEXT: sgtz a2, s4 |
138 | 100 | ; RV64I-NEXT: addi a0, a0, -1 |
139 | 101 | ; RV64I-NEXT: addi a3, a1, -1 |
140 | 102 | ; RV64I-NEXT: and a1, a0, s3 |
141 | | -; RV64I-NEXT: and a3, a3, s2 |
| 103 | +; RV64I-NEXT: and a3, a3, s0 |
142 | 104 | ; RV64I-NEXT: neg a2, a2 |
143 | 105 | ; RV64I-NEXT: or a2, a2, a3 |
144 | 106 | ; RV64I-NEXT: and a0, a0, a2 |
@@ -249,7 +211,7 @@ define i128 @fptoui_sat_f32_to_i128(float %a) nounwind { |
249 | 211 | ; RV64I-NEXT: call __gesf2 |
250 | 212 | ; RV64I-NEXT: slti a0, a0, 0 |
251 | 213 | ; RV64I-NEXT: addi s2, a0, -1 |
252 | | -; RV64I-NEXT: sext.w a0, s0 |
| 214 | +; RV64I-NEXT: mv a0, s0 |
253 | 215 | ; RV64I-NEXT: call __fixunssfti |
254 | 216 | ; RV64I-NEXT: and a0, s2, a0 |
255 | 217 | ; RV64I-NEXT: and a1, s2, a1 |
|
0 commit comments