aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2023-10-22 20:23:23 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2023-10-22 20:23:23 +0100
commitd5d37f1264174b0ae4178a23bced4c497452c0f4 (patch)
tree54e8718fce06fe29ada1bbe3388534e31cd60372 /src
parentd5d10480fad1711dd69467eff4dff4cba71954f8 (diff)
downloadovm-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.h8
-rw-r--r--src/inst.c24
2 files changed, 31 insertions, 1 deletions
diff --git a/src/base.h b/src/base.h
index 75ae6af..a135061 100644
--- a/src/base.h
+++ b/src/base.h
@@ -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
diff --git a/src/inst.c b/src/inst.c
index 74dd736..36156d4 100644
--- a/src/inst.c
+++ b/src/inst.c
@@ -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;