From: David Schleef Date: Mon, 9 Aug 2010 23:56:13 +0000 (-0700) Subject: Add orc_program_append_2() for instruction flags X-Git-Tag: orc-0.4.7~52 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=094a52b2231091ed330717623ac0c06914b68513;p=platform%2Fupstream%2Forc.git Add orc_program_append_2() for instruction flags --- diff --git a/orc/orcfunctions.c b/orc/orcfunctions.c index cadb618..6f9e701 100644 --- a/orc/orcfunctions.c +++ b/orc/orcfunctions.c @@ -155,7 +155,7 @@ orc_memcpy (void * d1, const void * s1, int n) orc_program_add_destination (p, 1, "d1"); orc_program_add_source (p, 1, "s1"); - orc_program_append (p, "copyb", ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1); + orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, -1); result = orc_program_compile (p); } @@ -240,7 +240,7 @@ orc_memset (void * d1, int p1, int n) orc_program_add_destination (p, 1, "d1"); orc_program_add_parameter (p, 1, "p1"); - orc_program_append (p, "copyb", ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1); + orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, -1); result = orc_program_compile (p); } diff --git a/orc/orcprogram.c b/orc/orcprogram.c index 8f9dc28..bfc0d3c 100644 --- a/orc/orcprogram.c +++ b/orc/orcprogram.c @@ -494,6 +494,53 @@ orc_program_append (OrcProgram *program, const char *name, int arg0, } /** + * orc_program_append_ds_2: + * @program: a pointer to an OrcProgram structure + * @name: name of instruction + * @arg0: index of first variable + * @arg1: index of second variable + * @arg2: index of third variable + * @arg3: index of fourth variable + * + * Appends an instruction to the program, with arguments @arg0, + * @arg1, @arg2, and @arg3. + */ +void +orc_program_append_2 (OrcProgram *program, const char *name, unsigned int flags, + int arg0, int arg1, int arg2, int arg3) +{ + OrcInstruction *insn; + int args[4]; + int i; + + insn = program->insns + program->n_insns; + + insn->opcode = orc_opcode_find_by_name (name); + if (!insn->opcode) { + ORC_ERROR ("unknown opcode: %s", name); + } + insn->flags = flags; + args[0] = arg0; + args[1] = arg1; + args[2] = arg2; + args[3] = arg3; + insn->flags = flags; + i = 0; + insn->dest_args[0] = args[i++]; + if (insn->opcode->dest_size[1] != 0) { + insn->dest_args[1] = args[i++]; + } + if (insn->opcode->src_size[0] != 0) { + insn->src_args[0] = args[i++]; + } + if (insn->opcode->src_size[1] != 0) { + insn->src_args[1] = args[i++]; + } + + program->n_insns++; +} + +/** * orc_program_find_var_by_name: * @program: a pointer to an OrcProgram structure * @name: name of instruction diff --git a/orc/orcprogram.h b/orc/orcprogram.h index bb7a18c..b3862ff 100644 --- a/orc/orcprogram.h +++ b/orc/orcprogram.h @@ -568,6 +568,8 @@ void orc_program_set_constant_n (OrcProgram *program, int n); void orc_program_set_constant_m (OrcProgram *program, int m); void orc_program_append (OrcProgram *p, const char *opcode, int arg0, int arg1, int arg2); +void orc_program_append_2 (OrcProgram *program, const char *name, + unsigned int flags, int arg0, int arg1, int arg2, int arg3); void orc_program_append_str (OrcProgram *p, const char *opcode, const char * arg0, const char * arg1, const char * arg2); void orc_program_append_str_2 (OrcProgram *program, const char *name, diff --git a/tools/orcc.c b/tools/orcc.c index e855523..1e115db 100644 --- a/tools/orcc.c +++ b/tools/orcc.c @@ -659,14 +659,31 @@ output_code (OrcProgram *p, FILE *output) for(i=0;in_insns;i++){ OrcInstruction *insn = p->insns + i; - if (p->vars[insn->src_args[1]].size != 0) { - fprintf(output, " orc_program_append (p, \"%s\", %s, %s, %s);\n", - insn->opcode->name, enumnames[insn->dest_args[0]], - enumnames[insn->src_args[0]], enumnames[insn->src_args[1]]); + + if (compat < ORC_VERSION(0,4,6,1)) { + if (insn->flags) { + REQUIRE(0,4,6,1); + } + + if (p->vars[insn->src_args[1]].size != 0) { + fprintf(output, " orc_program_append (p, \"%s\", %s, %s, %s);\n", + insn->opcode->name, enumnames[insn->dest_args[0]], + enumnames[insn->src_args[0]], enumnames[insn->src_args[1]]); + } else { + fprintf(output, " orc_program_append_ds (p, \"%s\", %s, %s);\n", + insn->opcode->name, enumnames[insn->dest_args[0]], + enumnames[insn->src_args[0]]); + } } else { - fprintf(output, " orc_program_append_ds (p, \"%s\", %s, %s);\n", - insn->opcode->name, enumnames[insn->dest_args[0]], - enumnames[insn->src_args[0]]); + if (p->vars[insn->src_args[1]].size != 0) { + fprintf(output, " orc_program_append_2 (p, \"%s\", %d, %s, %s, %s, -1);\n", + insn->opcode->name, insn->flags, enumnames[insn->dest_args[0]], + enumnames[insn->src_args[0]], enumnames[insn->src_args[1]]); + } else { + fprintf(output, " orc_program_append_2 (p, \"%s\", %d, %s, %s, -1, -1);\n", + insn->opcode->name, insn->flags, enumnames[insn->dest_args[0]], + enumnames[insn->src_args[0]]); + } } }