wasmtime icon indicating copy to clipboard operation
wasmtime copied to clipboard

Support bitcasting between scalar and vector types

Open bjorn3 opened this issue 2 years ago • 5 comments

Feature

See title. For example v0 = vconst.i64x2 ...; bitcast.i128 little v0.

Benefit

This allows bitcasting between the two without having to go through memory. Cg_clif needs this bitcasting for implementing mem::transmute and float to 128bit int casts on Windows. Currently it has to go through the stack, which is slower and inhibits optimizations.

bjorn3 avatar Mar 27 '23 17:03 bjorn3

This seems like a good starter issue. It currently affects all of our 4 backends.

Here's a test demonstrating the issue:

test compile
target aarch64

function %bitcast_vec_to_int(i64x2) -> i128 {
block0(v0: i64x2):
    v1 = bitcast.i128 little v0
    return v1
}

function %bitcast_int_to_vec(i128) -> i64x2 {
block0(v0: i128):
    v1 = bitcast.i64x2 little v0
    return v1
}

When running this test it fails with: should be implemented in ISLE: inst = v1 = bitcast.i128 little v0, type = Some(types::I128)

Happy to help anyone who wants to try working on this!

afonso360 avatar May 23 '24 15:05 afonso360

@afonso360 It seems like the only remaining part to fix is s390x, right?

aidenfoxivey avatar Oct 05 '24 20:10 aidenfoxivey

Yes, I think that's correct

afonso360 avatar Oct 05 '24 20:10 afonso360

Yes, I think that's correct

I'll take a look at how to get a VM running on my ARM MacBook.

aidenfoxivey avatar Oct 05 '24 20:10 aidenfoxivey

Maybe I can take on that remaining part.

aidenfoxivey avatar Oct 05 '24 20:10 aidenfoxivey

Signed up for (access/time on) one of those LinuxONE servers from IBM, but no response from them so far lol. I dunno whether maybe QEMU is the preferred approach?

aidenfoxivey avatar Oct 24 '24 17:10 aidenfoxivey

QEMU is usually easier for working on different arches. We have a great doc on how to set it up if you're running in Linux

afonso360 avatar Oct 24 '24 18:10 afonso360

QEMU is usually easier for working on different arches. We have a great doc on how to set it up if you're running in Linux

Maybe I'll try to run those in a VM. Unfortunately I'm a Mac person for the time being.

aidenfoxivey avatar Oct 24 '24 18:10 aidenfoxivey