Add WASM support for i64 simple opcodes.
[WebKit-https.git] / Source / JavaScriptCore / wasm / WASMB3IRGenerator.cpp
index f9cbc68..857ff15 100644 (file)
@@ -41,7 +41,7 @@ namespace WASM {
 
 using namespace B3;
 
-inline JSC::B3::Opcode toB3Op(WASMBinaryOpType op)
+inline B3::Opcode toB3Op(WASMBinaryOpType op)
 {
     switch (op) {
 #define CREATE_CASE(name, op, b3op) case WASMBinaryOpType::name: return b3op;
@@ -50,6 +50,15 @@ inline JSC::B3::Opcode toB3Op(WASMBinaryOpType op)
     }
 }
 
+inline B3::Opcode toB3Op(WASMUnaryOpType op)
+{
+    switch (op) {
+#define CREATE_CASE(name, op, b3op) case WASMUnaryOpType::name: return b3op;
+    FOR_EACH_WASM_UNARY_OP(CREATE_CASE)
+#undef CREATE_CASE
+    }
+}
+
 class B3IRGenerator {
 public:
     typedef Value* ExpressionType;
@@ -60,6 +69,7 @@ public:
     ExpressionType addConstant(WASMValueType, uint64_t);
 
     bool WARN_UNUSED_RETURN binaryOp(WASMBinaryOpType, ExpressionType left, ExpressionType right, ExpressionType& result);
+    bool WARN_UNUSED_RETURN unaryOp(WASMUnaryOpType, ExpressionType arg, ExpressionType& result);
 
     bool WARN_UNUSED_RETURN addBlock();
     bool WARN_UNUSED_RETURN endBlock(Vector<ExpressionType>& expressionStack);
@@ -89,6 +99,12 @@ void B3IRGenerator::addLocal(WASMValueType, uint32_t)
     // TODO: Add locals.
 }
 
+bool B3IRGenerator::unaryOp(WASMUnaryOpType op, ExpressionType arg, ExpressionType& result)
+{
+    result = m_currentBlock->appendNew<Value>(m_proc, toB3Op(op), Origin(), arg);
+    return true;
+}
+
 bool B3IRGenerator::binaryOp(WASMBinaryOpType op, ExpressionType left, ExpressionType right, ExpressionType& result)
 {
     result = m_currentBlock->appendNew<Value>(m_proc, toB3Op(op), Origin(), left, right);