Fix the signum of compare operations in the text format.

This commit is contained in:
Volker 2018-08-14 21:28:17 +02:00
parent a07e7fe4b1
commit 658b859b62
6 changed files with 28 additions and 24 deletions

View File

@ -605,7 +605,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
break;
}
break;
case lt_s:
case lt:
switch( valueType ) {
case i32:
op = I32_LT_S;
@ -621,7 +621,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
break;
}
break;
case le_s:
case le:
switch( valueType ) {
case i32:
op = I32_LE_S;
@ -637,7 +637,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
break;
}
break;
case ge_s:
case ge:
switch( valueType ) {
case i32:
op = I32_GE_S;

View File

@ -646,16 +646,16 @@ class BranchManger {
newOp = NumericOperator.eq;
break;
case gt:
newOp = NumericOperator.le_s;
newOp = NumericOperator.le;
break;
case lt_s:
newOp = NumericOperator.ge_s;
case lt:
newOp = NumericOperator.ge;
break;
case le_s:
case le:
newOp = NumericOperator.gt;
break;
case ge_s:
newOp = NumericOperator.lt_s;
case ge:
newOp = NumericOperator.lt;
break;
default:
throw new WasmException( "Not a compare operation: " + instr.numOp, null, lineNumber );

View File

@ -581,16 +581,16 @@ public class ModuleGenerator {
opIfCondition( NumericOperator.ne, byteCode, codePos );
break;
case 155: // iflt
opIfCondition( NumericOperator.lt_s, byteCode, codePos );
opIfCondition( NumericOperator.lt, byteCode, codePos );
break;
case 156: // ifge
opIfCondition( NumericOperator.ge_s, byteCode, codePos );
opIfCondition( NumericOperator.ge, byteCode, codePos );
break;
case 157: // ifgt
opIfCondition( NumericOperator.gt, byteCode, codePos );
break;
case 158: // ifle
opIfCondition( NumericOperator.le_s, byteCode, codePos );
opIfCondition( NumericOperator.le, byteCode, codePos );
break;
case 159: // if_icmpeq
opIfCompareCondition( NumericOperator.eq, byteCode, codePos );
@ -599,16 +599,16 @@ public class ModuleGenerator {
opIfCompareCondition( NumericOperator.ne, byteCode, codePos );
break;
case 161: // if_icmplt
opIfCompareCondition( NumericOperator.lt_s, byteCode, codePos );
opIfCompareCondition( NumericOperator.lt, byteCode, codePos );
break;
case 162: // if_icmpge
opIfCompareCondition( NumericOperator.ge_s, byteCode, codePos );
opIfCompareCondition( NumericOperator.ge, byteCode, codePos );
break;
case 163: // if_icmpgt
opIfCompareCondition( NumericOperator.gt, byteCode, codePos );
break;
case 164: // if_icmple
opIfCompareCondition( NumericOperator.le_s, byteCode, codePos );
opIfCompareCondition( NumericOperator.le, byteCode, codePos );
break;
//TODO case 165: // if_acmpeq
//TODO case 166: // if_acmpne
@ -903,16 +903,16 @@ public class ModuleGenerator {
numOp = NumericOperator.ne;
break;
case 155: // iflt
numOp = NumericOperator.lt_s;
numOp = NumericOperator.lt;
break;
case 156: // ifge
numOp = NumericOperator.ge_s;
numOp = NumericOperator.ge;
break;
case 157: // ifgt
numOp = NumericOperator.gt;
break;
case 158: // ifle
numOp = NumericOperator.le_s;
numOp = NumericOperator.le;
break;
default:
throw new WasmException( "Unexpected compare sub operation: " + nextOp, null, -1 );

View File

@ -34,7 +34,7 @@ public enum NumericOperator {
eq,
ne,
gt,
lt_s,
le_s,
ge_s,
lt,
le,
ge,
}

View File

@ -64,9 +64,9 @@ class WasmNumericInstruction extends WasmInstruction {
case eq:
case ne:
case gt:
case lt_s:
case le_s:
case ge_s:
case lt:
case le:
case ge:
return null;
default:
return valueType;

View File

@ -194,6 +194,10 @@ public class TextModuleWriter extends ModuleWriter {
switch( numOp ) {
case div:
case rem:
case gt:
case lt:
case le:
case ge:
op += "_s";
}
}