Compare commits

..

No commits in common. "e5f2858a5c80de897e620948c505fe037708ed57" and "70dbd0253bd5aedec6946cee28f5457594fa1610" have entirely different histories.

10 changed files with 14 additions and 27 deletions

View File

@ -5,7 +5,5 @@ set(CMAKE_C_STANDARD 99)
add_compile_options(-g -Wall -pedantic) add_compile_options(-g -Wall -pedantic)
include_directories("./bigint/build/include")
add_executable(ninja njvm.c add_executable(ninja njvm.c
SDA.c) SDA.c)

View File

@ -4,7 +4,7 @@
CC = gcc CC = gcc
# program to Run # program to Run
F = programs/prog1.bin F = prog.bin
# Compiler flags # Compiler flags
CFLAGS = -g -Wall -Ibigint/build/include CFLAGS = -g -Wall -Ibigint/build/include

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

19
njvm.c
View File

@ -9,7 +9,6 @@
#include "SDA.c" #include "SDA.c"
#include "debugMenu.c" #include "debugMenu.c"
#include "bigint.h" #include "bigint.h"
// Debug // Debug
int debug = 0; int debug = 0;
@ -61,10 +60,7 @@ void execute(struct program program) {
break; break;
case ADD: case ADD:
if (debug == 1) printf("add: %i + %i\n",peek(stack, 2),peek(stack, 1)); if (debug == 1) printf("add: %i + %i\n",peek(stack, 2),peek(stack, 1));
bip.op1 = pop(stack).u.objRef; push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack)) + getIntValfromStackSlot(pop(stack)))));
bip.op2 = pop(stack).u.objRef;
bigAdd();
push(stack, stackSlotWithObjRef(bip.res));
break; break;
case SUB: case SUB:
if (debug == 1) printf("sub: %i - %i\n", peek(stack, 2), peek(stack, 1)); if (debug == 1) printf("sub: %i - %i\n", peek(stack, 2), peek(stack, 1));
@ -73,8 +69,7 @@ void execute(struct program program) {
break; break;
case MUL: case MUL:
if (debug == 1) printf("mul: %i * %i\n", peek(stack, 2), peek(stack, 1)); if (debug == 1) printf("mul: %i * %i\n", peek(stack, 2), peek(stack, 1));
push(stack, stackSlotWithObjRef( push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack)) * getIntValfromStackSlot(pop(stack)))));
getIntObj(getIntValfromStackSlot(pop(stack)) * getIntValfromStackSlot(pop(stack)))));
break; break;
case DIV: case DIV:
if (debug == 1) printf("div: %i / %i\n", peek(stack, 2), peek(stack, 1)); if (debug == 1) printf("div: %i / %i\n", peek(stack, 2), peek(stack, 1));
@ -137,18 +132,12 @@ void execute(struct program program) {
break; break;
case NE: case NE:
if (debug == 1) printf("ne: %i != %i\n", peek(stack, 2), peek(stack, 1)); if (debug == 1) printf("ne: %i != %i\n", peek(stack, 2), peek(stack, 1));
if (getIntValfromStackSlot(pop(stack)) != getIntValfromStackSlot(pop(stack))) push(stack, if (getIntValfromStackSlot(pop(stack)) != getIntValfromStackSlot(pop(stack))) push(stack, stackSlotWithObjRef(getIntObj(1)));
stackSlotWithObjRef(
getIntObj(
1)));
else push(stack, stackSlotWithObjRef(getIntObj(0))); else push(stack, stackSlotWithObjRef(getIntObj(0)));
break; break;
case EQ: case EQ:
if (debug == 1) printf("eq: %i == %i\n", peek(stack, 2), peek(stack, 1)); if (debug == 1) printf("eq: %i == %i\n", peek(stack, 2), peek(stack, 1));
if (getIntValfromStackSlot(pop(stack)) == getIntValfromStackSlot(pop(stack))) push(stack, if (getIntValfromStackSlot(pop(stack)) == getIntValfromStackSlot(pop(stack))) push(stack, stackSlotWithObjRef(getIntObj(1)));
stackSlotWithObjRef(
getIntObj(
1)));
else push(stack, stackSlotWithObjRef(getIntObj(0))); else push(stack, stackSlotWithObjRef(getIntObj(0)));
break; break;
case LT: case LT:

BIN
njvm.o

Binary file not shown.

BIN
support.o

Binary file not shown.