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);
}
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);
}
}
/**
+ * 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
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,
for(i=0;i<p->n_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]]);
+ }
}
}