diff options
-rw-r--r-- | lib/base.c | 17 | ||||
-rw-r--r-- | todo.org | 36 |
2 files changed, 29 insertions, 24 deletions
@@ -10,30 +10,35 @@ * Description: Implementation of basic library functions */ +#include <endian.h> #include <string.h> #include "./base.h" hword convert_bytes_to_hword(byte *bytes) { - hword h = 0; - memcpy(&h, bytes, HWORD_SIZE); + hword be_h = 0; + memcpy(&be_h, bytes, HWORD_SIZE); + hword h = be32toh(be_h); return h; } void convert_hword_to_bytes(hword w, byte *bytes) { - memcpy(bytes, &w, HWORD_SIZE); + hword be_h = htobe32(w); + memcpy(bytes, &be_h, HWORD_SIZE); } void convert_word_to_bytes(word w, byte *bytes) { - memcpy(bytes, &w, WORD_SIZE); + word be_w = htobe64(w); + memcpy(bytes, &be_w, WORD_SIZE); } word convert_bytes_to_word(byte *bytes) { - word w = 0; - memcpy(&w, bytes, WORD_SIZE); + word be_w = 0; + memcpy(&be_w, bytes, WORD_SIZE); + word w = be64toh(be_w); return w; } @@ -15,24 +15,6 @@ *** TODO VM [0%] **** TODO vm/runtime.h ** TODO Specification -* TODO Rigid endian :LIB: -Say a program is compiled on a little endian machine. The resultant -bytecode file, as a result of using C's internal functions, will use -little endian. - -This file, when distributed to other computers, will not work on those -that use big endian. - -This is a massive problem; I would like bytecode compiled on one -computer to work on any other one. Therefore we have to enforce big -endian. This refactor is limited to only LIB as a result of only the -~convert_*~ functions being used in the runtime to convert between -byte buffers (usually read from the bytecode file directly or from -memory to use in the stack). - -2024-04-09: Found the ~hto_e~ functions under =endian.h= that provide -both way host to specific endian conversion of shorts, half words and -words. This will make it super simple to just convert. * TODO Preprocessing directives :ASM: Like in FASM or NASM where we can give certain helpful instructions to the assembler. I'd use the ~%~ symbol to designate preprocessor @@ -272,3 +254,21 @@ constant potentially #+end_src which when referred to (by ~$print-1~) would insert the bytecode given inline. +** DONE Rigid endian :LIB: +Say a program is compiled on a little endian machine. The resultant +bytecode file, as a result of using C's internal functions, will use +little endian. + +This file, when distributed to other computers, will not work on those +that use big endian. + +This is a massive problem; I would like bytecode compiled on one +computer to work on any other one. Therefore we have to enforce big +endian. This refactor is limited to only LIB as a result of only the +~convert_*~ functions being used in the runtime to convert between +byte buffers (usually read from the bytecode file directly or from +memory to use in the stack). + +2024-04-09: Found the ~hto_e~ functions under =endian.h= that provide +both way host to specific endian conversion of shorts, half words and +words. This will make it super simple to just convert. |