Math.min/max operation

This commit is contained in:
Volker Berlin 2019-07-18 19:21:11 +02:00
parent 03ed725262
commit c2b8505634
5 changed files with 52 additions and 0 deletions

View File

@ -948,6 +948,17 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
default:
}
break;
case min:
switch( valueType ) {
case f32:
op = F32_MIN;
break;
case f64:
op = F64_MIN;
break;
default:
}
break;
case ifnull:
op = REF_ISNULL;
break;

View File

@ -39,6 +39,7 @@ public enum NumericOperator {
le,
ge,
max,
min,
ifnull,
ifnonnull,
ref_eq,

View File

@ -102,6 +102,9 @@ public class WatParser extends WasmCodeBuilder {
case "f32.max":
addNumericInstruction( NumericOperator.max, ValueType.f32, javaCodePos, lineNumber );
break;
case "f32.min":
addNumericInstruction( NumericOperator.min, ValueType.f32, javaCodePos, lineNumber );
break;
case "f32.mul":
addNumericInstruction( NumericOperator.mul, ValueType.f32, javaCodePos, lineNumber );
break;
@ -138,6 +141,9 @@ public class WatParser extends WasmCodeBuilder {
case "f64.max":
addNumericInstruction( NumericOperator.max, ValueType.f64, javaCodePos, lineNumber );
break;
case "f64.min":
addNumericInstruction( NumericOperator.min, ValueType.f64, javaCodePos, lineNumber );
break;
case "f64.mul":
addNumericInstruction( NumericOperator.mul, ValueType.f64, javaCodePos, lineNumber );
break;

View File

@ -166,6 +166,11 @@ public class WatParserTest {
test( "f32.max" );
}
@Test
public void f32_min() throws IOException {
test( "f32.min" );
}
@Test
public void f32_mul() throws IOException {
test( "f32.mul" );
@ -226,6 +231,11 @@ public class WatParserTest {
test( "f64.max" );
}
@Test
public void f64_min() throws IOException {
test( "f64.min" );
}
@Test
public void f64_mul() throws IOException {
test( "f64.mul" );

View File

@ -72,6 +72,10 @@ public class MathAPI extends AbstractBaseTest {
addParam( list, script, "random" );
addParam( list, script, "absF" );
addParam( list, script, "absD" );
addParam( list, script, "maxF" );
addParam( list, script, "maxD" );
addParam( list, script, "minF" );
addParam( list, script, "minD" );
}
rule.setTestParameters( list );
return list;
@ -243,5 +247,25 @@ public class MathAPI extends AbstractBaseTest {
static double absD() {
return Math.abs( -3.8 );
}
@Export
static float maxF() {
return Math.max( -3.8F, 7.5F );
}
@Export
static double maxD() {
return Math.max( -3.8, 7.5 );
}
@Export
static float minF() {
return Math.min( -3.8F, 7.5F );
}
@Export
static double minD() {
return Math.min( -3.8, 7.5 );
}
}
}