| (module | |
| (type $0 (func (param i32) (result i32))) | |
| (memory $0 1 100) | |
| (export "sieve" (func $sieve)) | |
| (func $sieve (param $0 i32) (result i32) | |
| (local $1 i32) | |
| (if | |
| (i32.lt_u | |
| (i32.mul | |
| (memory.size) | |
| (i32.const 65536) | |
| ) | |
| (local.get $0) | |
| ) | |
| (then | |
| (drop | |
| (memory.grow | |
| (i32.sub | |
| (i32.div_u | |
| (i32.add | |
| (local.get $0) | |
| (i32.const 65535) | |
| ) | |
| (i32.const 65536) | |
| ) | |
| (memory.size) | |
| ) | |
| ) | |
| ) | |
| ) | |
| ) | |
| (local.set $1 | |
| (i32.const 0) | |
| ) | |
| (loop $clear | |
| (i32.store8 | |
| (local.get $1) | |
| (i32.const 0) | |
| ) | |
| (local.set $1 | |
| (i32.add | |
| (local.get $1) | |
| (i32.const 1) | |
| ) | |
| ) | |
| (br_if $clear | |
| (i32.eq | |
| (local.get $1) | |
| (local.get $0) | |
| ) | |
| ) | |
| ) | |
| (return | |
| (local.get $0) | |
| ) | |
| ) | |
| ) | |
| optimized: | |
| (module | |
| (type $0 (func (param i32) (result i32))) | |
| (memory $0 1 100) | |
| (export "sieve" (func $sieve)) | |
| (func $sieve (param $0 i32) (result i32) | |
| (local $1 i32) | |
| (if | |
| (i32.lt_u | |
| (i32.shl | |
| (memory.size) | |
| (i32.const 16) | |
| ) | |
| (local.get $0) | |
| ) | |
| (then | |
| (drop | |
| (memory.grow | |
| (i32.sub | |
| (i32.shr_u | |
| (i32.add | |
| (local.get $0) | |
| (i32.const 65535) | |
| ) | |
| (i32.const 16) | |
| ) | |
| (memory.size) | |
| ) | |
| ) | |
| ) | |
| ) | |
| ) | |
| (loop $clear | |
| (i32.store8 | |
| (local.get $1) | |
| (i32.const 0) | |
| ) | |
| (br_if $clear | |
| (i32.eq | |
| (local.tee $1 | |
| (i32.add | |
| (local.get $1) | |
| (i32.const 1) | |
| ) | |
| ) | |
| (local.get $0) | |
| ) | |
| ) | |
| ) | |
| (local.get $0) | |
| ) | |
| ) | |