bytecodealliance / bytecodealliance/wasmtime

cranelift: Tracking issue for Interpreter support

Open
#4,889 0 comments 6 reactions 0 assignees View on GitHub
cranelift enhancement
Dominant language
Rust
Stars
18.6k
Forks
1.8k
Avg merge
1d 18h
Merged PRs (30d)
126

Description

Hey,

I did a roundup of what is supported in the interpreter and what is tested or not. Now that we have multiple people working on the interpreter this is probably a better way to keep track of what is going on an who is working on what.

### Labels:
βœ” - Implemented and tested for all types
🟑 - Implemented for some types (i.e. only scalar but no SIMD) / Missing some tests
❌ - Unimplemented

### Opcodes
- [x] `Opcode::Jump` - βœ”
- [ ] `Opcode::Brz` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::Brnz` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::BrIcmp` - 🟑
- [ ] I128 tests disabled
- [x] `Opcode::BrTable` - βœ”
- [ ] `Opcode::Trap` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Debugtrap` - 🟑
- [ ] Missing tests
- [ ] `Opcode::ResumableTrap` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Trapz` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Trapnz` - 🟑
- [ ] Missing tests
- [ ] `Opcode::ResumableTrapnz` - 🟑
- [ ] Missing tests
- [x] `Opcode::Return` - βœ”
- [x] `Opcode::Call` - βœ”
- [ ] `Opcode::CallIndirect` - ❌
- [ ] `Opcode::FuncAddr` - ❌
- [x] `Opcode::Load` - βœ”
- [ ] `Opcode::Uload8` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Sload8` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Uload16` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Sload16` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Uload32` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Sload32` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Uload8x8` - ❌
- [ ] `Opcode::Sload8x8` - ❌
- [ ] `Opcode::Uload16x4` - ❌
- [ ] `Opcode::Sload16x4` - ❌
- [ ] `Opcode::Uload32x2` - ❌
- [ ] `Opcode::Sload32x2` - ❌
- [x] `Opcode::Store` - βœ”
- [ ] `Opcode::Istore8` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Istore16` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Istore32` - 🟑
- [ ] Missing tests
- [x] `Opcode::StackLoad` - βœ”
- [x] `Opcode::StackStore` - βœ”
- [x] `Opcode::StackAddr` - βœ”
- [ ] `Opcode::DynamicStackAddr` - ❌
- [ ] `Opcode::DynamicStackLoad` - ❌
- [ ] `Opcode::DynamicStackStore` - ❌
- [x] `Opcode::GlobalValue` - βœ”
- [ ] `Opcode::SymbolValue` - ❌
- [ ] `Opcode::TlsValue` - ❌
- [x] `Opcode::HeapAddr` - βœ”
- [x] `Opcode::GetPinnedReg` - βœ”
- [x] `Opcode::SetPinnedReg` - βœ”
- [x] `Opcode::TableAddr` - βœ”
- [x] `Opcode::Iconst` - βœ”
- [x] `Opcode::F32const` - βœ”
- [x] `Opcode::F64const` - βœ”
- [x] `Opcode::Vconst` - βœ”
- [ ] `Opcode::Null` - ❌
- [ ] `Opcode::Nop` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Select` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Bitselect` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Copy` - 🟑
- [ ] Missing tests
- [x] `Opcode::Icmp` - βœ”
- [ ] `Opcode::Smin` - 🟑
- [ ] Missing i128 tests
- [ ] Missing some SIMD tests (i64x2)
- [ ] `Opcode::Umin` - 🟑
- [ ] Missing i128 tests
- [ ] Missing some SIMD tests (i64x2)
- [ ] `Opcode::Smax` - 🟑
- [ ] Missing i128 tests
- [ ] Missing some SIMD tests (i64x2)
- [ ] `Opcode::Umax` - 🟑
- [ ] Missing i128 tests
- [ ] Missing some SIMD tests (i64x2)
- [ ] `Opcode::AvgRound` - 🟑
- [ ] Implemented for scalar, but not tested
- [ ] SIMD tests disabled
- [x] `Opcode::Iadd` - βœ”
- [x] `Opcode::UaddSat` - βœ”
- [x] `Opcode::SaddSat` - βœ”
- [x] `Opcode::Isub` - βœ”
- [x] `Opcode::UsubSat` - βœ”
- [x] `Opcode::SsubSat` - βœ”
- [ ] `Opcode::Ineg` - 🟑
- [ ] Only tested for i32x4
- [ ] `Opcode::Iabs` - 🟑
- [ ] Missing i128 tests
- [x] `Opcode::Imul` - βœ”
- [x] `Opcode::Umulhi` - βœ”
- [x] `Opcode::Smulhi` - βœ”
- [x] `Opcode::Udiv` - βœ”
- [x] `Opcode::Sdiv` - βœ”
- [x] `Opcode::Urem` - βœ”
- [x] `Opcode::Srem` - βœ”
- [ ] `Opcode::IaddCin` - 🟑
- [ ] Missing I128 tests
- [ ] `Opcode::IaddCout` - 🟑
- [ ] Missing I128 tests
- [ ] `Opcode::IaddCarry` - 🟑
- [ ] Missing I128 tests
- [ ] `Opcode::IsubBin` - 🟑
- [ ] Missing I128 tests
- [ ] `Opcode::IsubBout` - 🟑
- [ ] Missing I128 tests
- [ ] `Opcode::IsubBorrow` - 🟑
- [ ] Missing I128 tests
- [ ] `Opcode::Band` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Bor` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Bxor` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Bnot` - 🟑
- [ ] Tests are disabled
- [ ] `Opcode::BandNot` - 🟑
- [ ] Missing tests
- [ ] `Opcode::BorNot` - 🟑
- [ ] Missing tests
- [ ] `Opcode::BxorNot` - 🟑
- [ ] Missing tests
- [x] `Opcode::Rotl` - βœ”
- [ ] SIMD tests missing
- [x] `Opcode::Rotr` - βœ”
- [ ] SIMD tests missing
- [x] `Opcode::Ishl` - βœ”
- [ ] SIMD tests disabled
- [x] `Opcode::Ushr` - βœ”
- [ ] SIMD tests disabled
- [ ] `Opcode::Sshr` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Bitrev` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::Clz` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::Cls` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::Ctz` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::Popcnt` - 🟑
- [ ] I128 tests disabled
- [ ] `Opcode::Fcmp` - 🟑
- [ ] Missing SIMD tests
- [ ] `Opcode::Fadd` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fsub` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fmul` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fdiv` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Sqrt` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fma` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fneg` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fabs` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fcopysign` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fmin` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::FminPseudo` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Fmax` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::FmaxPseudo` - 🟑
- [ ] SIMD tests disabled
- [ ] `Opcode::Ceil` - 🟑
- [ ] Missing SIMD tests
- [ ] `Opcode::Floor` - 🟑
- [ ] Missing SIMD tests
- [ ] `Opcode::Trunc` - 🟑
- [ ] Missing SIMD tests
- [ ] `Opcode::Nearest` - 🟑
- [ ] Missing SIMD tests
- [ ] `Opcode::IsNull` - ❌
- [ ] `Opcode::IsInvalid` - ❌
- [ ] `Opcode::Bitcast` - 🟑
- [ ] Missing tests for all types
- [ ] `Opcode::ScalarToVector` - 🟑
- [ ] Tests disabled
- [x] `Opcode::Ireduce` - βœ”
- [x] `Opcode::Snarrow` - βœ”
- [x] `Opcode::Unarrow` - βœ”
- [x] `Opcode::Uunarrow` - βœ”
- [x] `Opcode::Bmask` - βœ”
- [x] `Opcode::Sextend` - βœ”
- [x] `Opcode::Uextend` - βœ”
- [ ] `Opcode::Fpromote` - 🟑
- [ ] Tests disabled
- [ ] `Opcode::Fdemote` - 🟑
- [ ] Tests disabled
- [x] `Opcode::Shuffle` - βœ”
- [ ] `Opcode::Swizzle` - 🟑
- [ ] Only tested for i8x16
- [ ] `Opcode::Splat` - 🟑
- [ ] Tests disabled
- [ ] `Opcode::Insertlane` - 🟑
- [ ] Missing tests
- [ ] `Opcode::Extractlane` - 🟑
- [ ] Missing tests
- [x] `Opcode::VhighBits` - βœ”
- [ ] `Opcode::Vsplit` - ❌
- [ ] `Opcode::Vconcat` - ❌
- [x] `Opcode::Vselect` - βœ”
- [x] `Opcode::VanyTrue` - βœ”
- [x] `Opcode::VallTrue` - βœ”
- [x] `Opcode::SwidenLow` - βœ”
- [x] `Opcode::SwidenHigh` - βœ”
- [x] `Opcode::UwidenLow` - βœ”
- [x] `Opcode::UwidenHigh` - βœ”
- [x] `Opcode::FcvtToUint` - βœ” (#4884)
- [x] `Opcode::FcvtToUintSat` - βœ” (#4884)
- [x] `Opcode::FcvtToSint` - βœ” (#4884)
- [x] `Opcode::FcvtToSintSat` - βœ” (#4884)
- [x] `Opcode::FcvtFromUint` - βœ” (#4884)
- [x] `Opcode::FcvtFromSint` - βœ” (#4884)
- [x] `Opcode::FcvtLowFromSint` - βœ” (#4884)
- [x] `Opcode::FvpromoteLow` - βœ” (#4884)
- [x] `Opcode::Fvdemote` - βœ” (#4884)
- [x] `Opcode::Isplit` - βœ”
- [x] `Opcode::Iconcat` - βœ”
- [x] `Opcode::AtomicRmw` - βœ”
- [x] `Opcode::AtomicCas` - βœ”
- [x] `Opcode::AtomicLoad` - βœ”
- [x] `Opcode::AtomicStore` - βœ”
- [x] `Opcode::Fence` - βœ”
- [x] `Opcode::WideningPairwiseDotProductS` - βœ”
- [ ] `Opcode::SqmulRoundSat` - 🟑
- [ ] Missing tests for types other than i16x8
- [x] `Opcode::IaddPairwise` - βœ”
- [ ] `Opcode::ExtractVector` - ❌
- [ ] `Opcode::GetFramePointer` - ❌
- [ ] `Opcode::GetStackPointer` - ❌
- [ ] `Opcode::GetReturnAddress` - ❌

### Op+Imm

These may be going away, see: #4721

- [ ] `Opcode::IaddImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::ImulImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::UdivImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::SdivImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::UremImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::SremImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::IrsubImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::BandImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::BorImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::BxorImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::RotlImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::RotrImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::IshlImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::UshrImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::SshrImm` - 🟑
- [ ] Missing tests for some types
- [ ] `Opcode::IcmpImm` - 🟑
- [ ] Missing tests for some types

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.