bytecodealliance / bytecodealliance/wasmtime
cranelift: Tracking issue for Interpreter support
- 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
Assessment
This issue has not been assessed yet.