From 2267ce1de252db478c1d6dd516fa3f1740f8304a Mon Sep 17 00:00:00 2001 From: David Schleef Date: Wed, 29 Feb 2012 23:54:47 -0800 Subject: [PATCH] bytecode: Add bytecode for instruction flags --- orc/orcbytecode.c | 10 ++++++++++ orc/orcbytecode.h | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) 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;in_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, -- 2.7.4