long -> sword, int -> shword, char -> sbyte
This commit is contained in:
12
lib/base.h
12
lib/base.h
@@ -44,11 +44,11 @@ typedef float f32;
|
||||
typedef double f64;
|
||||
|
||||
typedef u8 byte_t;
|
||||
typedef i8 char_t;
|
||||
typedef i8 sbyte_t;
|
||||
typedef u32 hword_t;
|
||||
typedef i32 int_t;
|
||||
typedef i32 shword_t;
|
||||
typedef u64 word_t;
|
||||
typedef i64 long_t;
|
||||
typedef i64 sword_t;
|
||||
|
||||
/* Macros for the sizes of common base data types. */
|
||||
#define HWORD_SIZE sizeof(hword_t)
|
||||
@@ -73,11 +73,11 @@ typedef i64 long_t;
|
||||
typedef union
|
||||
{
|
||||
byte_t as_byte;
|
||||
char_t as_char;
|
||||
sbyte_t as_sbyte;
|
||||
hword_t as_hword;
|
||||
int_t as_int;
|
||||
shword_t as_shword;
|
||||
word_t as_word;
|
||||
long_t as_long;
|
||||
sword_t as_sword;
|
||||
} data_t;
|
||||
|
||||
/**
|
||||
|
||||
60
lib/inst.c
60
lib/inst.c
@@ -125,50 +125,50 @@ const char *opcode_as_cstr(opcode_t code)
|
||||
return "EQ_WORD";
|
||||
case OP_LT_BYTE:
|
||||
return "LT_BYTE";
|
||||
case OP_LT_CHAR:
|
||||
return "LT_CHAR";
|
||||
case OP_LT_SBYTE:
|
||||
return "LT_SBYTE";
|
||||
case OP_LT_HWORD:
|
||||
return "LT_HWORD";
|
||||
case OP_LT_INT:
|
||||
return "LT_INT";
|
||||
case OP_LT_LONG:
|
||||
return "LT_LONG";
|
||||
case OP_LT_SHWORD:
|
||||
return "LT_SHWORD";
|
||||
case OP_LT_SWORD:
|
||||
return "LT_SWORD";
|
||||
case OP_LT_WORD:
|
||||
return "LT_WORD";
|
||||
case OP_LTE_BYTE:
|
||||
return "LTE_BYTE";
|
||||
case OP_LTE_CHAR:
|
||||
return "LTE_CHAR";
|
||||
case OP_LTE_SBYTE:
|
||||
return "LTE_SBYTE";
|
||||
case OP_LTE_HWORD:
|
||||
return "LTE_HWORD";
|
||||
case OP_LTE_INT:
|
||||
return "LTE_INT";
|
||||
case OP_LTE_LONG:
|
||||
return "LTE_LONG";
|
||||
case OP_LTE_SHWORD:
|
||||
return "LTE_SHWORD";
|
||||
case OP_LTE_SWORD:
|
||||
return "LTE_SWORD";
|
||||
case OP_LTE_WORD:
|
||||
return "LTE_WORD";
|
||||
case OP_GT_BYTE:
|
||||
return "GT_BYTE";
|
||||
case OP_GT_CHAR:
|
||||
return "GT_CHAR";
|
||||
case OP_GT_SBYTE:
|
||||
return "GT_SBYTE";
|
||||
case OP_GT_HWORD:
|
||||
return "GT_HWORD";
|
||||
case OP_GT_INT:
|
||||
return "GT_INT";
|
||||
case OP_GT_LONG:
|
||||
return "GT_LONG";
|
||||
case OP_GT_SHWORD:
|
||||
return "GT_SHWORD";
|
||||
case OP_GT_SWORD:
|
||||
return "GT_SWORD";
|
||||
case OP_GT_WORD:
|
||||
return "GT_WORD";
|
||||
case OP_GTE_BYTE:
|
||||
return "GTE_BYTE";
|
||||
case OP_GTE_CHAR:
|
||||
return "GTE_CHAR";
|
||||
case OP_GTE_SBYTE:
|
||||
return "GTE_SBYTE";
|
||||
case OP_GTE_HWORD:
|
||||
return "GTE_HWORD";
|
||||
case OP_GTE_INT:
|
||||
return "GTE_INT";
|
||||
case OP_GTE_LONG:
|
||||
return "GTE_LONG";
|
||||
case OP_GTE_SHWORD:
|
||||
return "GTE_SHWORD";
|
||||
case OP_GTE_SWORD:
|
||||
return "GTE_SWORD";
|
||||
case OP_GTE_WORD:
|
||||
return "GTE_WORD";
|
||||
case OP_PLUS_BYTE:
|
||||
@@ -205,16 +205,16 @@ const char *opcode_as_cstr(opcode_t code)
|
||||
return "CALL_STACK";
|
||||
case OP_RET:
|
||||
return "RET";
|
||||
case OP_PRINT_CHAR:
|
||||
return "PRINT_CHAR";
|
||||
case OP_PRINT_SBYTE:
|
||||
return "PRINT_SBYTE";
|
||||
case OP_PRINT_BYTE:
|
||||
return "PRINT_BYTE";
|
||||
case OP_PRINT_INT:
|
||||
return "PRINT_INT";
|
||||
case OP_PRINT_SHWORD:
|
||||
return "PRINT_SHWORD";
|
||||
case OP_PRINT_HWORD:
|
||||
return "PRINT_HWORD";
|
||||
case OP_PRINT_LONG:
|
||||
return "PRINT_LONG";
|
||||
case OP_PRINT_SWORD:
|
||||
return "PRINT_SWORD";
|
||||
case OP_PRINT_WORD:
|
||||
return "PRINT_WORD";
|
||||
case OP_HALT:
|
||||
|
||||
32
lib/inst.h
32
lib/inst.h
@@ -20,7 +20,7 @@
|
||||
(((OPCODE) >= OP_TYPE##_BYTE) && ((OPCODE) <= OP_TYPE##_WORD))
|
||||
|
||||
#define SIGNED_OPCODE_IS_TYPE(OPCODE, OP_TYPE) \
|
||||
(((OPCODE) >= OP_TYPE##_BYTE) && ((OPCODE) <= OP_TYPE##_LONG))
|
||||
(((OPCODE) >= OP_TYPE##_BYTE) && ((OPCODE) <= OP_TYPE##_SWORD))
|
||||
|
||||
#define OPCODE_DATA_TYPE(OPCODE, OP_TYPE) (OPCODE - OP_TYPE##_BYTE)
|
||||
|
||||
@@ -114,40 +114,40 @@ typedef enum
|
||||
|
||||
// Comparison operations
|
||||
OP_LT_BYTE,
|
||||
OP_LT_CHAR,
|
||||
OP_LT_SBYTE,
|
||||
OP_LT_HWORD,
|
||||
OP_LT_INT,
|
||||
OP_LT_SHWORD,
|
||||
OP_LT_WORD,
|
||||
OP_LT_LONG,
|
||||
OP_LT_SWORD,
|
||||
|
||||
OP_LTE_BYTE,
|
||||
OP_LTE_CHAR,
|
||||
OP_LTE_SBYTE,
|
||||
OP_LTE_HWORD,
|
||||
OP_LTE_INT,
|
||||
OP_LTE_SHWORD,
|
||||
OP_LTE_WORD,
|
||||
OP_LTE_LONG,
|
||||
OP_LTE_SWORD,
|
||||
|
||||
OP_GT_BYTE,
|
||||
OP_GT_CHAR,
|
||||
OP_GT_SBYTE,
|
||||
OP_GT_HWORD,
|
||||
OP_GT_INT,
|
||||
OP_GT_SHWORD,
|
||||
OP_GT_WORD,
|
||||
OP_GT_LONG,
|
||||
OP_GT_SWORD,
|
||||
|
||||
OP_GTE_BYTE,
|
||||
OP_GTE_CHAR,
|
||||
OP_GTE_SBYTE,
|
||||
OP_GTE_HWORD,
|
||||
OP_GTE_INT,
|
||||
OP_GTE_SHWORD,
|
||||
OP_GTE_WORD,
|
||||
OP_GTE_LONG,
|
||||
OP_GTE_SWORD,
|
||||
|
||||
// Simple I/O
|
||||
OP_PRINT_BYTE,
|
||||
OP_PRINT_CHAR,
|
||||
OP_PRINT_SBYTE,
|
||||
OP_PRINT_HWORD,
|
||||
OP_PRINT_INT,
|
||||
OP_PRINT_SHWORD,
|
||||
OP_PRINT_WORD,
|
||||
OP_PRINT_LONG,
|
||||
OP_PRINT_SWORD,
|
||||
|
||||
// Program control flow
|
||||
OP_JUMP_ABS,
|
||||
|
||||
@@ -61,7 +61,7 @@ static_assert(DATA_TYPE_NIL == -1 && DATA_TYPE_WORD == 2,
|
||||
"Code using OPCODE_DATA_TYPE for quick same type opcode "
|
||||
"conversion may be out of date.");
|
||||
|
||||
static_assert(OP_PRINT_LONG - OP_PRINT_BYTE == 5,
|
||||
static_assert(OP_PRINT_SWORD - OP_PRINT_BYTE == 5,
|
||||
"Implementation of OP_PRINT is out of date");
|
||||
|
||||
err_t vm_execute(vm_t *vm)
|
||||
|
||||
48
vm/runtime.h
48
vm/runtime.h
@@ -223,33 +223,33 @@ static const stack_f STACK_ROUTINES[] = {
|
||||
[OP_EQ_HWORD] = vm_eq_hword,
|
||||
[OP_EQ_WORD] = vm_eq_word,
|
||||
|
||||
[OP_LT_BYTE] = vm_lt_byte,
|
||||
[OP_LT_CHAR] = vm_lt_char,
|
||||
[OP_LT_INT] = vm_lt_int,
|
||||
[OP_LT_HWORD] = vm_lt_hword,
|
||||
[OP_LT_LONG] = vm_lt_long,
|
||||
[OP_LT_WORD] = vm_lt_word,
|
||||
[OP_LT_BYTE] = vm_lt_byte,
|
||||
[OP_LT_SBYTE] = vm_lt_sbyte,
|
||||
[OP_LT_SHWORD] = vm_lt_shword,
|
||||
[OP_LT_HWORD] = vm_lt_hword,
|
||||
[OP_LT_SWORD] = vm_lt_sword,
|
||||
[OP_LT_WORD] = vm_lt_word,
|
||||
|
||||
[OP_LTE_BYTE] = vm_lte_byte,
|
||||
[OP_LTE_CHAR] = vm_lte_char,
|
||||
[OP_LTE_INT] = vm_lte_int,
|
||||
[OP_LTE_HWORD] = vm_lte_hword,
|
||||
[OP_LTE_LONG] = vm_lte_long,
|
||||
[OP_LTE_WORD] = vm_lte_word,
|
||||
[OP_LTE_BYTE] = vm_lte_byte,
|
||||
[OP_LTE_SBYTE] = vm_lte_sbyte,
|
||||
[OP_LTE_SHWORD] = vm_lte_shword,
|
||||
[OP_LTE_HWORD] = vm_lte_hword,
|
||||
[OP_LTE_SWORD] = vm_lte_sword,
|
||||
[OP_LTE_WORD] = vm_lte_word,
|
||||
|
||||
[OP_GT_BYTE] = vm_gt_byte,
|
||||
[OP_GT_CHAR] = vm_gt_char,
|
||||
[OP_GT_INT] = vm_gt_int,
|
||||
[OP_GT_HWORD] = vm_gt_hword,
|
||||
[OP_GT_LONG] = vm_gt_long,
|
||||
[OP_GT_WORD] = vm_gt_word,
|
||||
[OP_GT_BYTE] = vm_gt_byte,
|
||||
[OP_GT_SBYTE] = vm_gt_sbyte,
|
||||
[OP_GT_SHWORD] = vm_gt_shword,
|
||||
[OP_GT_HWORD] = vm_gt_hword,
|
||||
[OP_GT_SWORD] = vm_gt_sword,
|
||||
[OP_GT_WORD] = vm_gt_word,
|
||||
|
||||
[OP_GTE_BYTE] = vm_gte_byte,
|
||||
[OP_GTE_CHAR] = vm_gte_char,
|
||||
[OP_GTE_INT] = vm_gte_int,
|
||||
[OP_GTE_HWORD] = vm_gte_hword,
|
||||
[OP_GTE_LONG] = vm_gte_long,
|
||||
[OP_GTE_WORD] = vm_gte_word,
|
||||
[OP_GTE_BYTE] = vm_gte_byte,
|
||||
[OP_GTE_SBYTE] = vm_gte_sbyte,
|
||||
[OP_GTE_SHWORD] = vm_gte_shword,
|
||||
[OP_GTE_HWORD] = vm_gte_hword,
|
||||
[OP_GTE_SWORD] = vm_gte_sword,
|
||||
[OP_GTE_WORD] = vm_gte_word,
|
||||
|
||||
[OP_PLUS_BYTE] = vm_plus_byte,
|
||||
[OP_PLUS_HWORD] = vm_plus_hword,
|
||||
|
||||
Reference in New Issue
Block a user