From 8d7ea08f64b4171bbc7b91e1fca866755082eb73 Mon Sep 17 00:00:00 2001
From: Volker Berlin <volker.berlin@googlemail.com>
Date: Sun, 25 Mar 2018 21:06:18 +0200
Subject: [PATCH] implements byte code ifne

---
 .../jwebassembly/binary/BinaryModuleWriter.java   |  2 ++
 .../jwebassembly/module/ModuleWriter.java         |  3 +++
 .../runtime/ControlFlowOperators.java             | 15 +++++++++++++--
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java
index 0533e45..822a04d 100644
--- a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java
+++ b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java
@@ -453,6 +453,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
                         op = F64_EQ;
                         break;
                 }
+                break;
             case ne:
                 switch( valueType ) {
                     case i32:
@@ -468,6 +469,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
                         op = F64_NE;
                         break;
                 }
+                break;
         }
         if( op == 0 ) {
             throw new Error( valueType + "." + numOp );
diff --git a/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java b/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java
index 8742036..c635e5a 100644
--- a/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java
+++ b/src/de/inetsoftware/jwebassembly/module/ModuleWriter.java
@@ -499,6 +499,9 @@ public abstract class ModuleWriter implements Closeable {
                     case 153: // ifeq
                         opIfCondition( NumericOperator.ne, byteCode );
                         break;
+                    case 154: // ifne
+                        opIfCondition( NumericOperator.eq, byteCode );
+                        break;
                     case 167: // goto
                         int baseCodePosition = byteCode.getCodePosition() - 1;
                         int offset = byteCode.readUnsignedShort();
diff --git a/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java b/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java
index 481dfcf..0c24bd8 100644
--- a/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java
+++ b/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java
@@ -24,7 +24,8 @@ public class ControlFlowOperators extends AbstractBaseTest {
         ArrayList<Object[]> list = new ArrayList<>();
         for( ScriptEngine[] val : ScriptEngine.testParams() ) {
             ScriptEngine script = val[0];
-            addParam( list, script, "ifThenElse_Int0" );
+            addParam( list, script, "ifeq" );
+            addParam( list, script, "ifne" );
             addParam( list, script, "forLoop" );
         }
         return list;
@@ -33,7 +34,7 @@ public class ControlFlowOperators extends AbstractBaseTest {
     static class TestClass {
 
         @Export
-        static int ifThenElse_Int0() {
+        static int ifeq() {
             int condition = 0;
             if( condition != 0 ) {
                 return 13;
@@ -42,6 +43,16 @@ public class ControlFlowOperators extends AbstractBaseTest {
             }
         }
 
+        @Export
+        static int ifne() {
+            int condition = 3;
+            if( condition == 0 ) {
+                return 13;
+            } else {
+                return 76;
+            }
+        }
+
         @Export
         static int forLoop() {
             int a = 0;