diff options
-rwxr-xr-x | auto_update_tests.py | 2 | ||||
-rwxr-xr-x | check.py | 2 | ||||
-rw-r--r-- | test/dot_s/memops.s | 94 | ||||
-rw-r--r-- | test/dot_s/memops.wast | 222 |
4 files changed, 318 insertions, 2 deletions
diff --git a/auto_update_tests.py b/auto_update_tests.py index b4355329b..e74ed9d35 100755 --- a/auto_update_tests.py +++ b/auto_update_tests.py @@ -32,7 +32,7 @@ for t in sorted(os.listdir('test')): open(t, 'w').write(actual) -for s in ['minimal.s', 'basics.s', 'asm_const.s', 'call.s', 'conv.s', 'fast-isel.s', 'i64.s', 'load.s', 'phi.s', 'select.s', 'unreachable.s', 'cpus.s', 'frem.s', 'immediates.s', 'load-store-i1.s', 'reg-stackify.s', 'unused-argument.s', 'comparisons_f32.s', 'dead-vreg.s', 'func.s', 'import.s', 'memory-addr32.s', 'store-results.s', 'varargs.s', 'comparisons_f64.s', 'exit.s', 'global.s', 'memory-addr64.s', 'returned.s', 'store.s', 'comparisons_i32.s', 'f32.s', 'globl.s', 'legalize.s', 'offset-folding.s', 'return-int32.s', 'store-trunc.s', 'comparisons_i64.s', 'f64.s', 'i32.s', 'load-ext.s', 'permute.s', 'return-void.s', 'signext-zeroext.s', 'cfg-stackify.s', 'switch.s', 'relocation.s']: # TODO: 'inline-asm.s' +for s in ['minimal.s', 'basics.s', 'asm_const.s', 'memops.s', 'call.s', 'conv.s', 'fast-isel.s', 'i64.s', 'load.s', 'phi.s', 'select.s', 'unreachable.s', 'cpus.s', 'frem.s', 'immediates.s', 'load-store-i1.s', 'reg-stackify.s', 'unused-argument.s', 'comparisons_f32.s', 'dead-vreg.s', 'func.s', 'import.s', 'memory-addr32.s', 'store-results.s', 'varargs.s', 'comparisons_f64.s', 'exit.s', 'global.s', 'memory-addr64.s', 'returned.s', 'store.s', 'comparisons_i32.s', 'f32.s', 'globl.s', 'legalize.s', 'offset-folding.s', 'return-int32.s', 'store-trunc.s', 'comparisons_i64.s', 'f64.s', 'i32.s', 'load-ext.s', 'permute.s', 'return-void.s', 'signext-zeroext.s', 'cfg-stackify.s', 'switch.s', 'relocation.s']: # TODO: 'inline-asm.s' print '..', s wasm = s.replace('.s', '.wast') full = os.path.join('test', 'dot_s', s) @@ -214,7 +214,7 @@ for t in spec_tests: print '\n[ checking .s testcases... ]\n' -for s in ['minimal.s', 'basics.s', 'asm_const.s', 'call.s', 'conv.s', 'fast-isel.s', 'i64.s', 'load.s', 'phi.s', 'select.s', 'unreachable.s', 'cpus.s', 'frem.s', 'immediates.s', 'load-store-i1.s', 'reg-stackify.s', 'unused-argument.s', 'comparisons_f32.s', 'dead-vreg.s', 'func.s', 'import.s', 'memory-addr32.s', 'store-results.s', 'varargs.s', 'comparisons_f64.s', 'exit.s', 'global.s', 'memory-addr64.s', 'returned.s', 'store.s', 'comparisons_i32.s', 'f32.s', 'globl.s', 'legalize.s', 'offset-folding.s', 'return-int32.s', 'store-trunc.s', 'comparisons_i64.s', 'f64.s', 'i32.s', 'load-ext.s', 'permute.s', 'return-void.s', 'signext-zeroext.s', 'cfg-stackify.s', 'switch.s', 'relocation.s']: # TODO: 'inline-asm.s' +for s in ['minimal.s', 'basics.s', 'asm_const.s', 'memops.s', 'call.s', 'conv.s', 'fast-isel.s', 'i64.s', 'load.s', 'phi.s', 'select.s', 'unreachable.s', 'cpus.s', 'frem.s', 'immediates.s', 'load-store-i1.s', 'reg-stackify.s', 'unused-argument.s', 'comparisons_f32.s', 'dead-vreg.s', 'func.s', 'import.s', 'memory-addr32.s', 'store-results.s', 'varargs.s', 'comparisons_f64.s', 'exit.s', 'global.s', 'memory-addr64.s', 'returned.s', 'store.s', 'comparisons_i32.s', 'f32.s', 'globl.s', 'legalize.s', 'offset-folding.s', 'return-int32.s', 'store-trunc.s', 'comparisons_i64.s', 'f64.s', 'i32.s', 'load-ext.s', 'permute.s', 'return-void.s', 'signext-zeroext.s', 'cfg-stackify.s', 'switch.s', 'relocation.s']: # TODO: 'inline-asm.s' print '..', s wasm = s.replace('.s', '.wast') full = os.path.join('test', 'dot_s', s) diff --git a/test/dot_s/memops.s b/test/dot_s/memops.s new file mode 100644 index 000000000..cf8d1db38 --- /dev/null +++ b/test/dot_s/memops.s @@ -0,0 +1,94 @@ + .text + .file "/tmp/tmpG0LbqO/a.out.bc" + .type _Z6reporti,@function +_Z6reporti: # @_Z6reporti + .param i32 +# BB#0: + i32.const $push0=, 8 + i32.store $discard=, 0($pop0), $0 + i32.const $push1=, .str + call emscripten_asm_const, $pop1 + return +func_end0: + .size _Z6reporti, func_end0-_Z6reporti + + .globl main + .type main,@function +main: # @main + .result i32 + .local i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 # XXX this was 1 short in the backend output, an extra one was added manually +# BB#0: + i32.const $7=, __stack_pointer + i32.load $7=, 0($7) + i32.const $8=, 1048576 + i32.sub $12=, $7, $8 + i32.const $8=, __stack_pointer + i32.store $12=, 0($8), $12 + i32.const $1=, 0 + copy_local $0=, $1 + copy_local $6=, $1 +BB1_1: # %.preheader1 + # =>This Loop Header: Depth=1 + # Child Loop BB1_2 Depth 2 + # Child Loop BB1_3 Depth 2 + loop BB1_5 + copy_local $4=, $1 +BB1_2: # Parent Loop BB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop BB1_3 + i32.const $10=, 0 + i32.add $10=, $12, $10 + i32.add $push1=, $10, $4 + i32.add $push0=, $6, $4 + i32.store8 $discard=, 0($pop1), $pop0 + i32.const $2=, 1 + i32.add $4=, $4, $2 + i32.const $3=, 1048576 + i32.ne $push2=, $4, $3 + copy_local $5=, $1 + br_if $pop2, BB1_2 +BB1_3: # %.preheader + # Parent Loop BB1_1 Depth=1 + # => This Inner Loop Header: Depth=2 + loop BB1_4 + i32.const $11=, 0 + i32.add $11=, $12, $11 + i32.add $push3=, $11, $5 + i32.load8_u $push4=, 0($pop3) + i32.and $push5=, $pop4, $2 + i32.add $6=, $pop5, $6 + i32.add $5=, $5, $2 + i32.ne $push6=, $5, $3 + br_if $pop6, BB1_3 +BB1_4: # in Loop: Header=BB1_1 Depth=1 + i32.const $push7=, 3 + i32.mul $push8=, $6, $pop7 + i32.const $push9=, 5 + i32.div_s $push10=, $6, $pop9 + i32.add $push11=, $pop8, $pop10 + i32.const $push12=, 17 + i32.add $push13=, $pop11, $pop12 + i32.const $push14=, 65535 + i32.and $6=, $pop13, $pop14 + i32.add $0=, $0, $2 + i32.const $push15=, 100 + i32.ne $push16=, $0, $pop15 + br_if $pop16, BB1_1 +BB1_5: + call _Z6reporti, $6 + i32.const $push17=, 0 + i32.const $9=, 1048576 + i32.add $12=, $12, $9 + i32.const $9=, __stack_pointer + i32.store $12=, 0($9), $12 + return $pop17 +func_end1: + .size main, func_end1-main + + .type .str,@object # @.str + .data +.str: + .asciz "{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }" + .size .str, 51 + + diff --git a/test/dot_s/memops.wast b/test/dot_s/memops.wast new file mode 100644 index 000000000..61926bd18 --- /dev/null +++ b/test/dot_s/memops.wast @@ -0,0 +1,222 @@ +(module + (memory 0 4294967295 (segment 16 "{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }\00")) + (import $_emscripten_asm_const_vi "env" "_emscripten_asm_const_vi") + (export "_Z6reporti" $_Z6reporti) + (export "main" $main) + (func $_Z6reporti (param $$0 i32) + (block $fake_return_waka123 + (block + (i32.store align=4 + (i32.const 8) + (get_local $$0) + ) + (call_import $_emscripten_asm_const_vi + (i32.const 0) + ) + (br $fake_return_waka123) + ) + ) + ) + (func $main (result i32) + (local $$0 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$4 i32) + (local $$5 i32) + (local $$6 i32) + (local $$7 i32) + (local $$8 i32) + (local $$9 i32) + (local $$10 i32) + (local $$11 i32) + (local $$12 i32) + (block $fake_return_waka123 + (block + (set_local $$7 + (i32.const 0) + ) + (set_local $$7 + (i32.load align=4 + (get_local $$7) + ) + ) + (set_local $$8 + (i32.const 1048576) + ) + (set_local $$12 + (i32.sub + (get_local $$7) + (get_local $$8) + ) + ) + (set_local $$8 + (i32.const 0) + ) + (set_local $$12 + (i32.store align=4 + (get_local $$8) + (get_local $$12) + ) + ) + (set_local $$1 + (i32.const 0) + ) + (set_local $$0 + (get_local $$1) + ) + (set_local $$6 + (get_local $$1) + ) + (loop $BB1_5 $BB1_1 + (block + (set_local $$4 + (get_local $$1) + ) + (loop $BB1_3 $BB1_2 + (block + (set_local $$10 + (i32.const 0) + ) + (set_local $$10 + (i32.add + (get_local $$12) + (get_local $$10) + ) + ) + (i32.store align=8 + (i32.add + (get_local $$10) + (get_local $$4) + ) + (i32.add + (get_local $$6) + (get_local $$4) + ) + ) + (set_local $$2 + (i32.const 1) + ) + (set_local $$4 + (i32.add + (get_local $$4) + (get_local $$2) + ) + ) + (set_local $$3 + (i32.const 1048576) + ) + (set_local $$5 + (get_local $$1) + ) + (br_if + (i32.ne + (get_local $$4) + (get_local $$3) + ) + $BB1_2 + ) + ) + ) + (loop $BB1_4 $BB1_3 + (block + (set_local $$11 + (i32.const 0) + ) + (set_local $$11 + (i32.add + (get_local $$12) + (get_local $$11) + ) + ) + (set_local $$6 + (i32.add + (i32.and + (i32.load align=8 + (i32.add + (get_local $$11) + (get_local $$5) + ) + ) + (get_local $$2) + ) + (get_local $$6) + ) + ) + (set_local $$5 + (i32.add + (get_local $$5) + (get_local $$2) + ) + ) + (br_if + (i32.ne + (get_local $$5) + (get_local $$3) + ) + $BB1_3 + ) + ) + ) + (set_local $$6 + (i32.and + (i32.add + (i32.add + (i32.mul + (get_local $$6) + (i32.const 3) + ) + (i32.div_s + (get_local $$6) + (i32.const 5) + ) + ) + (i32.const 17) + ) + (i32.const 65535) + ) + ) + (set_local $$0 + (i32.add + (get_local $$0) + (get_local $$2) + ) + ) + (br_if + (i32.ne + (get_local $$0) + (i32.const 100) + ) + $BB1_1 + ) + ) + ) + (call $_Z6reporti + (get_local $$6) + ) + (set_local $$9 + (i32.const 1048576) + ) + (set_local $$12 + (i32.add + (get_local $$12) + (get_local $$9) + ) + ) + (set_local $$9 + (i32.const 0) + ) + (set_local $$12 + (i32.store align=4 + (get_local $$9) + (get_local $$12) + ) + ) + (br $fake_return_waka123 + (i32.const 0) + ) + ) + ) + ) +) +; METADATA: { "asmConsts": {"0": ["{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }", ["vi"]]} }
\ No newline at end of file |