aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2023-10-31 21:41:53 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2023-10-31 21:41:53 +0000
commit5127202722b2e9f07b4df9be2dc411baa5545290 (patch)
tree925e1f6c4c352c1d4649a81ad1482eab313c6b65
parent5202dfbb2646cfbfb585f1a00a079438010373e5 (diff)
downloadovm-5127202722b2e9f07b4df9be2dc411baa5545290.tar.gz
ovm-5127202722b2e9f07b4df9be2dc411baa5545290.tar.bz2
ovm-5127202722b2e9f07b4df9be2dc411baa5545290.zip
Introduced 3 new union members to data_t
These new members are just signed versions of the previous members. This makes type punning and usage for signed versions easier than before (no need for memcpy).
-rw-r--r--lib/base.h3
-rw-r--r--vm/runtime.c12
2 files changed, 6 insertions, 9 deletions
diff --git a/lib/base.h b/lib/base.h
index 64d8f74..7acf13f 100644
--- a/lib/base.h
+++ b/lib/base.h
@@ -48,8 +48,11 @@ typedef i64 s_word;
typedef union
{
byte as_byte;
+ s_byte as_char;
hword as_hword;
+ s_hword as_int;
word as_word;
+ s_word as_long;
} data_t;
typedef enum
diff --git a/vm/runtime.c b/vm/runtime.c
index a7d356d..a2e78b7 100644
--- a/vm/runtime.c
+++ b/vm/runtime.c
@@ -188,27 +188,21 @@ err_t vm_execute(vm_t *vm)
switch (print_type)
{
case TYPE_CHAR: {
- char c = 0;
- memcpy(&c, &datum.as_byte, 1);
- printf("%c", c);
+ printf("%c", datum.as_char);
break;
}
case TYPE_BYTE:
printf("0x%x", datum.as_byte);
break;
case TYPE_INT: {
- s_hword i = 0;
- memcpy(&i, &datum.as_hword, HWORD_SIZE);
- printf("%" PRId32, i);
+ printf("%" PRId32, datum.as_int);
break;
}
case TYPE_HWORD:
printf("%" PRIu32, datum.as_hword);
break;
case TYPE_LONG: {
- s_word i = 0;
- memcpy(&i, &datum.as_word, WORD_SIZE);
- printf("%" PRId64, i);
+ printf("%" PRId64, datum.as_long);
break;
}
case TYPE_WORD: