diff --git a/wipforth.wat b/wipforth.wat index ede59f4..66cf67e 100644 --- a/wipforth.wat +++ b/wipforth.wat @@ -542,20 +542,25 @@ call $next) (func $copy (local $src i32) (local $dst i32) (local $n i32) - call $pop local.tee $dst - call $pop local.tee $src - call $pop local.tee $n + call $pop local.set $dst + call $pop local.set $src + call $pop local.set $n - block $done (param i32 i32 i32) - loop $loop (param i32 i32 i32) (result i32 i32 i32) + block $done + loop $loop + local.get $n i32.eqz br_if $done + + local.get $dst + local.get $src i32.load8_u i32.store8 - local.get $dst i32.const 1 i32.add local.tee $dst - local.get $src i32.const 1 i32.add local.tee $src - local.get $n i32.const 1 i32.sub local.tee $n - br $loop + + local.get $dst i32.const 1 i32.add local.set $dst + local.get $src i32.const 1 i32.add local.set $src + local.get $n i32.const 1 i32.sub local.set $n + + br $loop end - drop drop drop end call $next)