diff --git a/CMakeLists.txt b/CMakeLists.txt index e07abb71..af117b82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ cmake_minimum_required (VERSION 3.12) project(SOMpp LANGUAGES CXX) set(CMAKE_PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(SRC_DIR "${ROOT_DIR}/src") diff --git a/SOM.xcodeproj/project.pbxproj b/SOM.xcodeproj/project.pbxproj index 362003d2..d297e7e1 100644 --- a/SOM.xcodeproj/project.pbxproj +++ b/SOM.xcodeproj/project.pbxproj @@ -1123,7 +1123,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ADDRESS_SANITIZER_CONTAINER_OVERFLOW = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -1136,7 +1136,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c17; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1180,7 +1180,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ADDRESS_SANITIZER_CONTAINER_OVERFLOW = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -1195,7 +1195,7 @@ DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c17; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -1232,6 +1232,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; @@ -1255,6 +1256,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = c17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -1279,6 +1281,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; @@ -1301,6 +1304,7 @@ DEAD_CODE_STRIPPING = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = c17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; diff --git a/src/interpreter/Interpreter.cpp b/src/interpreter/Interpreter.cpp index 30d1ebb9..7cde1395 100644 --- a/src/interpreter/Interpreter.cpp +++ b/src/interpreter/Interpreter.cpp @@ -65,27 +65,617 @@ VMMethod* Interpreter::method = nullptr; size_t Interpreter::bytecodeIndexGlobal; uint8_t* Interpreter::currentBytecodes; -vm_oop_t Interpreter::StartAndPrintBytecodes() { +template +vm_oop_t Interpreter::Start() { #define PROLOGUE(bcCount) \ { \ - disassembleMethod(); \ + if constexpr (PrintBytecodes) { \ + disassembleMethod(); \ + } \ bytecodeIndexGlobal += (bcCount); \ } -#define HACK_INLINE_START -#include "InterpreterLoop.h" -#undef HACK_INLINE_START + + // initialization + method = GetMethod(); + currentBytecodes = GetBytecodes(); + + void* loopTargets[] = {&&LABEL_BC_HALT, + &&LABEL_BC_DUP, + &&LABEL_BC_DUP_SECOND, + &&LABEL_BC_PUSH_LOCAL, + &&LABEL_BC_PUSH_LOCAL_0, + &&LABEL_BC_PUSH_LOCAL_1, + &&LABEL_BC_PUSH_LOCAL_2, + &&LABEL_BC_PUSH_ARGUMENT, + &&LABEL_BC_PUSH_SELF, + &&LABEL_BC_PUSH_ARG_1, + &&LABEL_BC_PUSH_ARG_2, + &&LABEL_BC_PUSH_FIELD, + &&LABEL_BC_PUSH_FIELD_0, + &&LABEL_BC_PUSH_FIELD_1, + &&LABEL_BC_PUSH_BLOCK, + &&LABEL_BC_PUSH_CONSTANT, + &&LABEL_BC_PUSH_CONSTANT_0, + &&LABEL_BC_PUSH_CONSTANT_1, + &&LABEL_BC_PUSH_CONSTANT_2, + &&LABEL_BC_PUSH_0, + &&LABEL_BC_PUSH_1, + &&LABEL_BC_PUSH_NIL, + &&LABEL_BC_PUSH_GLOBAL, + &&LABEL_BC_POP, + &&LABEL_BC_POP_LOCAL, + &&LABEL_BC_POP_LOCAL_0, + &&LABEL_BC_POP_LOCAL_1, + &&LABEL_BC_POP_LOCAL_2, + &&LABEL_BC_POP_ARGUMENT, + &&LABEL_BC_POP_FIELD, + &&LABEL_BC_POP_FIELD_0, + &&LABEL_BC_POP_FIELD_1, + &&LABEL_BC_SEND, + &&LABEL_BC_SEND_1, + &&LABEL_BC_SUPER_SEND, + &&LABEL_BC_RETURN_LOCAL, + &&LABEL_BC_RETURN_NON_LOCAL, + &&LABEL_BC_RETURN_SELF, + &&LABEL_BC_RETURN_FIELD_0, + &&LABEL_BC_RETURN_FIELD_1, + &&LABEL_BC_RETURN_FIELD_2, + &&LABEL_BC_INC, + &&LABEL_BC_DEC, + &&LABEL_BC_INC_FIELD, + &&LABEL_BC_INC_FIELD_PUSH, + &&LABEL_BC_JUMP, + &&LABEL_BC_JUMP_ON_FALSE_POP, + &&LABEL_BC_JUMP_ON_TRUE_POP, + &&LABEL_BC_JUMP_ON_FALSE_TOP_NIL, + &&LABEL_BC_JUMP_ON_TRUE_TOP_NIL, + &&LABEL_BC_JUMP_ON_NOT_NIL_POP, + &&LABEL_BC_JUMP_ON_NIL_POP, + &&LABEL_BC_JUMP_ON_NOT_NIL_TOP_TOP, + &&LABEL_BC_JUMP_ON_NIL_TOP_TOP, + &&LABEL_BC_JUMP_IF_GREATER, + &&LABEL_BC_JUMP_BACKWARD, + &&LABEL_BC_JUMP2, + &&LABEL_BC_JUMP2_ON_FALSE_POP, + &&LABEL_BC_JUMP2_ON_TRUE_POP, + &&LABEL_BC_JUMP2_ON_FALSE_TOP_NIL, + &&LABEL_BC_JUMP2_ON_TRUE_TOP_NIL, + &&LABEL_BC_JUMP2_ON_NOT_NIL_POP, + &&LABEL_BC_JUMP2_ON_NIL_POP, + &&LABEL_BC_JUMP2_ON_NOT_NIL_TOP_TOP, + &&LABEL_BC_JUMP2_ON_NIL_TOP_TOP, + &&LABEL_BC_JUMP2_IF_GREATER, + &&LABEL_BC_JUMP2_BACKWARD}; + + goto* loopTargets[currentBytecodes[bytecodeIndexGlobal]]; + + // + // THIS IS THE former interpretation loop +LABEL_BC_HALT: + PROLOGUE(1); + return GetFrame()->GetStackElement(0); // handle the halt bytecode + +LABEL_BC_DUP: + PROLOGUE(1); + doDup(); + DISPATCH_NOGC(); + +LABEL_BC_DUP_SECOND: + PROLOGUE(1); + { + vm_oop_t elem = GetFrame()->GetStackElement(1); + GetFrame()->Push(elem); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_LOCAL: + PROLOGUE(3); + doPushLocal(bytecodeIndexGlobal - 3); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_LOCAL_0: + PROLOGUE(1); + doPushLocalWithIndex(0); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_LOCAL_1: + PROLOGUE(1); + doPushLocalWithIndex(1); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_LOCAL_2: + PROLOGUE(1); + doPushLocalWithIndex(2); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_ARGUMENT: + PROLOGUE(3); + doPushArgument(bytecodeIndexGlobal - 3); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_SELF: + PROLOGUE(1); + { + vm_oop_t argument = GetFrame()->GetArgumentInCurrentContext(0); + GetFrame()->Push(argument); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_ARG_1: + PROLOGUE(1); + { + vm_oop_t argument = GetFrame()->GetArgumentInCurrentContext(1); + GetFrame()->Push(argument); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_ARG_2: + PROLOGUE(1); + { + vm_oop_t argument = GetFrame()->GetArgumentInCurrentContext(2); + GetFrame()->Push(argument); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_FIELD: + PROLOGUE(2); + doPushField(bytecodeIndexGlobal - 2); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_FIELD_0: + PROLOGUE(1); + doPushFieldWithIndex(0); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_FIELD_1: + PROLOGUE(1); + doPushFieldWithIndex(1); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_BLOCK: + PROLOGUE(2); + doPushBlock(bytecodeIndexGlobal - 2); + DISPATCH_GC(); + +LABEL_BC_PUSH_CONSTANT: + PROLOGUE(2); + doPushConstant(bytecodeIndexGlobal - 2); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_CONSTANT_0: + PROLOGUE(1); + { + vm_oop_t constant = method->GetIndexableField(0); + GetFrame()->Push(constant); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_CONSTANT_1: + PROLOGUE(1); + { + vm_oop_t constant = method->GetIndexableField(1); + GetFrame()->Push(constant); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_CONSTANT_2: + PROLOGUE(1); + { + vm_oop_t constant = method->GetIndexableField(2); + GetFrame()->Push(constant); + } + DISPATCH_NOGC(); + +LABEL_BC_PUSH_0: + PROLOGUE(1); + GetFrame()->Push(NEW_INT(0)); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_1: + PROLOGUE(1); + GetFrame()->Push(NEW_INT(1)); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_NIL: + PROLOGUE(1); + GetFrame()->Push(load_ptr(nilObject)); + DISPATCH_NOGC(); + +LABEL_BC_PUSH_GLOBAL: + PROLOGUE(2); + doPushGlobal(bytecodeIndexGlobal - 2); + DISPATCH_GC(); + +LABEL_BC_POP: + PROLOGUE(1); + doPop(); + DISPATCH_NOGC(); + +LABEL_BC_POP_LOCAL: + PROLOGUE(3); + doPopLocal(bytecodeIndexGlobal - 3); + DISPATCH_NOGC(); + +LABEL_BC_POP_LOCAL_0: + PROLOGUE(1); + doPopLocalWithIndex(0); + DISPATCH_NOGC(); + +LABEL_BC_POP_LOCAL_1: + PROLOGUE(1); + doPopLocalWithIndex(1); + DISPATCH_NOGC(); + +LABEL_BC_POP_LOCAL_2: + PROLOGUE(1); + doPopLocalWithIndex(2); + DISPATCH_NOGC(); + +LABEL_BC_POP_ARGUMENT: + PROLOGUE(3); + doPopArgument(bytecodeIndexGlobal - 3); + DISPATCH_NOGC(); + +LABEL_BC_POP_FIELD: + PROLOGUE(2); + doPopField(bytecodeIndexGlobal - 2); + DISPATCH_NOGC(); + +LABEL_BC_POP_FIELD_0: + PROLOGUE(1); + doPopFieldWithIndex(0); + DISPATCH_NOGC(); + +LABEL_BC_POP_FIELD_1: + PROLOGUE(1); + doPopFieldWithIndex(1); + DISPATCH_NOGC(); + +LABEL_BC_SEND: + PROLOGUE(2); + doSend(bytecodeIndexGlobal - 2); + DISPATCH_GC(); + +LABEL_BC_SEND_1: + PROLOGUE(2); + doUnarySend(bytecodeIndexGlobal - 2); + DISPATCH_GC(); + +LABEL_BC_SUPER_SEND: + PROLOGUE(2); + doSuperSend(bytecodeIndexGlobal - 2); + DISPATCH_GC(); + +LABEL_BC_RETURN_LOCAL: + PROLOGUE(1); + doReturnLocal(); + DISPATCH_NOGC(); + +LABEL_BC_RETURN_NON_LOCAL: + PROLOGUE(1); + doReturnNonLocal(); + DISPATCH_NOGC(); + +LABEL_BC_RETURN_SELF: { + PROLOGUE(1); + assert(GetFrame()->GetContext() == nullptr && + "RETURN_SELF is not allowed in blocks"); + popFrameAndPushResult(GetFrame()->GetArgumentInCurrentContext(0)); + DISPATCH_NOGC(); } -vm_oop_t Interpreter::Start() { -#undef PROLOGUE -#define PROLOGUE(bcCount) \ - { \ - bytecodeIndexGlobal += (bcCount); \ +LABEL_BC_RETURN_FIELD_0: + PROLOGUE(1); + doReturnFieldWithIndex(0); + DISPATCH_NOGC(); + +LABEL_BC_RETURN_FIELD_1: + PROLOGUE(1); + doReturnFieldWithIndex(1); + DISPATCH_NOGC(); + +LABEL_BC_RETURN_FIELD_2: + PROLOGUE(1); + doReturnFieldWithIndex(2); + DISPATCH_NOGC(); + +LABEL_BC_INC: + PROLOGUE(1); + doInc(); +#if USE_TAGGING + DISPATCH_NOGC(); +#else + // without integer tagging doInc() allocates memory and the IfNil benchmark + // will allocate, but not reach a GC point, and run out of memory + DISPATCH_GC(); +#endif + +LABEL_BC_DEC: + PROLOGUE(1); + doDec(); + DISPATCH_NOGC(); + +LABEL_BC_INC_FIELD: + PROLOGUE(2); + doIncField(currentBytecodes[bytecodeIndexGlobal - 1]); + DISPATCH_NOGC(); + +LABEL_BC_INC_FIELD_PUSH: + PROLOGUE(2); + doIncFieldPush(currentBytecodes[bytecodeIndexGlobal - 1]); + DISPATCH_NOGC(); + +LABEL_BC_JUMP: { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_FALSE_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(falseObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_TRUE_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(trueObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_FALSE_TOP_NIL: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(falseObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + GetFrame()->SetTop(nilObject); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_TRUE_TOP_NIL: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(trueObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + GetFrame()->SetTop(nilObject); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_NOT_NIL_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val != load_ptr(nilObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_NIL_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(nilObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_NOT_NIL_TOP_TOP: { + vm_oop_t val = GetFrame()->Top(); + if (val != load_ptr(nilObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + // GetFrame()->SetTop(val); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_ON_NIL_TOP_TOP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(nilObject)) { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal += offset; + // GetFrame()->SetTop(val); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; } -#define HACK_INLINE_START -#include "InterpreterLoop.h" -#undef HACK_INLINE_START } + DISPATCH_NOGC(); + +LABEL_BC_JUMP_IF_GREATER: { + if (checkIsGreater()) { + bytecodeIndexGlobal += currentBytecodes[bytecodeIndexGlobal + 1]; + GetFrame()->Pop(); + GetFrame()->Pop(); + } else { + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP_BACKWARD: { + uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; + bytecodeIndexGlobal -= offset; +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2: { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_FALSE_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(falseObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_TRUE_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(trueObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_FALSE_TOP_NIL: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(falseObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + GetFrame()->SetTop(nilObject); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_TRUE_TOP_NIL: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(trueObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + GetFrame()->SetTop(nilObject); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_NOT_NIL_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val != load_ptr(nilObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_NIL_POP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(nilObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + } else { + bytecodeIndexGlobal += 3; + } + GetFrame()->PopVoid(); +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_NOT_NIL_TOP_TOP: { + vm_oop_t val = GetFrame()->Top(); + if (val != load_ptr(nilObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + // GetFrame()->SetTop(val); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_ON_NIL_TOP_TOP: { + vm_oop_t val = GetFrame()->Top(); + if (val == load_ptr(nilObject)) { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal += offset; + // GetFrame()->SetTop(val); + } else { + GetFrame()->PopVoid(); + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_IF_GREATER: { + if (checkIsGreater()) { + bytecodeIndexGlobal += + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + GetFrame()->Pop(); + GetFrame()->Pop(); + } else { + bytecodeIndexGlobal += 3; + } +} + DISPATCH_NOGC(); + +LABEL_BC_JUMP2_BACKWARD: { + uint16_t const offset = + ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], + currentBytecodes[bytecodeIndexGlobal + 2]); + bytecodeIndexGlobal -= offset; +} + DISPATCH_NOGC(); +} + +template vm_oop_t Interpreter::Start(); +template vm_oop_t Interpreter::Start(); VMFrame* Interpreter::PushNewFrame(VMMethod* method) { SetFrame(Universe::NewFrame(GetFrame(), method)); diff --git a/src/interpreter/Interpreter.h b/src/interpreter/Interpreter.h index 4a55eed9..52072317 100644 --- a/src/interpreter/Interpreter.h +++ b/src/interpreter/Interpreter.h @@ -46,7 +46,7 @@ class Interpreter { public: - static vm_oop_t StartAndPrintBytecodes(); + template static vm_oop_t Start(); static VMFrame* PushNewFrame(VMMethod* method); diff --git a/src/interpreter/InterpreterLoop.h b/src/interpreter/InterpreterLoop.h deleted file mode 100644 index 954de244..00000000 --- a/src/interpreter/InterpreterLoop.h +++ /dev/null @@ -1,604 +0,0 @@ -#ifndef HACK_INLINE_START -vm_oop_t Start() { -#endif - // initialization - method = GetMethod(); - currentBytecodes = GetBytecodes(); - - void* loopTargets[] = {&&LABEL_BC_HALT, - &&LABEL_BC_DUP, - &&LABEL_BC_DUP_SECOND, - &&LABEL_BC_PUSH_LOCAL, - &&LABEL_BC_PUSH_LOCAL_0, - &&LABEL_BC_PUSH_LOCAL_1, - &&LABEL_BC_PUSH_LOCAL_2, - &&LABEL_BC_PUSH_ARGUMENT, - &&LABEL_BC_PUSH_SELF, - &&LABEL_BC_PUSH_ARG_1, - &&LABEL_BC_PUSH_ARG_2, - &&LABEL_BC_PUSH_FIELD, - &&LABEL_BC_PUSH_FIELD_0, - &&LABEL_BC_PUSH_FIELD_1, - &&LABEL_BC_PUSH_BLOCK, - &&LABEL_BC_PUSH_CONSTANT, - &&LABEL_BC_PUSH_CONSTANT_0, - &&LABEL_BC_PUSH_CONSTANT_1, - &&LABEL_BC_PUSH_CONSTANT_2, - &&LABEL_BC_PUSH_0, - &&LABEL_BC_PUSH_1, - &&LABEL_BC_PUSH_NIL, - &&LABEL_BC_PUSH_GLOBAL, - &&LABEL_BC_POP, - &&LABEL_BC_POP_LOCAL, - &&LABEL_BC_POP_LOCAL_0, - &&LABEL_BC_POP_LOCAL_1, - &&LABEL_BC_POP_LOCAL_2, - &&LABEL_BC_POP_ARGUMENT, - &&LABEL_BC_POP_FIELD, - &&LABEL_BC_POP_FIELD_0, - &&LABEL_BC_POP_FIELD_1, - &&LABEL_BC_SEND, - &&LABEL_BC_SEND_1, - &&LABEL_BC_SUPER_SEND, - &&LABEL_BC_RETURN_LOCAL, - &&LABEL_BC_RETURN_NON_LOCAL, - &&LABEL_BC_RETURN_SELF, - &&LABEL_BC_RETURN_FIELD_0, - &&LABEL_BC_RETURN_FIELD_1, - &&LABEL_BC_RETURN_FIELD_2, - &&LABEL_BC_INC, - &&LABEL_BC_DEC, - &&LABEL_BC_INC_FIELD, - &&LABEL_BC_INC_FIELD_PUSH, - &&LABEL_BC_JUMP, - &&LABEL_BC_JUMP_ON_FALSE_POP, - &&LABEL_BC_JUMP_ON_TRUE_POP, - &&LABEL_BC_JUMP_ON_FALSE_TOP_NIL, - &&LABEL_BC_JUMP_ON_TRUE_TOP_NIL, - &&LABEL_BC_JUMP_ON_NOT_NIL_POP, - &&LABEL_BC_JUMP_ON_NIL_POP, - &&LABEL_BC_JUMP_ON_NOT_NIL_TOP_TOP, - &&LABEL_BC_JUMP_ON_NIL_TOP_TOP, - &&LABEL_BC_JUMP_IF_GREATER, - &&LABEL_BC_JUMP_BACKWARD, - &&LABEL_BC_JUMP2, - &&LABEL_BC_JUMP2_ON_FALSE_POP, - &&LABEL_BC_JUMP2_ON_TRUE_POP, - &&LABEL_BC_JUMP2_ON_FALSE_TOP_NIL, - &&LABEL_BC_JUMP2_ON_TRUE_TOP_NIL, - &&LABEL_BC_JUMP2_ON_NOT_NIL_POP, - &&LABEL_BC_JUMP2_ON_NIL_POP, - &&LABEL_BC_JUMP2_ON_NOT_NIL_TOP_TOP, - &&LABEL_BC_JUMP2_ON_NIL_TOP_TOP, - &&LABEL_BC_JUMP2_IF_GREATER, - &&LABEL_BC_JUMP2_BACKWARD}; - - goto* loopTargets[currentBytecodes[bytecodeIndexGlobal]]; - - // - // THIS IS THE former interpretation loop -LABEL_BC_HALT: - PROLOGUE(1); - return GetFrame()->GetStackElement(0); // handle the halt bytecode - -LABEL_BC_DUP: - PROLOGUE(1); - doDup(); - DISPATCH_NOGC(); - -LABEL_BC_DUP_SECOND: - PROLOGUE(1); - { - vm_oop_t elem = GetFrame()->GetStackElement(1); - GetFrame()->Push(elem); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_LOCAL: - PROLOGUE(3); - doPushLocal(bytecodeIndexGlobal - 3); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_LOCAL_0: - PROLOGUE(1); - doPushLocalWithIndex(0); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_LOCAL_1: - PROLOGUE(1); - doPushLocalWithIndex(1); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_LOCAL_2: - PROLOGUE(1); - doPushLocalWithIndex(2); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_ARGUMENT: - PROLOGUE(3); - doPushArgument(bytecodeIndexGlobal - 3); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_SELF: - PROLOGUE(1); - { - vm_oop_t argument = GetFrame()->GetArgumentInCurrentContext(0); - GetFrame()->Push(argument); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_ARG_1: - PROLOGUE(1); - { - vm_oop_t argument = GetFrame()->GetArgumentInCurrentContext(1); - GetFrame()->Push(argument); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_ARG_2: - PROLOGUE(1); - { - vm_oop_t argument = GetFrame()->GetArgumentInCurrentContext(2); - GetFrame()->Push(argument); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_FIELD: - PROLOGUE(2); - doPushField(bytecodeIndexGlobal - 2); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_FIELD_0: - PROLOGUE(1); - doPushFieldWithIndex(0); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_FIELD_1: - PROLOGUE(1); - doPushFieldWithIndex(1); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_BLOCK: - PROLOGUE(2); - doPushBlock(bytecodeIndexGlobal - 2); - DISPATCH_GC(); - -LABEL_BC_PUSH_CONSTANT: - PROLOGUE(2); - doPushConstant(bytecodeIndexGlobal - 2); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_CONSTANT_0: - PROLOGUE(1); - { - vm_oop_t constant = method->GetIndexableField(0); - GetFrame()->Push(constant); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_CONSTANT_1: - PROLOGUE(1); - { - vm_oop_t constant = method->GetIndexableField(1); - GetFrame()->Push(constant); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_CONSTANT_2: - PROLOGUE(1); - { - vm_oop_t constant = method->GetIndexableField(2); - GetFrame()->Push(constant); - } - DISPATCH_NOGC(); - -LABEL_BC_PUSH_0: - PROLOGUE(1); - GetFrame()->Push(NEW_INT(0)); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_1: - PROLOGUE(1); - GetFrame()->Push(NEW_INT(1)); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_NIL: - PROLOGUE(1); - GetFrame()->Push(load_ptr(nilObject)); - DISPATCH_NOGC(); - -LABEL_BC_PUSH_GLOBAL: - PROLOGUE(2); - doPushGlobal(bytecodeIndexGlobal - 2); - DISPATCH_GC(); - -LABEL_BC_POP: - PROLOGUE(1); - doPop(); - DISPATCH_NOGC(); - -LABEL_BC_POP_LOCAL: - PROLOGUE(3); - doPopLocal(bytecodeIndexGlobal - 3); - DISPATCH_NOGC(); - -LABEL_BC_POP_LOCAL_0: - PROLOGUE(1); - doPopLocalWithIndex(0); - DISPATCH_NOGC(); - -LABEL_BC_POP_LOCAL_1: - PROLOGUE(1); - doPopLocalWithIndex(1); - DISPATCH_NOGC(); - -LABEL_BC_POP_LOCAL_2: - PROLOGUE(1); - doPopLocalWithIndex(2); - DISPATCH_NOGC(); - -LABEL_BC_POP_ARGUMENT: - PROLOGUE(3); - doPopArgument(bytecodeIndexGlobal - 3); - DISPATCH_NOGC(); - -LABEL_BC_POP_FIELD: - PROLOGUE(2); - doPopField(bytecodeIndexGlobal - 2); - DISPATCH_NOGC(); - -LABEL_BC_POP_FIELD_0: - PROLOGUE(1); - doPopFieldWithIndex(0); - DISPATCH_NOGC(); - -LABEL_BC_POP_FIELD_1: - PROLOGUE(1); - doPopFieldWithIndex(1); - DISPATCH_NOGC(); - -LABEL_BC_SEND: - PROLOGUE(2); - doSend(bytecodeIndexGlobal - 2); - DISPATCH_GC(); - -LABEL_BC_SEND_1: - PROLOGUE(2); - doUnarySend(bytecodeIndexGlobal - 2); - DISPATCH_GC(); - -LABEL_BC_SUPER_SEND: - PROLOGUE(2); - doSuperSend(bytecodeIndexGlobal - 2); - DISPATCH_GC(); - -LABEL_BC_RETURN_LOCAL: - PROLOGUE(1); - doReturnLocal(); - DISPATCH_NOGC(); - -LABEL_BC_RETURN_NON_LOCAL: - PROLOGUE(1); - doReturnNonLocal(); - DISPATCH_NOGC(); - -LABEL_BC_RETURN_SELF: { - PROLOGUE(1); - assert(GetFrame()->GetContext() == nullptr && - "RETURN_SELF is not allowed in blocks"); - popFrameAndPushResult(GetFrame()->GetArgumentInCurrentContext(0)); - DISPATCH_NOGC(); -} - -LABEL_BC_RETURN_FIELD_0: - PROLOGUE(1); - doReturnFieldWithIndex(0); - DISPATCH_NOGC(); - -LABEL_BC_RETURN_FIELD_1: - PROLOGUE(1); - doReturnFieldWithIndex(1); - DISPATCH_NOGC(); - -LABEL_BC_RETURN_FIELD_2: - PROLOGUE(1); - doReturnFieldWithIndex(2); - DISPATCH_NOGC(); - -LABEL_BC_INC: - PROLOGUE(1); - doInc(); -#if USE_TAGGING - DISPATCH_NOGC(); -#else -// without integer tagging doInc() allocates memory and the IfNil benchmark -// will allocate, but not reach a GC point, and run out of memory -DISPATCH_GC(); -#endif - -LABEL_BC_DEC: - PROLOGUE(1); - doDec(); - DISPATCH_NOGC(); - -LABEL_BC_INC_FIELD: - PROLOGUE(2); - doIncField(currentBytecodes[bytecodeIndexGlobal - 1]); - DISPATCH_NOGC(); - -LABEL_BC_INC_FIELD_PUSH: - PROLOGUE(2); - doIncFieldPush(currentBytecodes[bytecodeIndexGlobal - 1]); - DISPATCH_NOGC(); - -LABEL_BC_JUMP: { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_FALSE_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(falseObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_TRUE_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(trueObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_FALSE_TOP_NIL: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(falseObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - GetFrame()->SetTop(nilObject); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_TRUE_TOP_NIL: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(trueObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - GetFrame()->SetTop(nilObject); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_NOT_NIL_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val != load_ptr(nilObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_NIL_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(nilObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_NOT_NIL_TOP_TOP: { - vm_oop_t val = GetFrame()->Top(); - if (val != load_ptr(nilObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - // GetFrame()->SetTop(val); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_ON_NIL_TOP_TOP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(nilObject)) { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal += offset; - // GetFrame()->SetTop(val); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_IF_GREATER: { - if (checkIsGreater()) { - bytecodeIndexGlobal += currentBytecodes[bytecodeIndexGlobal + 1]; - GetFrame()->Pop(); - GetFrame()->Pop(); - } else { - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP_BACKWARD: { - uint8_t const offset = currentBytecodes[bytecodeIndexGlobal + 1]; - bytecodeIndexGlobal -= offset; -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2: { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_FALSE_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(falseObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_TRUE_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(trueObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_FALSE_TOP_NIL: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(falseObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - GetFrame()->SetTop(nilObject); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_TRUE_TOP_NIL: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(trueObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - GetFrame()->SetTop(nilObject); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_NOT_NIL_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val != load_ptr(nilObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_NIL_POP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(nilObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - } else { - bytecodeIndexGlobal += 3; - } - GetFrame()->PopVoid(); -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_NOT_NIL_TOP_TOP: { - vm_oop_t val = GetFrame()->Top(); - if (val != load_ptr(nilObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - // GetFrame()->SetTop(val); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_ON_NIL_TOP_TOP: { - vm_oop_t val = GetFrame()->Top(); - if (val == load_ptr(nilObject)) { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal += offset; - // GetFrame()->SetTop(val); - } else { - GetFrame()->PopVoid(); - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_IF_GREATER: { - if (checkIsGreater()) { - bytecodeIndexGlobal += - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - GetFrame()->Pop(); - GetFrame()->Pop(); - } else { - bytecodeIndexGlobal += 3; - } -} - DISPATCH_NOGC(); - -LABEL_BC_JUMP2_BACKWARD: { - uint16_t const offset = - ComputeOffset(currentBytecodes[bytecodeIndexGlobal + 1], - currentBytecodes[bytecodeIndexGlobal + 2]); - bytecodeIndexGlobal -= offset; -} - DISPATCH_NOGC(); - -#ifndef HACK_INLINE_START -} -#endif diff --git a/src/vm/Shell.cpp b/src/vm/Shell.cpp index 4a7ea55e..a45a5179 100644 --- a/src/vm/Shell.cpp +++ b/src/vm/Shell.cpp @@ -129,9 +129,9 @@ void Shell::Start() { // Start the Interpreter if (dumpBytecodes > 1) { - Interpreter::StartAndPrintBytecodes(); + Interpreter::Start(); } else { - Interpreter::Start(); + Interpreter::Start(); } // Save the result of the run method diff --git a/src/vm/Universe.cpp b/src/vm/Universe.cpp index c1174e51..56bbccfd 100644 --- a/src/vm/Universe.cpp +++ b/src/vm/Universe.cpp @@ -315,9 +315,9 @@ vm_oop_t Universe::interpretMethod(VMObject* receiver, VMInvokable* initialize, } if (dumpBytecodes > 1) { - return Interpreter::StartAndPrintBytecodes(); + return Interpreter::Start(); } - return Interpreter::Start(); + return Interpreter::Start(); } void Universe::initialize(int32_t _argc, char** _argv) {