diff options
author | David Schleef <ds@schleef.org> | 2012-03-01 11:54:47 +0400 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2012-03-01 11:54:47 +0400 |
commit | 2267ce1de252db478c1d6dd516fa3f1740f8304a (patch) | |
tree | 5d6fb4fcde9b91eab03f8ed0ce8fc0408ca3abaf | |
parent | dd1a8b9d761aca09530cf68c51d6503c6286c5fc (diff) |
bytecode: Add bytecode for instruction flags
-rw-r--r-- | orc/orcbytecode.c | 10 | ||||
-rw-r--r-- | orc/orcbytecode.h | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/orc/orcbytecode.c b/orc/orcbytecode.c index 0d86373..19af32c 100644 --- a/orc/orcbytecode.c +++ b/orc/orcbytecode.c @@ -155,6 +155,10 @@ orc_bytecode_from_program (OrcProgram *p) for(i=0;i<p->n_insns;i++){ OrcInstruction *insn = p->insns + i; + if (insn->flags) { + bytecode_append_code (bytecode, ORC_BC_INSTRUCTION_FLAGS); + bytecode_append_int (bytecode, insn->flags); + } bytecode_append_code (bytecode, (insn->opcode - opcode_set->opcodes) + 32); if (insn->opcode->dest_size[0] != 0) { bytecode_append_int (bytecode, insn->dest_args[0]); @@ -376,6 +380,7 @@ orc_bytecode_parse_function (OrcProgram *program, const orc_uint8 *bytecode) int size; int alignment; OrcOpcodeSet *opcode_set; + int instruction_flags = 0; memset (parse, 0, sizeof(*parse)); parse->bytecode = bytecode; @@ -470,6 +475,9 @@ orc_bytecode_parse_function (OrcProgram *program, const orc_uint8 *bytecode) size = orc_bytecode_parse_get_int (parse); orc_program_add_temporary (program, size, "t"); break; + case ORC_BC_INSTRUCTION_FLAGS: + instruction_flags = orc_bytecode_parse_get_int (parse); + break; default: break; } @@ -494,6 +502,8 @@ orc_bytecode_parse_function (OrcProgram *program, const orc_uint8 *bytecode) if (insn->opcode->src_size[2] != 0) { insn->src_args[2] = orc_bytecode_parse_get_int (parse); } + insn->flags = instruction_flags; + instruction_flags = 0; program->n_insns++; } diff --git a/orc/orcbytecode.h b/orc/orcbytecode.h index 23aae09..c71f57b 100644 --- a/orc/orcbytecode.h +++ b/orc/orcbytecode.h @@ -29,7 +29,7 @@ typedef enum { ORC_BC_ADD_PARAMETER_INT64, ORC_BC_ADD_PARAMETER_DOUBLE, ORC_BC_ADD_TEMPORARY, - ORC_BC_RESERVED_21, + ORC_BC_INSTRUCTION_FLAGS, ORC_BC_RESERVED_22, ORC_BC_RESERVED_23, ORC_BC_RESERVED_24, |