diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-12-12 10:21:59 -0500 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-12-12 10:21:59 -0500 |
commit | 22ec2948019182bb7792e66f38e083bbe5b950ef (patch) | |
tree | 4a9db8a30887b41e45dd88459331c6f2b7117cd2 | |
parent | 9918cd1666e5083286d4db6ea96f1d35b6a59a3b (diff) | |
download | binaryen-22ec2948019182bb7792e66f38e083bbe5b950ef.tar.gz binaryen-22ec2948019182bb7792e66f38e083bbe5b950ef.tar.bz2 binaryen-22ec2948019182bb7792e66f38e083bbe5b950ef.zip |
float comparisons and another .s
-rwxr-xr-x | auto_update_tests.py | 2 | ||||
-rwxr-xr-x | check.py | 2 | ||||
-rw-r--r-- | src/s2wasm.h | 14 | ||||
-rw-r--r-- | test/dot_s/comparisons_f32.wast | 255 |
4 files changed, 271 insertions, 2 deletions
diff --git a/auto_update_tests.py b/auto_update_tests.py index cfb2d9e63..9ea22dac7 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', 'call.s', 'cfg-stackify.s']: +for s in ['minimal.s', 'basics.s', 'call.s', 'cfg-stackify.s', 'comparisons_f32.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', 'call.s', 'cfg-stackify.s']: +for s in ['minimal.s', 'basics.s', 'call.s', 'cfg-stackify.s', 'comparisons_f32.s']: print '..', s wasm = s.replace('.s', '.wast') full = os.path.join('test', 'dot_s', s) diff --git a/src/s2wasm.h b/src/s2wasm.h index 1fb61f1f5..e4b7ce841 100644 --- a/src/s2wasm.h +++ b/src/s2wasm.h @@ -396,6 +396,8 @@ private: else if (match("gt_u")) makeBinary(BinaryOp::GtU, i32); else if (match("ge_s")) makeBinary(BinaryOp::GeS, i32); else if (match("ge_u")) makeBinary(BinaryOp::GeU, i32); + else if (match("gt")) makeBinary(BinaryOp::Gt, i32); + else if (match("ge")) makeBinary(BinaryOp::Ge, i32); else abort_on("i32.g"); break; } @@ -405,6 +407,8 @@ private: else if (match("le_s")) makeBinary(BinaryOp::LeS, i32); else if (match("le_u")) makeBinary(BinaryOp::LeU, i32); else if (match("load")) makeLoad(type); + else if (match("lt")) makeBinary(BinaryOp::Lt, i32); + else if (match("le")) makeBinary(BinaryOp::Le, i32); else abort_on("i32.g"); break; } @@ -418,6 +422,11 @@ private: else abort_on("i32.n"); break; } + case 'o': { + if (match("or")) makeBinary(BinaryOp::Or, type); + else abort_on("i32.n"); + break; + } case 'r': { if (match("rem_s")) makeBinary(BinaryOp::RemS, type); else if (match("rem_u")) makeBinary(BinaryOp::RemU, type); @@ -432,6 +441,11 @@ private: else abort_on("i32.s"); break; } + case 'x': { + if (match("or")) makeBinary(BinaryOp::Xor, type); + else abort_on("i32.n"); + break; + } default: abort_on("i32.?"); } }; diff --git a/test/dot_s/comparisons_f32.wast b/test/dot_s/comparisons_f32.wast new file mode 100644 index 000000000..21a7293c0 --- /dev/null +++ b/test/dot_s/comparisons_f32.wast @@ -0,0 +1,255 @@ +(module + (memory 0 4294967295) + (func $ord_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.and + (f32.eq + (get_local $$0) + (get_local $$0) + ) + (f32.eq + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + (func $uno_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.or + (f32.ne + (get_local $$0) + (get_local $$0) + ) + (f32.ne + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + (func $oeq_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (f32.eq + (get_local $$1) + (get_local $$0) + ) + ) + ) + ) + ) + (func $une_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (f32.ne + (get_local $$1) + (get_local $$0) + ) + ) + ) + ) + ) + (func $olt_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (f32.lt + (get_local $$1) + (get_local $$0) + ) + ) + ) + ) + ) + (func $ole_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (f32.le + (get_local $$1) + (get_local $$0) + ) + ) + ) + ) + ) + (func $ogt_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (f32.gt + (get_local $$1) + (get_local $$0) + ) + ) + ) + ) + ) + (func $oge_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (f32.ge + (get_local $$1) + (get_local $$0) + ) + ) + ) + ) + ) + (func $ueq_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.or + (f32.eq + (get_local $$1) + (get_local $$0) + ) + (i32.or + (f32.ne + (get_local $$0) + (get_local $$0) + ) + (f32.ne + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + ) + (func $one_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.and + (f32.ne + (get_local $$1) + (get_local $$0) + ) + (i32.and + (f32.eq + (get_local $$0) + (get_local $$0) + ) + (f32.eq + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + ) + (func $ult_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.or + (f32.lt + (get_local $$1) + (get_local $$0) + ) + (i32.or + (f32.ne + (get_local $$0) + (get_local $$0) + ) + (f32.ne + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + ) + (func $ule_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.or + (f32.le + (get_local $$1) + (get_local $$0) + ) + (i32.or + (f32.ne + (get_local $$0) + (get_local $$0) + ) + (f32.ne + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + ) + (func $ugt_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.or + (f32.gt + (get_local $$1) + (get_local $$0) + ) + (i32.or + (f32.ne + (get_local $$0) + (get_local $$0) + ) + (f32.ne + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + ) + (func $uge_f32 (param $$0 f32) (param $$1 f32) (result i32) + (block $fake_return_waka123 + (block + (br $fake_return_waka123 + (i32.or + (f32.ge + (get_local $$1) + (get_local $$0) + ) + (i32.or + (f32.ne + (get_local $$0) + (get_local $$0) + ) + (f32.ne + (get_local $$1) + (get_local $$1) + ) + ) + ) + ) + ) + ) + ) +) |