summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-12 10:21:59 -0500
committerAlon Zakai <alonzakai@gmail.com>2015-12-12 10:21:59 -0500
commit22ec2948019182bb7792e66f38e083bbe5b950ef (patch)
tree4a9db8a30887b41e45dd88459331c6f2b7117cd2
parent9918cd1666e5083286d4db6ea96f1d35b6a59a3b (diff)
downloadbinaryen-22ec2948019182bb7792e66f38e083bbe5b950ef.tar.gz
binaryen-22ec2948019182bb7792e66f38e083bbe5b950ef.tar.bz2
binaryen-22ec2948019182bb7792e66f38e083bbe5b950ef.zip
float comparisons and another .s
-rwxr-xr-xauto_update_tests.py2
-rwxr-xr-xcheck.py2
-rw-r--r--src/s2wasm.h14
-rw-r--r--test/dot_s/comparisons_f32.wast255
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)
diff --git a/check.py b/check.py
index 9386e6222..8388d5343 100755
--- a/check.py
+++ b/check.py
@@ -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)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)