Skip to content

Commit 6367050

Browse files
fix(moonbit): incorrect wasm instructions (#1033)
* fix(moonbit): incorrect wasm instructions * fix: signed conversion
1 parent 479b8cc commit 6367050

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

crates/moonbit/src/lib.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ pub extern "wasm" fn ptr2float_array(ptr : Int) -> FixedArray[Float] =
150150
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.const 241 i32.store8 local.get 0 i32.const 8 i32.sub)
151151
152152
pub extern "wasm" fn ptr2uint64_array(ptr : Int) -> FixedArray[UInt64] =
153-
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.load i32.const 2 i32.lsr i32.const 241 i32.lor local.get 0 i32.const 4 i32.sub i32.store local.get 0 i32.const 8 i32.sub)
153+
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.load i32.const 1 i32.shr_u i32.const 241 i32.or local.get 0 i32.const 4 i32.sub i32.store local.get 0 i32.const 8 i32.sub)
154154
155155
pub extern "wasm" fn ptr2int64_array(ptr : Int) -> FixedArray[Int64] =
156-
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.load i32.const 2 i32.lsr i32.const 241 i32.lor local.get 0 i32.const 4 i32.sub i32.store local.get 0 i32.const 8 i32.sub)
156+
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.load i32.const 1 i32.shr_u i32.const 241 i32.or local.get 0 i32.const 4 i32.sub i32.store local.get 0 i32.const 8 i32.sub)
157157
158158
pub extern "wasm" fn ptr2double_array(ptr : Int) -> FixedArray[Double] =
159-
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.load i32.const 2 i32.lsr i32.const 241 i32.lor local.get 0 i32.const 4 i32.sub i32.store local.get 0 i32.const 8 i32.sub)
159+
#|(func (param i32) (result i32) local.get 0 i32.const 4 i32.sub i32.load i32.const 1 i32.shr_u i32.const 241 i32.or local.get 0 i32.const 4 i32.sub i32.store local.get 0 i32.const 8 i32.sub)
160160
161161
pub trait Any {}
162162
pub struct Cleanup {
@@ -1629,9 +1629,8 @@ impl Bindgen for FunctionBindgen<'_, '_> {
16291629
Instruction::I32FromS8 => {
16301630
results.push(format!("{ffi_qualifier}extend8({})", operands[0]))
16311631
}
1632-
Instruction::S8FromI32 => results.push(format!("({}.land(0xFF))", operands[0])),
1633-
1634-
Instruction::S16FromI32 => results.push(format!("({}.land(0xFFFF))", operands[0])),
1632+
Instruction::S8FromI32 => results.push(format!("({} - 0x100)", operands[0])),
1633+
Instruction::S16FromI32 => results.push(format!("({} - 0x10000)", operands[0])),
16351634
Instruction::I32FromS16 => {
16361635
results.push(format!("{ffi_qualifier}extend16({})", operands[0]))
16371636
}

0 commit comments

Comments
 (0)