From ac57e32a0222a3f18e138f0a358d1d01921be3a0 Mon Sep 17 00:00:00 2001
From: Aryadev Chavali <aryadev@aryadevchavali.com>
Date: Mon, 23 Oct 2023 04:24:28 +0100
Subject: Added lib folder for general stuff, introduced as target to Makefile

---
 vm/base.h    | 70 -----------------------------------------------------
 vm/darr.c    | 77 ----------------------------------------------------------
 vm/darr.h    | 39 ------------------------------
 vm/fib.c     | 79 ------------------------------------------------------------
 vm/inst.h    |  4 +--
 vm/runtime.h |  2 +-
 6 files changed, 3 insertions(+), 268 deletions(-)
 delete mode 100644 vm/base.h
 delete mode 100644 vm/darr.c
 delete mode 100644 vm/darr.h
 delete mode 100644 vm/fib.c

(limited to 'vm')

diff --git a/vm/base.h b/vm/base.h
deleted file mode 100644
index dbeec80..0000000
--- a/vm/base.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 2023 Aryadev Chavali
-
- * You may distribute and modify this code under the terms of the GPLv2
- * license.  You should have received a copy of the GPLv2 license with
- * this file.  If not, please write to: aryadev@aryadevchavali.com.
-
- * Created: 2023-10-15
- * Author: Aryadev Chavali
- * Description: Basic types and routines
- */
-
-#ifndef BASE_H
-#define BASE_H
-
-#include <stdint.h>
-
-#define ARR_SIZE(xs) (sizeof(xs) / sizeof(xs[0]))
-#define MAX(a, b)    ((a) > (b) ? (a) : (b))
-#define MIN(a, b)    ((a) > (b) ? (b) : (a))
-
-// Flags
-#ifndef VERBOSE
-#define VERBOSE 0
-#endif
-
-typedef uint64_t u64;
-typedef uint32_t u32;
-typedef int32_t i32;
-typedef int64_t i64;
-typedef float f32;
-typedef double f64;
-
-typedef uint8_t byte;
-typedef u32 hword;
-typedef u64 word;
-
-typedef union
-{
-  byte as_byte;
-  hword as_hword;
-  word as_word;
-} data_t;
-
-typedef enum
-{
-  DATA_TYPE_NIL = 0,
-  DATA_TYPE_BYTE,
-  DATA_TYPE_HWORD,
-  DATA_TYPE_WORD,
-} data_type_t;
-
-#define DBYTE(BYTE)   ((data_t){.as_byte = (BYTE)})
-#define DHWORD(HWORD) ((data_t){.as_hword = (HWORD)})
-#define DWORD(WORD)   ((data_t){.as_word = (WORD)})
-
-#define HWORD_SIZE sizeof(hword)
-#define WORD_SIZE  sizeof(word)
-
-// Macros to extract the nth byte or nth hword from a word
-#define WORD_NTH_BYTE(WORD, N)  (((WORD) >> ((N)*8)) & 0xff)
-#define WORD_NTH_HWORD(WORD, N) (((WORD) >> ((N)*2)) & 0xFFFFFFFF)
-
-// Assume array contains 4 bytes.
-hword convert_bytes_to_hword(byte *);
-void convert_hword_to_bytes(hword, byte *);
-// Assume array contains 8 bytes.
-word convert_bytes_to_word(byte *);
-void convert_word_to_bytes(word, byte *);
-
-#endif
diff --git a/vm/darr.c b/vm/darr.c
deleted file mode 100644
index 4393c4b..0000000
--- a/vm/darr.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright (C) 2023 Aryadev Chavali
-
- * You may distribute and modify this code under the terms of the
- * GPLv2 license.  You should have received a copy of the GPLv2
- * license with this file.  If not, please write to:
- * aryadev@aryadevchavali.com.
-
- * Created: 2023-10-15
- * Author: Aryadev Chavali
- * Description: Dynamically sized byte array
- */
-
-#include <assert.h>
-#include <malloc.h>
-#include <string.h>
-
-#include "./darr.h"
-
-void darr_init(darr_t *darr, size_t size)
-{
-  if (size == 0)
-    size = DARR_DEFAULT_SIZE;
-  *darr = (darr_t){
-      .data      = calloc(size, 1),
-      .used      = 0,
-      .available = size,
-  };
-}
-
-void darr_ensure_capacity(darr_t *darr, size_t requested)
-{
-  if (darr->used + requested >= darr->available)
-  {
-    darr->available =
-        MAX(darr->used + requested, darr->available * DARR_REALLOC_MULT);
-    darr->data = realloc(darr->data, darr->available);
-  }
-}
-
-void darr_append_byte(darr_t *darr, byte byte)
-{
-  darr_ensure_capacity(darr, 1);
-  darr->data[darr->used++] = byte;
-}
-
-void darr_append_bytes(darr_t *darr, byte *bytes, size_t n)
-{
-  darr_ensure_capacity(darr, n);
-  memcpy(darr->data + darr->used, bytes, n);
-  darr->used += n;
-}
-
-byte darr_at(darr_t *darr, size_t index)
-{
-  if (index >= darr->used)
-    // TODO: Error (index is out of bounds)
-    return 0;
-  return darr->data[index];
-}
-
-void darr_write_file(darr_t *bytes, FILE *fp)
-{
-  size_t size = fwrite(bytes->data, bytes->used, 1, fp);
-  assert(size == 1);
-}
-
-darr_t darr_read_file(FILE *fp)
-{
-  darr_t darr = {0};
-  fseek(fp, 0, SEEK_END);
-  long size = ftell(fp);
-  darr_init(&darr, size);
-  fseek(fp, 0, SEEK_SET);
-  size_t read = fread(darr.data, size, 1, fp);
-  assert(read == 1);
-  return darr;
-}
diff --git a/vm/darr.h b/vm/darr.h
deleted file mode 100644
index 1d5820b..0000000
--- a/vm/darr.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (C) 2023 Aryadev Chavali
-
- * You may distribute and modify this code under the terms of the
- * GPLv2 license.  You should have received a copy of the GPLv2
- * license with this file.  If not, please write to:
- * aryadev@aryadevchavali.com.
-
- * Created: 2023-10-15
- * Author: Aryadev Chavali
- * Description: Dynamically sized byte array
- */
-
-#ifndef DARR_H
-#define DARR_H
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "./base.h"
-
-typedef struct
-{
-  byte *data;
-  size_t used, available;
-} darr_t;
-
-#define DARR_DEFAULT_SIZE 8
-#define DARR_REALLOC_MULT 1.5
-
-void darr_init(darr_t *, size_t);
-void darr_ensure_capacity(darr_t *, size_t);
-void darr_append_byte(darr_t *, byte);
-void darr_append_bytes(darr_t *, byte *, size_t);
-byte darr_at(darr_t *, size_t);
-
-void darr_write_file(darr_t *, FILE *);
-darr_t darr_read_file(FILE *);
-
-#endif
diff --git a/vm/fib.c b/vm/fib.c
deleted file mode 100644
index 7107c3e..0000000
--- a/vm/fib.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 2023 Aryadev Chavali
-
- * You may distribute and modify this code under the terms of the GPLv2
- * license.  You should have received a copy of the GPLv2 license with
- * this file.  If not, please write to: aryadev@aryadevchavali.com.
-
- * Created: 2023-10-23
- * Author: Aryadev Chavali
- * Description: An example virtual machine program which computes and
- * prints fibonacci numbers.  Note that by default the virtual machine
- * just rolls overflows over, so this program will never terminate.
- */
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "./inst.h"
-#include "./runtime.h"
-
-int main(void)
-{
-  inst_t instructions[] = {
-      // MOV the values 1 and 1 to REG[0] and REG[1] respectively
-      INST_PUSH(WORD, 1),
-      INST_MOV(WORD, 0),
-      INST_PUSH(WORD, 1),
-      INST_MOV(WORD, 1),
-
-      // Print value at register 0 with newline.
-      INST_PUSH_REG(WORD, 0), // <-- #
-      INST_PRINT(WORD),
-      INST_PUSH(BYTE, '\n'),
-      INST_PRINT(CHAR),
-
-      // Print value at register 1 with newline
-      INST_PUSH_REG(WORD, 1),
-      INST_PRINT(WORD),
-      INST_PUSH(BYTE, '\n'),
-      INST_PRINT(CHAR),
-
-      /* Compute the next pair of fibonacci numbers */
-      // REG[0] + REG[1]
-      INST_PUSH_REG(WORD, 0),
-      INST_PUSH_REG(WORD, 1),
-      INST_PLUS(WORD),
-
-      // Mov REG[0] + REG[1] to REG[0]
-      INST_MOV(WORD, 0),
-
-      // REG[0] + REG[1]
-      INST_PUSH_REG(WORD, 0),
-      INST_PUSH_REG(WORD, 1),
-      INST_PLUS(WORD),
-
-      // Mov REG[0] + REG[1] to REG[1]
-      INST_MOV(WORD, 1),
-
-      // Jump to the point #
-      INST_JUMP_ABS(4),
-      INST_HALT,
-  };
-
-  byte stack[256];
-  vm_t vm = {0};
-  vm_load_stack(&vm, stack, ARR_SIZE(stack));
-  vm_load_program(&vm, instructions, ARR_SIZE(instructions));
-  err_t err = vm_execute_all(&vm);
-
-  if (err)
-  {
-    const char *error_str = err_as_cstr(err);
-    fprintf(stderr, "[ERROR]: %s\n", error_str);
-    fprintf(stderr, "[ERROR]: VM Trace:\n");
-    vm_print_all(&vm, stderr);
-    return 255 - err;
-  }
-  return 0;
-}
diff --git a/vm/inst.h b/vm/inst.h
index 8902757..5882e4f 100644
--- a/vm/inst.h
+++ b/vm/inst.h
@@ -16,8 +16,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "./base.h"
-#include "./darr.h"
+#include "../lib/base.h"
+#include "../lib/darr.h"
 
 typedef enum
 {
diff --git a/vm/runtime.h b/vm/runtime.h
index 83ffa17..03cd21f 100644
--- a/vm/runtime.h
+++ b/vm/runtime.h
@@ -16,7 +16,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "./base.h"
+#include "../lib/base.h"
 #include "./inst.h"
 
 typedef enum
-- 
cgit v1.2.3-13-gbd6f