Lines Matching refs:compiler

17 void orc_arm_emit_loop (OrcCompiler *compiler);
21 void orc_compiler_orc_arm_init (OrcCompiler *compiler);
23 void orc_compiler_orc_arm_assemble (OrcCompiler *compiler);
25 void arm_add_strides (OrcCompiler *compiler);
28 orc_arm_emit_prologue (OrcCompiler *compiler) in orc_arm_emit_prologue() argument
33 orc_compiler_append_code(compiler,".global %s\n", compiler->program->name); in orc_arm_emit_prologue()
34 orc_compiler_append_code(compiler,"%s:\n", compiler->program->name); in orc_arm_emit_prologue()
37 if (compiler->used_regs[ORC_GP_REG_BASE + i] && in orc_arm_emit_prologue()
38 compiler->save_regs[ORC_GP_REG_BASE + i]) { in orc_arm_emit_prologue()
42 if (regs) orc_arm_emit_push (compiler, regs, 0U); in orc_arm_emit_prologue()
47 orc_arm_dump_insns (OrcCompiler *compiler) in orc_arm_dump_insns() argument
49 orc_arm_emit_label (compiler, 0); in orc_arm_dump_insns()
51 orc_arm_emit_add_r (compiler, ORC_ARM_COND_AL, 0, ORC_ARM_A2, ORC_ARM_A3, ORC_ARM_A4); in orc_arm_dump_insns()
52 orc_arm_emit_sub_r (compiler, ORC_ARM_COND_AL, 0, ORC_ARM_A2, ORC_ARM_A3, ORC_ARM_A4); in orc_arm_dump_insns()
53 orc_arm_emit_push (compiler, 0x06, 0U); in orc_arm_dump_insns()
54 orc_arm_emit_mov_r (compiler, ORC_ARM_COND_AL, 0, ORC_ARM_A2, ORC_ARM_A3); in orc_arm_dump_insns()
56 orc_arm_emit_branch (compiler, ORC_ARM_COND_LE, 0); in orc_arm_dump_insns()
57 orc_arm_emit_branch (compiler, ORC_ARM_COND_AL, 0); in orc_arm_dump_insns()
59 orc_arm_emit_load_imm (compiler, ORC_ARM_A3, 0xa500); in orc_arm_dump_insns()
60 orc_arm_loadw (compiler, ORC_ARM_A3, ORC_ARM_A4, 0xa5); in orc_arm_dump_insns()
61 orc_arm_emit_load_reg (compiler, ORC_ARM_A3, ORC_ARM_A4, 0x5a5); in orc_arm_dump_insns()
65 orc_arm_emit_epilogue (OrcCompiler *compiler) in orc_arm_emit_epilogue() argument
71 if (compiler->used_regs[ORC_GP_REG_BASE + i] && in orc_arm_emit_epilogue()
72 compiler->save_regs[ORC_GP_REG_BASE + i]) { in orc_arm_emit_epilogue()
76 if (regs) orc_arm_emit_pop (compiler, regs, 0U); in orc_arm_emit_epilogue()
77 orc_arm_emit_bx_lr (compiler); in orc_arm_emit_epilogue()
124 orc_compiler_orc_arm_init (OrcCompiler *compiler) in orc_compiler_orc_arm_init() argument
129 compiler->valid_regs[i] = 1; in orc_compiler_orc_arm_init()
132 compiler->valid_regs[ORC_ARM_IP] = 0; in orc_compiler_orc_arm_init()
133 compiler->valid_regs[ORC_ARM_SP] = 0; in orc_compiler_orc_arm_init()
134 compiler->valid_regs[ORC_ARM_LR] = 0; in orc_compiler_orc_arm_init()
135 compiler->valid_regs[ORC_ARM_PC] = 0; in orc_compiler_orc_arm_init()
137 compiler->save_regs[ORC_GP_REG_BASE+i] = 1; in orc_compiler_orc_arm_init()
141 compiler->alloc_regs[i] = 0; in orc_compiler_orc_arm_init()
142 compiler->used_regs[i] = 0; in orc_compiler_orc_arm_init()
144 compiler->exec_reg = ORC_ARM_A1; in orc_compiler_orc_arm_init()
145 compiler->valid_regs[compiler->exec_reg] = 0; in orc_compiler_orc_arm_init()
146 compiler->gp_tmpreg = ORC_ARM_A2; in orc_compiler_orc_arm_init()
147 compiler->valid_regs[compiler->gp_tmpreg] = 0; in orc_compiler_orc_arm_init()
148 compiler->tmpreg = ORC_ARM_A3; in orc_compiler_orc_arm_init()
149 compiler->valid_regs[compiler->tmpreg] = 0; in orc_compiler_orc_arm_init()
151 compiler->loop_shift = 0; in orc_compiler_orc_arm_init()
155 orc_arm_load_constants_outer (OrcCompiler *compiler) in orc_arm_load_constants_outer() argument
159 if (compiler->vars[i].name == NULL) continue; in orc_arm_load_constants_outer()
160 switch (compiler->vars[i].vartype) { in orc_arm_load_constants_outer()
166 ORC_PROGRAM_ERROR(compiler,"unimplemented"); in orc_arm_load_constants_outer()
181 for(i=0;i<compiler->n_insns;i++){ in orc_arm_load_constants_outer()
182 OrcInstruction *insn = compiler->insns + i; in orc_arm_load_constants_outer()
188 ORC_ASM_CODE(compiler,"# %d: %s\n", i, insn->opcode->name); in orc_arm_load_constants_outer()
192 rule->emit (compiler, rule->emit_user, insn); in orc_arm_load_constants_outer()
194 ORC_COMPILER_ERROR(compiler,"No rule for: %s", opcode->name); in orc_arm_load_constants_outer()
200 orc_arm_load_constants_inner (OrcCompiler *compiler) in orc_arm_load_constants_inner() argument
204 if (compiler->vars[i].name == NULL) continue; in orc_arm_load_constants_inner()
205 switch (compiler->vars[i].vartype) { in orc_arm_load_constants_inner()
211 orc_arm_emit_load_reg (compiler, in orc_arm_load_constants_inner()
212 compiler->vars[i].ptr_register, in orc_arm_load_constants_inner()
213 compiler->exec_reg, ORC_STRUCT_OFFSET(OrcExecutor, arrays[i])); in orc_arm_load_constants_inner()
223 orc_arm_emit_load_src (OrcCompiler *compiler, OrcVariable *var)
228 i = var - compiler->vars;
236 switch (var->size << compiler->loop_shift) {
238 orc_arm_loadb (compiler, var->alloc, ptr_reg, 0);
243 orc_arm_loadw (compiler, var->alloc, ptr_reg, 0);
248 orc_arm_loadl (compiler, var->alloc, ptr_reg, 0);
258 ORC_COMPILER_ERROR(compiler, "bad size %d", var->size << compiler->loop_shift);
263 orc_arm_emit_store_dest (OrcCompiler *compiler, OrcVariable *var)
273 switch (var->size << compiler->loop_shift) {
275 orc_arm_storeb (compiler, ptr_reg, 0, var->alloc);
280 orc_arm_storew (compiler, ptr_reg, 0, var->alloc);
285 orc_arm_storel (compiler, ptr_reg, 0, var->alloc);
298 ORC_COMPILER_ERROR(compiler, "bad size %d", var->size << compiler->loop_shift);
304 orc_compiler_orc_arm_assemble (OrcCompiler *compiler) in orc_compiler_orc_arm_assemble() argument
308 compiler->vars[dest_var].is_aligned = FALSE; in orc_compiler_orc_arm_assemble()
310 orc_arm_emit_prologue (compiler); in orc_compiler_orc_arm_assemble()
312 orc_arm_load_constants_outer (compiler); in orc_compiler_orc_arm_assemble()
314 if (compiler->program->is_2d) { in orc_compiler_orc_arm_assemble()
315 if (compiler->program->constant_m > 0) { in orc_compiler_orc_arm_assemble()
316 orc_arm_emit_load_imm (compiler, ORC_ARM_A3, compiler->program->constant_m in orc_compiler_orc_arm_assemble()
318 orc_arm_emit_store_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in orc_compiler_orc_arm_assemble()
321 orc_arm_emit_load_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in orc_compiler_orc_arm_assemble()
323 orc_arm_emit_store_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in orc_compiler_orc_arm_assemble()
327 orc_arm_emit_label (compiler, 8); in orc_compiler_orc_arm_assemble()
330 orc_arm_emit_load_reg (compiler, ORC_ARM_IP, compiler->exec_reg, in orc_compiler_orc_arm_assemble()
332 orc_arm_load_constants_inner (compiler); in orc_compiler_orc_arm_assemble()
334 orc_arm_emit_label (compiler, 1); in orc_compiler_orc_arm_assemble()
336 orc_arm_emit_cmp_i (compiler, ORC_ARM_COND_AL, ORC_ARM_IP, 0); in orc_compiler_orc_arm_assemble()
337 orc_arm_emit_branch (compiler, ORC_ARM_COND_EQ, 3); in orc_compiler_orc_arm_assemble()
339 orc_arm_emit_label (compiler, 2); in orc_compiler_orc_arm_assemble()
340 orc_arm_emit_loop (compiler); in orc_compiler_orc_arm_assemble()
341 orc_arm_emit_sub_i (compiler, ORC_ARM_COND_AL, 0, ORC_ARM_IP, ORC_ARM_IP, 1); in orc_compiler_orc_arm_assemble()
342 orc_arm_emit_cmp_i (compiler, ORC_ARM_COND_AL, ORC_ARM_IP, 0); in orc_compiler_orc_arm_assemble()
343 orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 2); in orc_compiler_orc_arm_assemble()
344 orc_arm_emit_label (compiler, 3); in orc_compiler_orc_arm_assemble()
346 if (compiler->program->is_2d) { in orc_compiler_orc_arm_assemble()
347 arm_add_strides (compiler); in orc_compiler_orc_arm_assemble()
349 orc_arm_emit_load_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in orc_compiler_orc_arm_assemble()
351 orc_arm_emit_sub_imm (compiler, ORC_ARM_A3, ORC_ARM_A3, 1, TRUE); in orc_compiler_orc_arm_assemble()
352 orc_arm_emit_store_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in orc_compiler_orc_arm_assemble()
354 orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 8); in orc_compiler_orc_arm_assemble()
357 orc_arm_emit_epilogue (compiler); in orc_compiler_orc_arm_assemble()
359 orc_arm_do_fixups (compiler); in orc_compiler_orc_arm_assemble()
363 orc_arm_emit_loop (OrcCompiler *compiler) in orc_arm_emit_loop() argument
371 for(j=0;j<compiler->n_insns;j++){ in orc_arm_emit_loop()
372 insn = compiler->insns + j; in orc_arm_emit_loop()
377 orc_compiler_append_code(compiler,"# %d: %s", j, insn->opcode->name); in orc_arm_emit_loop()
382 args[k] = compiler->vars + insn->args[k]; in orc_arm_emit_loop()
383 orc_compiler_append_code(compiler," %d", args[k]->alloc); in orc_arm_emit_loop()
385 orc_compiler_append_code(compiler," (chained)"); in orc_arm_emit_loop()
389 orc_compiler_append_code(compiler,"\n"); in orc_arm_emit_loop()
394 switch (compiler->vars[insn->src_args[k]].vartype) { in orc_arm_emit_loop()
412 int src = ORC_SRC_ARG (compiler, insn, 0); in orc_arm_emit_loop()
413 int dest = ORC_DEST_ARG (compiler, insn, 0); in orc_arm_emit_loop()
416 orc_arm_emit_mov_r (compiler, ORC_ARM_COND_AL, 0, dest, src); in orc_arm_emit_loop()
418 rule->emit (compiler, rule->emit_user, insn); in orc_arm_emit_loop()
420 orc_compiler_append_code(compiler,"No rule for: %s\n", opcode->name); in orc_arm_emit_loop()
426 switch (compiler->vars[insn->dest_args[k]].vartype) { in orc_arm_emit_loop()
439 if (compiler->vars[k].name == NULL) continue; in orc_arm_emit_loop()
440 if (compiler->vars[k].vartype == ORC_VAR_TYPE_SRC || in orc_arm_emit_loop()
441 compiler->vars[k].vartype == ORC_VAR_TYPE_DEST) { in orc_arm_emit_loop()
442 if (compiler->vars[k].ptr_register) { in orc_arm_emit_loop()
443 orc_arm_emit_add_i (compiler, ORC_ARM_COND_AL, 0, in orc_arm_emit_loop()
444 compiler->vars[k].ptr_register, in orc_arm_emit_loop()
445 compiler->vars[k].ptr_register, in orc_arm_emit_loop()
446 compiler->vars[k].size << compiler->loop_shift); in orc_arm_emit_loop()
458 arm_add_strides (OrcCompiler *compiler) in arm_add_strides() argument
463 if (compiler->vars[i].name == NULL) continue; in arm_add_strides()
464 switch (compiler->vars[i].vartype) { in arm_add_strides()
471 orc_arm_emit_load_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in arm_add_strides()
473 orc_arm_emit_load_reg (compiler, ORC_ARM_A2, compiler->exec_reg, in arm_add_strides()
475 orc_arm_emit_add (compiler, ORC_ARM_A3, ORC_ARM_A3, ORC_ARM_A2); in arm_add_strides()
476 orc_arm_emit_store_reg (compiler, ORC_ARM_A3, compiler->exec_reg, in arm_add_strides()
484 ORC_COMPILER_ERROR(compiler,"bad vartype"); in arm_add_strides()