From b23683ff68875a639fbcba2d1491ef68036e247a Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Wed, 28 Mar 2018 20:07:51 +0200 Subject: [PATCH] more if conditions --- .../binary/BinaryModuleWriter.java | 54 +++++++++++++++++-- .../jwebassembly/module/ModuleWriter.java | 9 ++++ .../jwebassembly/module/NumericOperator.java | 2 + 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java index 2e72e7b..0e11080 100644 --- a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java @@ -476,13 +476,61 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod op = I32_GT_S; break; case i64: - op = I64_NE; + op = I64_GT_S; break; case f32: - op = F32_NE; + op = F32_GT; break; case f64: - op = F64_NE; + op = F64_GT; + break; + } + break; + case lt_s: + switch( valueType ) { + case i32: + op = I32_LT_S; + break; + case i64: + op = I64_LT_S; + break; + case f32: + op = F32_LT; + break; + case f64: + op = F64_LT; + break; + } + break; + case le_s: + switch( valueType ) { + case i32: + op = I32_LE_S; + break; + case i64: + op = I64_LE_S; + break; + case f32: + op = F32_LE; + break; + case f64: + op = F64_LE; + break; + } + break; + case ge_s: + switch( valueType ) { + case i32: + op = I32_GE_S; + break; + case i64: + op = I64_GE_S; + break; + case f32: + op = F32_GE; + break; + case f64: + op = F64_GE; break; } break; diff --git a/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java b/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java index 39e9399..25ebe10 100644 --- a/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java @@ -564,6 +564,15 @@ public abstract class ModuleWriter implements Closeable { case 155: // iflt opIfCondition( NumericOperator.gt, byteCode ); break; + case 156: // ifge + opIfCondition( NumericOperator.le_s, byteCode ); + break; + case 157: // ifgt + opIfCondition( NumericOperator.lt_s, byteCode ); + break; + case 158: // ifle + opIfCondition( NumericOperator.ge_s, byteCode ); + break; case 167: // goto byteCode.skip(2); break; diff --git a/src/de/inetsoftware/jwebassembly/module/NumericOperator.java b/src/de/inetsoftware/jwebassembly/module/NumericOperator.java index 3126bfe..3c61a69 100644 --- a/src/de/inetsoftware/jwebassembly/module/NumericOperator.java +++ b/src/de/inetsoftware/jwebassembly/module/NumericOperator.java @@ -34,4 +34,6 @@ public enum NumericOperator { ne, gt, lt_s, + le_s, + ge_s, }