Skip to content
This repository was archived by the owner on Jan 5, 2019. It is now read-only.

Commit 6223bf8

Browse files
zixuanzhaxic
authored andcommitted
Fix MSTORE8
It was increasing wrongly memory by 8 bytes and not 8 bits
1 parent 50ef430 commit 6223bf8

File tree

3 files changed

+3
-3
lines changed

3 files changed

+3
-3
lines changed

Diff for: wasm/MSTORE8.wast

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
(get_local $offset2)
2424
(get_local $offset3)))
2525

26-
(call $memusegas (get_local $offset) (i32.const 8))
26+
(call $memusegas (get_local $offset) (i32.const 1))
2727

2828
;; pop stack
2929
(set_local $sp (i32.sub (get_global $sp) (i32.const 32)))

Diff for: wasm/wast-async.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
"wast": ";; stack:\n;; 0: word\n;; -1: offset\n(func $MSTORE\n (local $sp i32)\n\n (local $offset i32)\n \n (local $offset0 i64)\n (local $offset1 i64)\n (local $offset2 i64)\n (local $offset3 i64)\n\n ;; load args from the stack\n (set_local $offset0 (i64.load (get_global $sp)))\n (set_local $offset1 (i64.load (i32.add (get_global $sp) (i32.const 8))))\n (set_local $offset2 (i64.load (i32.add (get_global $sp) (i32.const 16))))\n (set_local $offset3 (i64.load (i32.add (get_global $sp) (i32.const 24))))\n\n (set_local $offset \n (call $check_overflow (get_local $offset0)\n (get_local $offset1)\n (get_local $offset2)\n (get_local $offset3)))\n ;; subtrace gas useage\n (call $memusegas (get_local $offset) (i32.const 32))\n\n ;; pop itme from the stack\n (set_local $sp (i32.sub (get_global $sp) (i32.const 32)))\n\n ;; swap top stack item\n (drop (call $bswap_m256 (get_local $sp)))\n\n (set_local $offset (i32.add (get_local $offset) (get_global $memstart)))\n ;; store word to memory\n (i64.store (get_local $offset) (i64.load (get_local $sp)))\n (i64.store (i32.add (get_local $offset) (i32.const 8)) (i64.load (i32.add (get_local $sp) (i32.const 8))))\n (i64.store (i32.add (get_local $offset) (i32.const 16)) (i64.load (i32.add (get_local $sp) (i32.const 16))))\n (i64.store (i32.add (get_local $offset) (i32.const 24)) (i64.load (i32.add (get_local $sp) (i32.const 24))))\n)\n"
162162
},
163163
"MSTORE8": {
164-
"wast": ";; stack:\n;; 0: word\n;; -1: offset\n(func $MSTORE8\n (local $sp i32)\n\n (local $offset i32)\n\n (local $offset0 i64)\n (local $offset1 i64)\n (local $offset2 i64)\n (local $offset3 i64)\n\n ;; load args from the stack\n (set_local $offset0 (i64.load (get_global $sp)))\n (set_local $offset1 (i64.load (i32.add (get_global $sp) (i32.const 8))))\n (set_local $offset2 (i64.load (i32.add (get_global $sp) (i32.const 16))))\n (set_local $offset3 (i64.load (i32.add (get_global $sp) (i32.const 24))))\n\n (set_local $offset \n (call $check_overflow (get_local $offset0)\n (get_local $offset1)\n (get_local $offset2)\n (get_local $offset3)))\n\n (call $memusegas (get_local $offset) (i32.const 8))\n\n ;; pop stack\n (set_local $sp (i32.sub (get_global $sp) (i32.const 32)))\n (set_local $offset (i32.add (get_local $offset) (get_global $memstart)))\n (i32.store8 (i32.add (get_local $offset) (i32.const 0)) (i32.load (get_local $sp)))\n)\n"
164+
"wast": ";; stack:\n;; 0: word\n;; -1: offset\n(func $MSTORE8\n (local $sp i32)\n\n (local $offset i32)\n\n (local $offset0 i64)\n (local $offset1 i64)\n (local $offset2 i64)\n (local $offset3 i64)\n\n ;; load args from the stack\n (set_local $offset0 (i64.load (get_global $sp)))\n (set_local $offset1 (i64.load (i32.add (get_global $sp) (i32.const 8))))\n (set_local $offset2 (i64.load (i32.add (get_global $sp) (i32.const 16))))\n (set_local $offset3 (i64.load (i32.add (get_global $sp) (i32.const 24))))\n\n (set_local $offset \n (call $check_overflow (get_local $offset0)\n (get_local $offset1)\n (get_local $offset2)\n (get_local $offset3)))\n\n (call $memusegas (get_local $offset) (i32.const 1))\n\n ;; pop stack\n (set_local $sp (i32.sub (get_global $sp) (i32.const 32)))\n (set_local $offset (i32.add (get_local $offset) (get_global $memstart)))\n (i32.store8 (i32.add (get_local $offset) (i32.const 0)) (i32.load (get_local $sp)))\n)\n"
165165
},
166166
"MUL": {
167167
"wast": "(func $MUL\n (call $mul_256\n (i64.load (i32.add (get_global $sp) (i32.const 24)))\n (i64.load (i32.add (get_global $sp) (i32.const 16)))\n (i64.load (i32.add (get_global $sp) (i32.const 8)))\n (i64.load (get_global $sp))\n (i64.load (i32.sub (get_global $sp) (i32.const 8)))\n (i64.load (i32.sub (get_global $sp) (i32.const 16)))\n (i64.load (i32.sub (get_global $sp) (i32.const 24)))\n (i64.load (i32.sub (get_global $sp) (i32.const 32)))\n (i32.sub (get_global $sp) (i32.const 8))\n )\n)\n"

Diff for: wasm/wast.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
"wast": ";; stack:\n;; 0: word\n;; -1: offset\n(func $MSTORE\n (local $sp i32)\n\n (local $offset i32)\n \n (local $offset0 i64)\n (local $offset1 i64)\n (local $offset2 i64)\n (local $offset3 i64)\n\n ;; load args from the stack\n (set_local $offset0 (i64.load (get_global $sp)))\n (set_local $offset1 (i64.load (i32.add (get_global $sp) (i32.const 8))))\n (set_local $offset2 (i64.load (i32.add (get_global $sp) (i32.const 16))))\n (set_local $offset3 (i64.load (i32.add (get_global $sp) (i32.const 24))))\n\n (set_local $offset \n (call $check_overflow (get_local $offset0)\n (get_local $offset1)\n (get_local $offset2)\n (get_local $offset3)))\n ;; subtrace gas useage\n (call $memusegas (get_local $offset) (i32.const 32))\n\n ;; pop itme from the stack\n (set_local $sp (i32.sub (get_global $sp) (i32.const 32)))\n\n ;; swap top stack item\n (drop (call $bswap_m256 (get_local $sp)))\n\n (set_local $offset (i32.add (get_local $offset) (get_global $memstart)))\n ;; store word to memory\n (i64.store (get_local $offset) (i64.load (get_local $sp)))\n (i64.store (i32.add (get_local $offset) (i32.const 8)) (i64.load (i32.add (get_local $sp) (i32.const 8))))\n (i64.store (i32.add (get_local $offset) (i32.const 16)) (i64.load (i32.add (get_local $sp) (i32.const 16))))\n (i64.store (i32.add (get_local $offset) (i32.const 24)) (i64.load (i32.add (get_local $sp) (i32.const 24))))\n)\n"
162162
},
163163
"MSTORE8": {
164-
"wast": ";; stack:\n;; 0: word\n;; -1: offset\n(func $MSTORE8\n (local $sp i32)\n\n (local $offset i32)\n\n (local $offset0 i64)\n (local $offset1 i64)\n (local $offset2 i64)\n (local $offset3 i64)\n\n ;; load args from the stack\n (set_local $offset0 (i64.load (get_global $sp)))\n (set_local $offset1 (i64.load (i32.add (get_global $sp) (i32.const 8))))\n (set_local $offset2 (i64.load (i32.add (get_global $sp) (i32.const 16))))\n (set_local $offset3 (i64.load (i32.add (get_global $sp) (i32.const 24))))\n\n (set_local $offset \n (call $check_overflow (get_local $offset0)\n (get_local $offset1)\n (get_local $offset2)\n (get_local $offset3)))\n\n (call $memusegas (get_local $offset) (i32.const 8))\n\n ;; pop stack\n (set_local $sp (i32.sub (get_global $sp) (i32.const 32)))\n (set_local $offset (i32.add (get_local $offset) (get_global $memstart)))\n (i32.store8 (i32.add (get_local $offset) (i32.const 0)) (i32.load (get_local $sp)))\n)\n"
164+
"wast": ";; stack:\n;; 0: word\n;; -1: offset\n(func $MSTORE8\n (local $sp i32)\n\n (local $offset i32)\n\n (local $offset0 i64)\n (local $offset1 i64)\n (local $offset2 i64)\n (local $offset3 i64)\n\n ;; load args from the stack\n (set_local $offset0 (i64.load (get_global $sp)))\n (set_local $offset1 (i64.load (i32.add (get_global $sp) (i32.const 8))))\n (set_local $offset2 (i64.load (i32.add (get_global $sp) (i32.const 16))))\n (set_local $offset3 (i64.load (i32.add (get_global $sp) (i32.const 24))))\n\n (set_local $offset \n (call $check_overflow (get_local $offset0)\n (get_local $offset1)\n (get_local $offset2)\n (get_local $offset3)))\n\n (call $memusegas (get_local $offset) (i32.const 1))\n\n ;; pop stack\n (set_local $sp (i32.sub (get_global $sp) (i32.const 32)))\n (set_local $offset (i32.add (get_local $offset) (get_global $memstart)))\n (i32.store8 (i32.add (get_local $offset) (i32.const 0)) (i32.load (get_local $sp)))\n)\n"
165165
},
166166
"MUL": {
167167
"wast": "(func $MUL\n (call $mul_256\n (i64.load (i32.add (get_global $sp) (i32.const 24)))\n (i64.load (i32.add (get_global $sp) (i32.const 16)))\n (i64.load (i32.add (get_global $sp) (i32.const 8)))\n (i64.load (get_global $sp))\n (i64.load (i32.sub (get_global $sp) (i32.const 8)))\n (i64.load (i32.sub (get_global $sp) (i32.const 16)))\n (i64.load (i32.sub (get_global $sp) (i32.const 24)))\n (i64.load (i32.sub (get_global $sp) (i32.const 32)))\n (i32.sub (get_global $sp) (i32.const 8))\n )\n)\n"

0 commit comments

Comments
 (0)