Skip to content

Cranelift: fcvt_from_{u,s}int not implemented for i128 on AArch64聽#4933

Description

@afonso360

馃憢 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIncorrect behavior in the current implementation that needs fixingcraneliftIssues related to the Cranelift code generatorcranelift:area:aarch64Issues related to AArch64 backend.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions