compileDo: Rearrange

This commit is contained in:
Remko Tronçon 2022-05-31 20:30:27 +02:00
parent f48dd6b86d
commit 2dbe2e00dd

View file

@ -2192,6 +2192,11 @@
(call $compileEndDests (local.get $tos))) (call $compileEndDests (local.get $tos)))
(func $compileDo (param $tos i32) (result i32) (func $compileDo (param $tos i32) (result i32)
;; Save branch nesting
(i32.store (local.get $tos) (global.get $branchNesting))
(local.set $tos (i32.add (local.get $tos) (i32.const 4)))
(global.set $branchNesting (i32.const 0))
;; 1: $diff_i = end index - current index ;; 1: $diff_i = end index - current index
;; 2: $end_i ;; 2: $end_i
(global.set $currentLocal (i32.add (global.get $currentLocal) (i32.const 2))) (global.set $currentLocal (i32.add (global.get $currentLocal) (i32.const 2)))
@ -2199,11 +2204,6 @@
(then (then
(global.set $lastLocal (global.get $currentLocal)))) (global.set $lastLocal (global.get $currentLocal))))
;; Save branch nesting
(i32.store (local.get $tos) (global.get $branchNesting))
(local.set $tos (i32.add (local.get $tos) (i32.const 4)))
(global.set $branchNesting (i32.const 0))
;; $1 = current index (temporary) ;; $1 = current index (temporary)
(call $compilePop) (call $compilePop)
(call $emitSetLocal (i32.sub (global.get $currentLocal) (i32.const 1))) (call $emitSetLocal (i32.sub (global.get $currentLocal) (i32.const 1)))
@ -2211,6 +2211,10 @@
(call $compilePop) (call $compilePop)
(call $emitSetLocal (global.get $currentLocal)) (call $emitSetLocal (global.get $currentLocal))
;; Already emit the block, so we can jump out of it before starting DO
;; in the conditional case
(call $emitBlock)
;; startDo $1 ;; startDo $1
(call $emitGetLocal (i32.sub (global.get $currentLocal) (i32.const 1))) (call $emitGetLocal (i32.sub (global.get $currentLocal) (i32.const 1)))
(call $emitICall (i32.const 1) (i32.const 0x1 (; = START_DO_INDEX ;))) (call $emitICall (i32.const 1) (i32.const 0x1 (; = START_DO_INDEX ;)))
@ -2221,7 +2225,6 @@
(call $emitSub) (call $emitSub)
(call $emitSetLocal (i32.sub (global.get $currentLocal) (i32.const 1))) (call $emitSetLocal (i32.sub (global.get $currentLocal) (i32.const 1)))
(call $emitBlock)
(call $emitLoop) (call $emitLoop)
(local.get $tos)) (local.get $tos))