bytecodealliance / bytecodealliance/wasmtime
Cranelift: `fcvt_from_{u,s}int` not implemented for `i128` on AArch64
- Dominant language
- Rust
- Stars
- 18.6k
- Forks
- 1.8k
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 126
Description
👋 Hey,
This came up when trying to fuzz #4884 on AArch64
### `.clif` Test Case
```
test run
target aarch64
function %a(i128) -> f32 {
block0(v0: i128):
v1 = fcvt_from_uint.f32 v0
return v1
}
; run: %a(0) == 0.0
function %c(i128) -> f64 {
block0(v0: i128):
v1 = fcvt_from_uint.f64 v0
return v1
}
; run: %c(0) == 0.0
function %signed_a(i128) -> f32 {
block0(v0: i128):
v1 = fcvt_from_sint.f32 v0
return v1
}
; run: %signed_a(0) == 0.0
function %signed_c(i128) -> f64 {
block0(v0: i128):
v1 = fcvt_from_sint.f64 v0
return v1
}
; run: %signed_c(0) == 0.0
```
### Steps to Reproduce
* `clif-util ./the-above.clif`
### Expected Results
The above tests to pass.
### Actual Results
```
Running `/home/ubuntu/git/wasmtime/target/debug/clif-util test ./lmao.clif`
thread 'worker #0' panicked at 'internal error: entered unreachable code: implemented in ISLE: inst = `v1 = fcvt_from_sint.f64 v0`, type = `Some(types::F64)`', cranelift/codegen/src/isa/aarch64/lower_inst.rs:40:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
ERROR cranelift_filetests::concurrent > FAIL: panicked in worker #0: internal error: entered unreachable code: implemented in ISLE: inst = `v1 = fcvt_from_sint.f64 v0`, type = `Some(types::F64)`
FAIL ./lmao.clif: panicked in worker #0: internal error: entered unreachable code: implemented in ISLE: inst = `v1 = fcvt_from_sint.f64 v0`, type = `Some(types::F64)`
1 tests
Error: 1 failure
```
This fails in the first function but all the functions in all test cases crash with a similar error.
### Versions and Environment
Cranelift version or commit: main
Operating system: Linux
Architecture: aarch64
### Extra Info
`cg_clif` works around this by emitting a libcall: https://github.com/bjorn3/rustc_codegen_cranelift/blob/fa7660440b2581c4c57d896d50e76da1515de6df/src/cast.rs#L50-L85
Contributor guide
Assessment
This issue has not been assessed yet.