From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- js/src/jit-test/tests/wasm/float.js | 103 ++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 js/src/jit-test/tests/wasm/float.js (limited to 'js/src/jit-test/tests/wasm/float.js') diff --git a/js/src/jit-test/tests/wasm/float.js b/js/src/jit-test/tests/wasm/float.js new file mode 100644 index 0000000000..fe86ac1801 --- /dev/null +++ b/js/src/jit-test/tests/wasm/float.js @@ -0,0 +1,103 @@ +wasmFullPass('(module (func (result f32) (f32.const -1)) (export "run" (func 0)))', -1); +wasmFullPass('(module (func (result f32) (f32.const 1)) (export "run" (func 0)))', 1); +wasmFullPass('(module (func (result f64) (f64.const -2)) (export "run" (func 0)))', -2); +wasmFullPass('(module (func (result f64) (f64.const 2)) (export "run" (func 0)))', 2); +wasmFullPass('(module (func (result f64) (f64.const 4294967296)) (export "run" (func 0)))', 4294967296); +wasmFullPass('(module (func (result f32) (f32.const 1.5)) (export "run" (func 0)))', 1.5); +wasmFullPass('(module (func (result f64) (f64.const 2.5)) (export "run" (func 0)))', 2.5); +wasmFullPass('(module (func (result f64) (f64.const 10e2)) (export "run" (func 0)))', 10e2); +wasmFullPass('(module (func (result f32) (f32.const 10e2)) (export "run" (func 0)))', 10e2); +wasmFullPass('(module (func (result f64) (f64.const -0x8000000000000000)) (export "run" (func 0)))', -0x8000000000000000); +wasmFullPass('(module (func (result f64) (f64.const -9223372036854775808)) (export "run" (func 0)))', -9223372036854775808); +wasmFullPass('(module (func (result f64) (f64.const 1797693134862315708145274e284)) (export "run" (func 0)))', 1797693134862315708145274e284); + +function testUnary(type, opcode, op, expect) { + wasmFullPass('(module (func (param ' + type + ') (result ' + type + ') (' + type + '.' + opcode + ' (local.get 0))) (export "run" (func 0)))', + expect, + {}, + op); +} + +function testBinary(type, opcode, lhs, rhs, expect) { + wasmFullPass('(module (func (param ' + type + ') (param ' + type + ') (result ' + type + ') (' + type + '.' + opcode + ' (local.get 0) (local.get 1))) (export "run" (func 0)))', + expect, + {}, + lhs, rhs); +} + +function testComparison(type, opcode, lhs, rhs, expect) { + wasmFullPass('(module (func (param ' + type + ') (param ' + type + ') (result i32) (' + type + '.' + opcode + ' (local.get 0) (local.get 1))) (export "run" (func 0)))', + expect, + {}, + lhs, rhs); +} + +testUnary('f32', 'abs', -40, 40); +testUnary('f32', 'neg', 40, -40); +testUnary('f32', 'floor', 40.9, 40); +testUnary('f32', 'ceil', 40.1, 41); +testUnary('f32', 'nearest', -41.5, -42); +testUnary('f32', 'trunc', -41.5, -41); +testUnary('f32', 'sqrt', 40, 6.324555397033691); + +testBinary('f32', 'add', 40, 2, 42); +testBinary('f32', 'sub', 40, 2, 38); +testBinary('f32', 'mul', 40, 2, 80); +testBinary('f32', 'div', 40, 3, 13.333333015441895); +testBinary('f32', 'min', 40, 2, 2); +testBinary('f32', 'max', 40, 2, 40); +testBinary('f32', 'copysign', 40, -2, -40); + +testComparison('f32', 'eq', 40, 40, 1); +testComparison('f32', 'ne', 40, 40, 0); +testComparison('f32', 'lt', 40, 40, 0); +testComparison('f32', 'le', 40, 40, 1); +testComparison('f32', 'gt', 40, 40, 0); +testComparison('f32', 'ge', 40, 40, 1); + +testUnary('f64', 'abs', -40, 40); +testUnary('f64', 'neg', 40, -40); +testUnary('f64', 'floor', 40.9, 40); +testUnary('f64', 'ceil', 40.1, 41); +testUnary('f64', 'nearest', -41.5, -42); +testUnary('f64', 'trunc', -41.5, -41); +testUnary('f64', 'sqrt', 40, 6.324555320336759); + +testBinary('f64', 'add', 40, 2, 42); +testBinary('f64', 'sub', 40, 2, 38); +testBinary('f64', 'mul', 40, 2, 80); +testBinary('f64', 'div', 40, 3, 13.333333333333334); +testBinary('f64', 'min', 40, 2, 2); +testBinary('f64', 'max', 40, 2, 40); +testBinary('f64', 'copysign', 40, -2, -40); + +testComparison('f64', 'eq', 40, 40, 1); +testComparison('f64', 'ne', 40, 40, 0); +testComparison('f64', 'lt', 40, 40, 0); +testComparison('f64', 'le', 40, 40, 1); +testComparison('f64', 'gt', 40, 40, 0); +testComparison('f64', 'ge', 40, 40, 1); + +wasmFailValidateText('(module (func (param i32) (result f32) (f32.sqrt (local.get 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (result i32) (f32.sqrt (local.get 0))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (result i32) (f32.sqrt (local.get 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param i32) (result f64) (f64.sqrt (local.get 0))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (result i32) (f64.sqrt (local.get 0))))', mismatchError("f64", "i32")); +wasmFailValidateText('(module (func (param i32) (result i32) (f64.sqrt (local.get 0))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (f32.sqrt (nop))))', /(popping value from empty stack)|(type mismatch: expected f32 but nothing on stack)/); + +wasmFailValidateText('(module (func (param i32) (param f32) (result f32) (f32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param i32) (result f32) (f32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param f32) (result i32) (f32.add (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (param i32) (result i32) (f32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param i32) (param f64) (result f64) (f64.add (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param i32) (result f64) (f64.add (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param f64) (result i32) (f64.add (local.get 0) (local.get 1))))', mismatchError("f64", "i32")); +wasmFailValidateText('(module (func (param i32) (param i32) (result i32) (f64.add (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); + +wasmFailValidateText('(module (func (param i32) (param f32) (result f32) (f32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param i32) (result f32) (f32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param f32) (result f32) (f32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param i32) (param f64) (result f64) (f64.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param i32) (result f64) (f64.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param f64) (result f64) (f64.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); -- cgit v1.2.3