Skip to content

Commit b1d3ab0

Browse files
authored
Fix another case of no-signals-trunc (#10679)
This catches one more case from #10670 where the operands here are always `f64`, so a conditional 32-or-64-bit trunc isn't necessary and the 64-bit version should always be used.
1 parent 41e87be commit b1d3ab0

File tree

3 files changed

+195
-6
lines changed

3 files changed

+195
-6
lines changed

crates/cranelift/src/func_environ.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,11 +1169,7 @@ impl<'module_environment> FuncEnvironment<'module_environment> {
11691169
};
11701170
let isnan = builder.ins().fcmp(FloatCC::NotEqual, val, val);
11711171
self.trapnz(builder, isnan, ir::TrapCode::BAD_CONVERSION_TO_INTEGER);
1172-
let val = if val_ty == F64 {
1173-
self.trunc_f64(builder, val)
1174-
} else {
1175-
self.trunc_f32(builder, val)
1176-
};
1172+
let val = self.trunc_f64(builder, val);
11771173
let (lower_bound, upper_bound) = match ty {
11781174
I32 => range32,
11791175
I64 => range64,

tests/disas.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ impl Test {
165165
if let Some(config) = &config.flags {
166166
flags.extend(config.to_vec());
167167
}
168-
let opts = wasmtime_cli_flags::CommonOptions::try_parse_from(&flags)?;
168+
let mut opts = wasmtime_cli_flags::CommonOptions::try_parse_from(&flags)?;
169+
opts.codegen.cranelift_debug_verifier = Some(true);
169170

170171
Ok(Test {
171172
path: path.to_path_buf(),

tests/disas/trunc32.wat

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
;;! target = "x86_64-unknown-linux-gnu"
2+
;;! test = "compile"
3+
;;! flags = "-Ccompiler=cranelift -Ccranelift-has_sse41=false -Osignals-based-traps=n"
4+
5+
(module
6+
(func (export "i32.trunc_f32_u") (param f32) (result i32)
7+
(i32.trunc_f32_u (local.get 0))
8+
)
9+
)
10+
;; wasm[0]::function[0]:
11+
;; pushq %rbp
12+
;; movq %rsp, %rbp
13+
;; subq $0x20, %rsp
14+
;; movq %r14, 0x10(%rsp)
15+
;; movq 8(%rdi), %rdx
16+
;; movq %rdi, %r14
17+
;; movq 0x10(%rdx), %rdx
18+
;; movq %rsp, %r8
19+
;; cmpq %rdx, %r8
20+
;; jb 0x12d
21+
;; 24: ucomisd %xmm0, %xmm0
22+
;; movdqu %xmm0, (%rsp)
23+
;; setp %r10b
24+
;; setne %r11b
25+
;; orl %r11d, %r10d
26+
;; testb %r10b, %r10b
27+
;; jne 0x116
28+
;; 41: movq %r14, %rdi
29+
;; movdqu (%rsp), %xmm0
30+
;; callq 0x244
31+
;; movabsq $13830554455654793216, %r11
32+
;; movq %r11, %xmm4
33+
;; ucomisd %xmm0, %xmm4
34+
;; setae %dil
35+
;; testb %dil, %dil
36+
;; jne 0xff
37+
;; 6e: ucomisd 0xda(%rip), %xmm0
38+
;; setae %dl
39+
;; testb %dl, %dl
40+
;; jne 0xe8
41+
;; 82: movdqu (%rsp), %xmm2
42+
;; movabsq $0x43e0000000000000, %r9
43+
;; movq %r9, %xmm7
44+
;; ucomisd %xmm7, %xmm2
45+
;; jae 0xb7
46+
;; jp 0x141
47+
;; a6: cvttsd2si %xmm2, %rax
48+
;; cmpq $0, %rax
49+
;; jge 0xda
50+
;; b5: ud2
51+
;; movaps %xmm2, %xmm0
52+
;; subsd %xmm7, %xmm0
53+
;; cvttsd2si %xmm0, %rax
54+
;; cmpq $0, %rax
55+
;; jl 0x143
56+
;; cd: movabsq $9223372036854775808, %r9
57+
;; addq %r9, %rax
58+
;; movq 0x10(%rsp), %r14
59+
;; addq $0x20, %rsp
60+
;; movq %rbp, %rsp
61+
;; popq %rbp
62+
;; retq
63+
;; e8: movl $6, %esi
64+
;; ed: movq %r14, %rdi
65+
;; f0: callq 0x284
66+
;; f5: movq %r14, %rdi
67+
;; f8: callq 0x2c8
68+
;; fd: ud2
69+
;; ff: movl $6, %esi
70+
;; 104: movq %r14, %rdi
71+
;; 107: callq 0x284
72+
;; 10c: movq %r14, %rdi
73+
;; 10f: callq 0x2c8
74+
;; 114: ud2
75+
;; 116: movl $8, %esi
76+
;; 11b: movq %r14, %rdi
77+
;; 11e: callq 0x284
78+
;; 123: movq %r14, %rdi
79+
;; 126: callq 0x2c8
80+
;; 12b: ud2
81+
;; 12d: xorl %esi, %esi
82+
;; 12f: movq %r14, %rdi
83+
;; 132: callq 0x284
84+
;; 137: movq %r14, %rdi
85+
;; 13a: callq 0x2c8
86+
;; 13f: ud2
87+
;; 141: ud2
88+
;; 143: ud2
89+
;; 145: addb %al, (%rax)
90+
;; 147: addb %al, (%rax)
91+
;; 149: addb %al, (%rax)
92+
;; 14b: addb %al, (%rax)
93+
;; 14d: addb %al, (%rax)
94+
;; 14f: addb %al, (%rax)
95+
;; 151: addb %al, (%rax)
96+
;; 153: addb %al, (%rax)
97+
;; 155: addb %dh, %al
98+
;; 157: addb %al, (%r8)
99+
;; 15a: addb %al, (%rax)
100+
;; 15c: addb %al, (%rax)
101+
;; 15e: addb %al, (%rax)
102+
103+
;; wasm[0]::function[0]:
104+
;; pushq %rbp
105+
;; movq %rsp, %rbp
106+
;; subq $0x20, %rsp
107+
;; movq %r12, 0x10(%rsp)
108+
;; movdqu %xmm0, (%rsp)
109+
;; movq 8(%rdi), %r10
110+
;; movq %rdi, %r12
111+
;; movq 0x10(%r10), %r10
112+
;; movq %rsp, %r11
113+
;; cmpq %r10, %r11
114+
;; jb 0x122
115+
;; 29: xorpd %xmm0, %xmm0
116+
;; movdqu (%rsp), %xmm4
117+
;; cvtss2sd %xmm4, %xmm0
118+
;; ucomisd %xmm0, %xmm0
119+
;; setp %dil
120+
;; setne %al
121+
;; orl %eax, %edi
122+
;; testb %dil, %dil
123+
;; jne 0x10b
124+
;; 4d: movq %r12, %rdi
125+
;; callq 0x232
126+
;; movabsq $13830554455654793216, %rax
127+
;; movq %rax, %xmm7
128+
;; ucomisd %xmm0, %xmm7
129+
;; setae %dl
130+
;; testb %dl, %dl
131+
;; jne 0xf4
132+
;; 74: ucomisd 0xc4(%rip), %xmm0
133+
;; setae %r10b
134+
;; testb %r10b, %r10b
135+
;; jne 0xdd
136+
;; 89: movdqu (%rsp), %xmm4
137+
;; movl $0x4f000000, %esi
138+
;; movd %esi, %xmm2
139+
;; ucomiss %xmm2, %xmm4
140+
;; jae 0xb5
141+
;; jp 0x136
142+
;; a6: cvttss2si %xmm4, %eax
143+
;; cmpl $0, %eax
144+
;; jge 0xcf
145+
;; b3: ud2
146+
;; movaps %xmm4, %xmm3
147+
;; subss %xmm2, %xmm3
148+
;; cvttss2si %xmm3, %eax
149+
;; cmpl $0, %eax
150+
;; jl 0x138
151+
;; c9: addl $0x80000000, %eax
152+
;; movq 0x10(%rsp), %r12
153+
;; addq $0x20, %rsp
154+
;; movq %rbp, %rsp
155+
;; popq %rbp
156+
;; retq
157+
;; dd: movl $6, %esi
158+
;; e2: movq %r12, %rdi
159+
;; e5: callq 0x272
160+
;; ea: movq %r12, %rdi
161+
;; ed: callq 0x2b6
162+
;; f2: ud2
163+
;; f4: movl $6, %esi
164+
;; f9: movq %r12, %rdi
165+
;; fc: callq 0x272
166+
;; 101: movq %r12, %rdi
167+
;; 104: callq 0x2b6
168+
;; 109: ud2
169+
;; 10b: movl $8, %esi
170+
;; 110: movq %r12, %rdi
171+
;; 113: callq 0x272
172+
;; 118: movq %r12, %rdi
173+
;; 11b: callq 0x2b6
174+
;; 120: ud2
175+
;; 122: xorl %esi, %esi
176+
;; 124: movq %r12, %rdi
177+
;; 127: callq 0x272
178+
;; 12c: movq %r12, %rdi
179+
;; 12f: callq 0x2b6
180+
;; 134: ud2
181+
;; 136: ud2
182+
;; 138: ud2
183+
;; 13a: addb %al, (%rax)
184+
;; 13c: addb %al, (%rax)
185+
;; 13e: addb %al, (%rax)
186+
;; 140: addb %al, (%rax)
187+
;; 142: addb %al, (%rax)
188+
;; 144: addb %al, (%rax)
189+
;; 146: lock addb %al, (%r8)
190+
;; 14a: addb %al, (%rax)
191+
;; 14c: addb %al, (%rax)
192+
;; 14e: addb %al, (%rax)

0 commit comments

Comments
 (0)