diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-10-22 20:23:23 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-10-22 20:23:23 +0100 |
commit | d5d37f1264174b0ae4178a23bced4c497452c0f4 (patch) | |
tree | 54e8718fce06fe29ada1bbe3388534e31cd60372 /src | |
parent | d5d10480fad1711dd69467eff4dff4cba71954f8 (diff) | |
download | ovm-d5d37f1264174b0ae4178a23bced4c497452c0f4.tar.gz ovm-d5d37f1264174b0ae4178a23bced4c497452c0f4.tar.bz2 ovm-d5d37f1264174b0ae4178a23bced4c497452c0f4.zip |
Functions which convert (h)words to and from bytes
Uses memcpy internally, so we don't need to care about endianness.
Diffstat (limited to 'src')
-rw-r--r-- | src/base.h | 8 | ||||
-rw-r--r-- | src/inst.c | 24 |
2 files changed, 31 insertions, 1 deletions
@@ -55,6 +55,12 @@ typedef enum #define HWORD_SIZE sizeof(hword) #define WORD_SIZE sizeof(word) -#define FLOAT_SIZE sizeof(f64) + +// 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 @@ -129,6 +129,30 @@ void data_print(data_t datum, data_type_t type, FILE *fp) } } +hword convert_bytes_to_hword(byte *bytes) +{ + hword h = 0; + memcpy(&h, bytes, HWORD_SIZE); + return h; +} + +void convert_hword_to_bytes(hword w, byte *bytes) +{ + memcpy(bytes, &w, HWORD_SIZE); +} + +void convert_word_to_bytes(word w, byte *bytes) +{ + memcpy(bytes, &w, WORD_SIZE); +} + +word convert_bytes_to_word(byte *bytes) +{ + word w = 0; + memcpy(&w, bytes, WORD_SIZE); + return w; +} + data_type_t get_opcode_data_type(opcode_t opcode) { data_type_t type = DATA_TYPE_NIL; |