added JUMP2_FORWARD and JUMP2_BACKWARD
This commit is contained in:
@ -43,7 +43,6 @@
|
||||
#define STIX_DEBUG_GC_001
|
||||
|
||||
|
||||
|
||||
#include <stdio.h> /* TODO: delete these header inclusion lines */
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
@ -477,7 +476,7 @@ struct stix_compiler_t
|
||||
# define MAX_CODE_NBLKARGS (0xFFu)
|
||||
# define MAX_CODE_NBLKTMPRS (0xFFu)
|
||||
# define MAX_CODE_PRIMNO (0xFFFFu)
|
||||
# define MAX_CODE_JUMP (0xFF)
|
||||
# define MAX_CODE_JUMP (0xFFu)
|
||||
#elif defined(STIX_BCODE_LONG_PARAM_SIZE) && (STIX_BCODE_LONG_PARAM_SIZE == 2)
|
||||
# define MAX_CODE_INDEX (0xFFFFu)
|
||||
# define MAX_CODE_NTMPRS (0xFFFFu)
|
||||
@ -485,14 +484,11 @@ struct stix_compiler_t
|
||||
# define MAX_CODE_NBLKARGS (0xFFFFu)
|
||||
# define MAX_CODE_NBLKTMPRS (0xFFFFu)
|
||||
# define MAX_CODE_PRIMNO (0xFFFFu)
|
||||
# define MAX_CODE_JUMP (0xFFFF)
|
||||
# define MAX_CODE_JUMP (0xFFFFu)
|
||||
#else
|
||||
# error Unsupported STIX_BCODE_LONG_PARAM_SIZE
|
||||
#endif
|
||||
|
||||
#define MAX_CODE_BLKCODE MAX_CODE_JUMP
|
||||
|
||||
|
||||
|
||||
/*
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
@ -527,8 +523,8 @@ SHORT INSTRUCTION CODE LONG INSTRUCTION C
|
||||
72-75 0100 10XX JUMP_BACKWARD 200 1100 1000 XXXXXXXX JUMP_BACKWARD_X
|
||||
76-79 0100 11XX JUMP_IF_TRUE 204 1100 1100 XXXXXXXX JUMP_IF_TRUE_X
|
||||
80-83 0101 00XX JUMP_IF_FALSE 208 1101 0000 XXXXXXXX JUMP_IF_FALSE_X
|
||||
84-87 0101 01XX JUMP_BY_OFFSET 212 1101 0100 XXXXXXXX JUMP_BY_OFFSET_X
|
||||
# for JUMP_BY_OFFSET, XX is an index to literal frame pointing to a small integer.
|
||||
|
||||
84-87 0101 01XX UNUSED
|
||||
|
||||
vv
|
||||
88-91 0101 10XX YYYYYYYY STORE_INTO_CTXTEMPVAR 216 1101 1000 XXXXXXXX YYYYYYYY STORE_INTO_CTXTEMPVAR_X (bit 3 on, bit 2 off)
|
||||
@ -557,117 +553,114 @@ SHORT INSTRUCTION CODE LONG INSTRUCTION C
|
||||
|
||||
enum stix_bcode_t
|
||||
{
|
||||
BCODE_STORE_INTO_INSTVAR_0 = 0x00,
|
||||
BCODE_STORE_INTO_INSTVAR_1 = 0x01,
|
||||
BCODE_STORE_INTO_INSTVAR_2 = 0x02,
|
||||
BCODE_STORE_INTO_INSTVAR_3 = 0x03,
|
||||
BCODE_STORE_INTO_INSTVAR_0 = 0x00,
|
||||
BCODE_STORE_INTO_INSTVAR_1 = 0x01,
|
||||
BCODE_STORE_INTO_INSTVAR_2 = 0x02,
|
||||
BCODE_STORE_INTO_INSTVAR_3 = 0x03,
|
||||
|
||||
BCODE_STORE_INTO_INSTVAR_4 = 0x04,
|
||||
BCODE_STORE_INTO_INSTVAR_5 = 0x05,
|
||||
BCODE_STORE_INTO_INSTVAR_6 = 0x06,
|
||||
BCODE_STORE_INTO_INSTVAR_7 = 0x07,
|
||||
BCODE_STORE_INTO_INSTVAR_4 = 0x04,
|
||||
BCODE_STORE_INTO_INSTVAR_5 = 0x05,
|
||||
BCODE_STORE_INTO_INSTVAR_6 = 0x06,
|
||||
BCODE_STORE_INTO_INSTVAR_7 = 0x07,
|
||||
|
||||
BCODE_POP_INTO_INSTVAR_0 = 0x08,
|
||||
BCODE_POP_INTO_INSTVAR_1 = 0x09,
|
||||
BCODE_POP_INTO_INSTVAR_2 = 0x0A,
|
||||
BCODE_POP_INTO_INSTVAR_3 = 0x0B,
|
||||
BCODE_POP_INTO_INSTVAR_0 = 0x08,
|
||||
BCODE_POP_INTO_INSTVAR_1 = 0x09,
|
||||
BCODE_POP_INTO_INSTVAR_2 = 0x0A,
|
||||
BCODE_POP_INTO_INSTVAR_3 = 0x0B,
|
||||
|
||||
BCODE_POP_INTO_INSTVAR_4 = 0x0C,
|
||||
BCODE_POP_INTO_INSTVAR_5 = 0x0D,
|
||||
BCODE_POP_INTO_INSTVAR_6 = 0x0E,
|
||||
BCODE_POP_INTO_INSTVAR_7 = 0x0F,
|
||||
BCODE_POP_INTO_INSTVAR_4 = 0x0C,
|
||||
BCODE_POP_INTO_INSTVAR_5 = 0x0D,
|
||||
BCODE_POP_INTO_INSTVAR_6 = 0x0E,
|
||||
BCODE_POP_INTO_INSTVAR_7 = 0x0F,
|
||||
|
||||
BCODE_PUSH_INSTVAR_0 = 0x10,
|
||||
BCODE_PUSH_INSTVAR_1 = 0x11,
|
||||
BCODE_PUSH_INSTVAR_2 = 0x12,
|
||||
BCODE_PUSH_INSTVAR_3 = 0x13,
|
||||
BCODE_PUSH_INSTVAR_0 = 0x10,
|
||||
BCODE_PUSH_INSTVAR_1 = 0x11,
|
||||
BCODE_PUSH_INSTVAR_2 = 0x12,
|
||||
BCODE_PUSH_INSTVAR_3 = 0x13,
|
||||
|
||||
BCODE_PUSH_INSTVAR_4 = 0x14,
|
||||
BCODE_PUSH_INSTVAR_5 = 0x15,
|
||||
BCODE_PUSH_INSTVAR_6 = 0x16,
|
||||
BCODE_PUSH_INSTVAR_7 = 0x17,
|
||||
BCODE_PUSH_INSTVAR_4 = 0x14,
|
||||
BCODE_PUSH_INSTVAR_5 = 0x15,
|
||||
BCODE_PUSH_INSTVAR_6 = 0x16,
|
||||
BCODE_PUSH_INSTVAR_7 = 0x17,
|
||||
|
||||
BCODE_PUSH_TEMPVAR_0 = 0x18,
|
||||
BCODE_PUSH_TEMPVAR_1 = 0x19,
|
||||
BCODE_PUSH_TEMPVAR_2 = 0x1A,
|
||||
BCODE_PUSH_TEMPVAR_3 = 0x1B,
|
||||
BCODE_PUSH_TEMPVAR_0 = 0x18,
|
||||
BCODE_PUSH_TEMPVAR_1 = 0x19,
|
||||
BCODE_PUSH_TEMPVAR_2 = 0x1A,
|
||||
BCODE_PUSH_TEMPVAR_3 = 0x1B,
|
||||
|
||||
BCODE_PUSH_TEMPVAR_4 = 0x1C,
|
||||
BCODE_PUSH_TEMPVAR_5 = 0x1D,
|
||||
BCODE_PUSH_TEMPVAR_6 = 0x1E,
|
||||
BCODE_PUSH_TEMPVAR_7 = 0x1F,
|
||||
BCODE_PUSH_TEMPVAR_4 = 0x1C,
|
||||
BCODE_PUSH_TEMPVAR_5 = 0x1D,
|
||||
BCODE_PUSH_TEMPVAR_6 = 0x1E,
|
||||
BCODE_PUSH_TEMPVAR_7 = 0x1F,
|
||||
|
||||
BCODE_STORE_INTO_TEMPVAR_0 = 0x20,
|
||||
BCODE_STORE_INTO_TEMPVAR_1 = 0x21,
|
||||
BCODE_STORE_INTO_TEMPVAR_2 = 0x22,
|
||||
BCODE_STORE_INTO_TEMPVAR_3 = 0x23,
|
||||
BCODE_STORE_INTO_TEMPVAR_0 = 0x20,
|
||||
BCODE_STORE_INTO_TEMPVAR_1 = 0x21,
|
||||
BCODE_STORE_INTO_TEMPVAR_2 = 0x22,
|
||||
BCODE_STORE_INTO_TEMPVAR_3 = 0x23,
|
||||
|
||||
BCODE_STORE_INTO_TEMPVAR_4 = 0x24,
|
||||
BCODE_STORE_INTO_TEMPVAR_5 = 0x25,
|
||||
BCODE_STORE_INTO_TEMPVAR_6 = 0x26,
|
||||
BCODE_STORE_INTO_TEMPVAR_7 = 0x27,
|
||||
BCODE_STORE_INTO_TEMPVAR_4 = 0x24,
|
||||
BCODE_STORE_INTO_TEMPVAR_5 = 0x25,
|
||||
BCODE_STORE_INTO_TEMPVAR_6 = 0x26,
|
||||
BCODE_STORE_INTO_TEMPVAR_7 = 0x27,
|
||||
|
||||
BCODE_POP_INTO_TEMPVAR_0 = 0x28,
|
||||
BCODE_POP_INTO_TEMPVAR_1 = 0x29,
|
||||
BCODE_POP_INTO_TEMPVAR_2 = 0x2A,
|
||||
BCODE_POP_INTO_TEMPVAR_3 = 0x2B,
|
||||
BCODE_POP_INTO_TEMPVAR_0 = 0x28,
|
||||
BCODE_POP_INTO_TEMPVAR_1 = 0x29,
|
||||
BCODE_POP_INTO_TEMPVAR_2 = 0x2A,
|
||||
BCODE_POP_INTO_TEMPVAR_3 = 0x2B,
|
||||
|
||||
BCODE_POP_INTO_TEMPVAR_4 = 0x2C,
|
||||
BCODE_POP_INTO_TEMPVAR_5 = 0x2D,
|
||||
BCODE_POP_INTO_TEMPVAR_6 = 0x2E,
|
||||
BCODE_POP_INTO_TEMPVAR_7 = 0x2F,
|
||||
BCODE_POP_INTO_TEMPVAR_4 = 0x2C,
|
||||
BCODE_POP_INTO_TEMPVAR_5 = 0x2D,
|
||||
BCODE_POP_INTO_TEMPVAR_6 = 0x2E,
|
||||
BCODE_POP_INTO_TEMPVAR_7 = 0x2F,
|
||||
|
||||
BCODE_PUSH_LITERAL_0 = 0x30,
|
||||
BCODE_PUSH_LITERAL_1 = 0x31,
|
||||
BCODE_PUSH_LITERAL_2 = 0x32,
|
||||
BCODE_PUSH_LITERAL_3 = 0x33,
|
||||
BCODE_PUSH_LITERAL_0 = 0x30,
|
||||
BCODE_PUSH_LITERAL_1 = 0x31,
|
||||
BCODE_PUSH_LITERAL_2 = 0x32,
|
||||
BCODE_PUSH_LITERAL_3 = 0x33,
|
||||
|
||||
BCODE_PUSH_LITERAL_4 = 0x34,
|
||||
BCODE_PUSH_LITERAL_5 = 0x35,
|
||||
BCODE_PUSH_LITERAL_6 = 0x36,
|
||||
BCODE_PUSH_LITERAL_7 = 0x37,
|
||||
BCODE_PUSH_LITERAL_4 = 0x34,
|
||||
BCODE_PUSH_LITERAL_5 = 0x35,
|
||||
BCODE_PUSH_LITERAL_6 = 0x36,
|
||||
BCODE_PUSH_LITERAL_7 = 0x37,
|
||||
|
||||
/* -------------------------------------- */
|
||||
|
||||
BCODE_STORE_INTO_OBJECT_0 = 0x38,
|
||||
BCODE_STORE_INTO_OBJECT_1 = 0x39,
|
||||
BCODE_STORE_INTO_OBJECT_2 = 0x3A,
|
||||
BCODE_STORE_INTO_OBJECT_3 = 0x3B,
|
||||
BCODE_STORE_INTO_OBJECT_0 = 0x38,
|
||||
BCODE_STORE_INTO_OBJECT_1 = 0x39,
|
||||
BCODE_STORE_INTO_OBJECT_2 = 0x3A,
|
||||
BCODE_STORE_INTO_OBJECT_3 = 0x3B,
|
||||
|
||||
BCODE_POP_INTO_OBJECT_0 = 0x3C,
|
||||
BCODE_POP_INTO_OBJECT_1 = 0x3D,
|
||||
BCODE_POP_INTO_OBJECT_2 = 0x3E,
|
||||
BCODE_POP_INTO_OBJECT_3 = 0x3F,
|
||||
BCODE_POP_INTO_OBJECT_0 = 0x3C,
|
||||
BCODE_POP_INTO_OBJECT_1 = 0x3D,
|
||||
BCODE_POP_INTO_OBJECT_2 = 0x3E,
|
||||
BCODE_POP_INTO_OBJECT_3 = 0x3F,
|
||||
|
||||
BCODE_PUSH_OBJECT_0 = 0x40,
|
||||
BCODE_PUSH_OBJECT_1 = 0x41,
|
||||
BCODE_PUSH_OBJECT_2 = 0x42,
|
||||
BCODE_PUSH_OBJECT_3 = 0x43,
|
||||
BCODE_PUSH_OBJECT_0 = 0x40,
|
||||
BCODE_PUSH_OBJECT_1 = 0x41,
|
||||
BCODE_PUSH_OBJECT_2 = 0x42,
|
||||
BCODE_PUSH_OBJECT_3 = 0x43,
|
||||
|
||||
BCODE_JUMP_FORWARD_0 = 0x44, /* 68 */
|
||||
BCODE_JUMP_FORWARD_1 = 0x45, /* 69 */
|
||||
BCODE_JUMP_FORWARD_2 = 0x46, /* 70 */
|
||||
BCODE_JUMP_FORWARD_3 = 0x47, /* 71 */
|
||||
BCODE_JUMP_FORWARD_0 = 0x44, /* 68 */
|
||||
BCODE_JUMP_FORWARD_1 = 0x45, /* 69 */
|
||||
BCODE_JUMP_FORWARD_2 = 0x46, /* 70 */
|
||||
BCODE_JUMP_FORWARD_3 = 0x47, /* 71 */
|
||||
|
||||
BCODE_JUMP_BACKWARD_0 = 0x48,
|
||||
BCODE_JUMP_BACKWARD_1 = 0x49,
|
||||
BCODE_JUMP_BACKWARD_2 = 0x4A,
|
||||
BCODE_JUMP_BACKWARD_3 = 0x4B,
|
||||
BCODE_JUMP_BACKWARD_0 = 0x48,
|
||||
BCODE_JUMP_BACKWARD_1 = 0x49,
|
||||
BCODE_JUMP_BACKWARD_2 = 0x4A,
|
||||
BCODE_JUMP_BACKWARD_3 = 0x4B,
|
||||
|
||||
BCODE_JUMP_IF_TRUE_0 = 0x4C,
|
||||
BCODE_JUMP_IF_TRUE_1 = 0x4D,
|
||||
BCODE_JUMP_IF_TRUE_2 = 0x4E,
|
||||
BCODE_JUMP_IF_TRUE_3 = 0x4F,
|
||||
BCODE_JUMP_IF_TRUE_0 = 0x4C,
|
||||
BCODE_JUMP_IF_TRUE_1 = 0x4D,
|
||||
BCODE_JUMP_IF_TRUE_2 = 0x4E,
|
||||
BCODE_JUMP_IF_TRUE_3 = 0x4F,
|
||||
|
||||
BCODE_JUMP_IF_FALSE_0 = 0x50, /* 80 */
|
||||
BCODE_JUMP_IF_FALSE_1 = 0x51, /* 81 */
|
||||
BCODE_JUMP_IF_FALSE_2 = 0x52, /* 82 */
|
||||
BCODE_JUMP_IF_FALSE_3 = 0x53, /* 83 */
|
||||
|
||||
BCODE_JUMP_IF_FALSE_0 = 0x50,
|
||||
BCODE_JUMP_IF_FALSE_1 = 0x51,
|
||||
BCODE_JUMP_IF_FALSE_2 = 0x52,
|
||||
BCODE_JUMP_IF_FALSE_3 = 0x53,
|
||||
|
||||
BCODE_JUMP_BY_OFFSET_0 = 0x54,
|
||||
BCODE_JUMP_BY_OFFSET_1 = 0x55,
|
||||
BCODE_JUMP_BY_OFFSET_2 = 0x56,
|
||||
BCODE_JUMP_BY_OFFSET_3 = 0x57,
|
||||
|
||||
BCODE_STORE_INTO_CTXTEMPVAR_0 = 0x58, /* 88 */
|
||||
BCODE_STORE_INTO_CTXTEMPVAR_1 = 0x59, /* 89 */
|
||||
@ -729,7 +722,7 @@ enum stix_bcode_t
|
||||
BCODE_JUMP_BACKWARD_X = 0xC8, /* 200 */
|
||||
BCODE_JUMP_IF_TRUE_X = 0xCC, /* 204 */
|
||||
BCODE_JUMP_IF_FALSE_X = 0xD0, /* 208 */
|
||||
BCODE_JUMP_BY_OFFSET_X = 0xD4, /* 212 */
|
||||
|
||||
|
||||
BCODE_STORE_INTO_CTXTEMPVAR_X = 0xD8, /* 216 */
|
||||
BCODE_POP_INTO_CTXTEMPVAR_X = 0xDC, /* 220 */
|
||||
@ -743,15 +736,18 @@ enum stix_bcode_t
|
||||
BCODE_SEND_MESSAGE_TO_SUPER_X = 0xF4, /* 244 */
|
||||
|
||||
|
||||
BCODE_PUSH_RECEIVER = 0x81,
|
||||
BCODE_PUSH_NIL = 0x82,
|
||||
BCODE_PUSH_TRUE = 0x83,
|
||||
BCODE_PUSH_FALSE = 0x84,
|
||||
BCODE_PUSH_CONTEXT = 0x85,
|
||||
BCODE_PUSH_NEGONE = 0x86,
|
||||
BCODE_PUSH_ZERO = 0x87,
|
||||
BCODE_PUSH_ONE = 0x89,
|
||||
BCODE_PUSH_TWO = 0x91,
|
||||
BCODE_JUMP2_FORWARD = 0xC5, /* 197 */
|
||||
BCODE_JUMP2_BACKWARD = 0xC9, /* 201 */
|
||||
|
||||
BCODE_PUSH_RECEIVER = 0x81, /* 129 */
|
||||
BCODE_PUSH_NIL = 0x82, /* 130 */
|
||||
BCODE_PUSH_TRUE = 0x83, /* 131 */
|
||||
BCODE_PUSH_FALSE = 0x84, /* 132 */
|
||||
BCODE_PUSH_CONTEXT = 0x85, /* 133 */
|
||||
BCODE_PUSH_NEGONE = 0x86, /* 134 */
|
||||
BCODE_PUSH_ZERO = 0x87, /* 135 */
|
||||
BCODE_PUSH_ONE = 0x89, /* 137 */
|
||||
BCODE_PUSH_TWO = 0x8A, /* 138 */
|
||||
|
||||
/* UNUSED 0xE8 - 0xF8 */
|
||||
|
||||
|
Reference in New Issue
Block a user