Skip to content

Commit 1a09555

Browse files
authored
Update wasmi_ir2 crate for div,rem,shr ops (#1658)
* fix field type of u{32,64}.{div,rem,shr} * fix rhs field type of i{32,64}.{div,rem} ops * add Encode and Decode impls for NonZero<i{32,64}>
1 parent 5c28cc9 commit 1a09555

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

crates/ir2/build/op.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,32 +1186,28 @@ impl BinaryOpKind {
11861186
| Self::I32Sub
11871187
| Self::I32Mul
11881188
| Self::S32Div
1189-
| Self::U32Div
11901189
| Self::S32Rem
1191-
| Self::U32Rem
11921190
| Self::I32BitAnd
11931191
| Self::I32BitOr
11941192
| Self::I32BitXor
11951193
| Self::I32Shl
11961194
| Self::S32Shr
1197-
| Self::U32Shr
11981195
| Self::I32Rotl
11991196
| Self::I32Rotr => FieldTy::I32,
1197+
| Self::U32Div | Self::U32Rem | Self::U32Shr => FieldTy::U32,
12001198
| Self::I64Add
12011199
| Self::I64Sub
12021200
| Self::I64Mul
12031201
| Self::S64Div
1204-
| Self::U64Div
12051202
| Self::S64Rem
1206-
| Self::U64Rem
12071203
| Self::I64BitAnd
12081204
| Self::I64BitOr
12091205
| Self::I64BitXor
12101206
| Self::I64Shl
12111207
| Self::S64Shr
1212-
| Self::U64Shr
12131208
| Self::I64Rotl
12141209
| Self::I64Rotr => FieldTy::I64,
1210+
| Self::U64Div | Self::U64Rem | Self::U64Shr => FieldTy::U64,
12151211
| Self::F32Add
12161212
| Self::F32Sub
12171213
| Self::F32Mul
@@ -1245,7 +1241,8 @@ impl BinaryOpKind {
12451241
| Self::I32Shl | Self::S32Shr | Self::U32Shr | Self::I32Rotl | Self::I32Rotr => {
12461242
FieldTy::U8
12471243
}
1248-
| Self::S32Div | Self::U32Div | Self::S32Rem | Self::U32Rem => FieldTy::NonZeroU32,
1244+
| Self::S32Div | Self::S32Rem => FieldTy::NonZeroI32,
1245+
| Self::U32Div | Self::U32Rem => FieldTy::NonZeroU32,
12491246
| Self::I64Add
12501247
| Self::I64Sub
12511248
| Self::I64Mul
@@ -1255,7 +1252,8 @@ impl BinaryOpKind {
12551252
| Self::I64Shl | Self::S64Shr | Self::U64Shr | Self::I64Rotl | Self::I64Rotr => {
12561253
FieldTy::U8
12571254
}
1258-
| Self::S64Div | Self::U64Div | Self::S64Rem | Self::U64Rem => FieldTy::NonZeroU64,
1255+
| Self::S64Div | Self::S64Rem => FieldTy::NonZeroI64,
1256+
| Self::U64Div | Self::U64Rem => FieldTy::NonZeroU64,
12591257
| Self::F32Add
12601258
| Self::F32Sub
12611259
| Self::F32Mul
@@ -1554,6 +1552,8 @@ pub enum FieldTy {
15541552
I64,
15551553
F32,
15561554
F64,
1555+
NonZeroI32,
1556+
NonZeroI64,
15571557
NonZeroU32,
15581558
NonZeroU64,
15591559
SignF32,
@@ -1597,6 +1597,8 @@ impl Display for FieldTy {
15971597
Self::I64 => "i64",
15981598
Self::F32 => "f32",
15991599
Self::F64 => "f64",
1600+
Self::NonZeroI32 => "NonZero<i32>",
1601+
Self::NonZeroI64 => "NonZero<i64>",
16001602
Self::NonZeroU32 => "NonZero<u32>",
16011603
Self::NonZeroU64 => "NonZero<u64>",
16021604
Self::SignF32 => "Sign<f32>",

crates/ir2/src/decode/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ impl_decode_using! {
130130
Sign<f32> as bool = Sign::new,
131131
Sign<f64> as bool = Sign::new,
132132
SlotSpan as Slot = SlotSpan::new,
133+
NonZero<i32> as i32 = |value| unsafe { NonZero::new_unchecked(value) },
134+
NonZero<i64> as i64 = |value| unsafe { NonZero::new_unchecked(value) },
133135
NonZero<u32> as u32 = |value| unsafe { NonZero::new_unchecked(value) },
134136
NonZero<u64> as u64 = |value| unsafe { NonZero::new_unchecked(value) },
135137
TrapCode as u8 = |code: u8| -> TrapCode {

crates/ir2/src/encode.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ impl_encode_using! {
166166
Sign<f32> as bool = Sign::is_positive,
167167
Sign<f64> as bool = Sign::is_positive,
168168
SlotSpan as Slot = SlotSpan::head,
169+
NonZero<i32> as i32 = NonZero::get,
170+
NonZero<i64> as i64 = NonZero::get,
169171
NonZero<u32> as u32 = NonZero::get,
170172
NonZero<u64> as u64 = NonZero::get,
171173
TrapCode as u8 = |code: TrapCode| -> u8 { code as _ },

0 commit comments

Comments
 (0)