Compare commits

..

No commits in common. "91b36a53d552ac656bc9c7bee44ade1b60a520bf" and "084b715729c1ed2ff96f2abf8a821751ee2a0225" have entirely different histories.

17 changed files with 66 additions and 115 deletions

View File

@ -13,7 +13,7 @@ target_include_directories(njvm PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/bigint/build
# Add the library # Add the library
add_library(bigint STATIC ${CMAKE_SOURCE_DIR}/bigint/src/bigint.c add_library(bigint STATIC ${CMAKE_SOURCE_DIR}/bigint/src/bigint.c
support.c support.c
GC.c) heap.c)
# Include directories for the bigint library # Include directories for the bigint library
target_include_directories(bigint PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/bigint/build/include) target_include_directories(bigint PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/bigint/build/include)

52
GC.c
View File

@ -1,52 +0,0 @@
#ifndef GC
#define GC
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "stackslot.c"
#include "stack.c"
#include "bigint.h"
#include "instruktion.c"
#include "record.c"
typedef struct {
unsigned int freiZeiger;
unsigned int size;
ObjRef *data;
} *heapPartRef;
// Stack
struct stack stack;
#define SIZE 64
//Register
struct stack reg;
heapPartRef primary;
heapPartRef secondary;
unsigned int heapSize;
void initHeap(int size){
heapSize = 2 * sizeof (unsigned int) + size;
if ((primary = malloc(heapSize)) == NULL) perror("malloc");
if ((secondary = malloc(heapSize)) == NULL) perror("malloc");
}
// nimmt obj und copier es in den secondary Speicher
void copy(ObjRef obj){
if(obj->brokenHeart == true) return;
obj->brokenHeart = true;
if (IS_PRIMITIVE(obj)){
obj->forward_pointer = memcpy(secondary->data[secondary->freiZeiger],obj,obj->size);
secondary->freiZeiger += obj->size;
} else {
GET_ELEMENT_COUNT(obj);
obj->forward_pointer = memcpy(secondary->data[secondary->freiZeiger],obj,sizeof(*obj) + (GET_ELEMENT_COUNT(obj) * sizeof(void *)));
secondary->freiZeiger += sizeof(*obj) + (GET_ELEMENT_COUNT(obj) * sizeof(void *));
for (int i = 0; i < GET_ELEMENT_COUNT(obj); ++i) {
copy(getField(obj,i));
}
}
}
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

11
heap.c Normal file
View File

@ -0,0 +1,11 @@
//
// Created by Nils Polek on 23.01.24.
//
typedef struct {
int size;
int hcurrent;
}heap;
//void* alloc(int size){
// return {}
//}

12
njvm.c
View File

@ -9,15 +9,22 @@
#include "debugMenu.c" #include "debugMenu.c"
#include "bigint.h" #include "bigint.h"
#include "record.c" #include "record.c"
#include "GC.c"
// Debug // Debug
int debug = 0; int debug = 0;
// Stack
struct stack stack;
#define SIZE 64
//Register
struct stack reg;
// Program // Program
struct program program; struct program program;
// SDA
struct sda sda;
unsigned fp; unsigned fp;
void version(void) { void version(void) {
@ -306,6 +313,7 @@ void tests(void) {
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
// Initialize the Stack // Initialize the Stack
int size = SIZE; int size = SIZE;
int current = 0; int current = 0;

BIN
njvm.o

Binary file not shown.

View File

@ -1,11 +1,9 @@
#ifndef OBJREF #ifndef OBJREF
#define OBJREF #define OBJREF
#include <stdbool.h> typedef struct {
unsigned int size;
typedef struct ObjRef{ unsigned char data[1];
unsigned int size;
unsigned char data[1];
} *ObjRef; } *ObjRef;
#endif /* ifndef OBJREF #endif /* ifndef OBJREF

View File

@ -7,10 +7,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "stackslot.c" #include "stackslot.c"
#include "sda.c"
// SDA
struct sda sda;
struct stack { struct stack {
int* size; int* size;

View File

@ -1,66 +1,57 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#ifndef STACKSLOT #ifndef STACKSLOT
#define STACKSLOT #define STACKSLOT
typedef int Object; typedef int Object;
typedef struct ObjRef{ typedef struct {
bool brokenHeart; unsigned int size;
struct ObjRef *forward_pointer; unsigned char data[1];
unsigned int size;
unsigned char data[1];
} *ObjRef; } *ObjRef;
typedef struct { typedef struct{
bool isObjRef; bool isObjRef;
union { union {
ObjRef objRef; ObjRef objRef;
int number; int number;
} u; } u;
} StackSlot; } StackSlot;
ObjRef getIntObj(int val) { ObjRef getIntObj(int val){
ObjRef intObject; ObjRef intObject;
unsigned int objSize = sizeof(unsigned int) + sizeof(int); unsigned int objSize = sizeof(unsigned int) + sizeof(int);
if ((intObject = malloc(objSize)) == NULL) { if ((intObject = malloc(objSize)) == NULL) {
perror("malloc"); perror("malloc");
} }
*(int *) intObject->data = val; *(int *)intObject->data=val;
intObject->size = sizeof(int); intObject->size=sizeof(int);
return intObject; return intObject;
} }
int getValFromIntObj(ObjRef iref){
int getValFromIntObj(ObjRef iref) { return *(int *)iref->data;
return *(int *) iref->data;
} }
int getIntValfromStackSlot(StackSlot s){
int getIntValfromStackSlot(StackSlot s) { if(s.isObjRef){
if (s.isObjRef) { return *(int *)s.u.objRef->data;
return *(int *) s.u.objRef->data; }
} return s.u.number;
return s.u.number;
} }
void setValIntObj(ObjRef iref, int val){
void setValIntObj(ObjRef iref, int val) { iref->size=sizeof(int);
iref->size = sizeof(int); *(int *)iref->data=val;
*(int *) iref->data = val;
} }
StackSlot stackSlotWithObjRef(ObjRef val){
StackSlot stackSlotWithObjRef(ObjRef val) { StackSlot *stackSlot;
StackSlot *stackSlot; stackSlot=malloc(sizeof(StackSlot));
stackSlot = malloc(sizeof(StackSlot)); stackSlot->isObjRef=true;
stackSlot->isObjRef = true; stackSlot->u.objRef=val;
stackSlot->u.objRef = val; return *stackSlot;
return *stackSlot;
} }
StackSlot stackSlotWitchNumber(int val){
StackSlot stackSlotWitchNumber(int val) { StackSlot *stackSlot;
StackSlot *stackSlot; stackSlot= malloc(sizeof(StackSlot));
stackSlot = malloc(sizeof(StackSlot)); stackSlot->isObjRef=false;
stackSlot->isObjRef = false; stackSlot->u.number=val;
stackSlot->u.number = val; return *stackSlot;
return *stackSlot;
} }
#endif #endif

View File

@ -1,4 +1,3 @@
#include "support.h" #include "support.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

BIN
support.o

Binary file not shown.