From: David Schleef Date: Wed, 25 Mar 2009 03:05:18 +0000 (-0700) Subject: Fixes to build runnable arm code X-Git-Tag: orc-0.4.0~86 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6ab0a0bba83e429f72febe4c3795fdc3df33b41;p=platform%2Fupstream%2Forc.git Fixes to build runnable arm code --- diff --git a/orc/arm.c b/orc/arm.c index 1e58751..3e5cd7f 100644 --- a/orc/arm.c +++ b/orc/arm.c @@ -18,7 +18,7 @@ const char * arm_reg_name (int reg) { -#if 1 +#if 0 static const char *gp_regs[] = { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", @@ -29,7 +29,8 @@ arm_reg_name (int reg) "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", - "r12", "r13", "r14", "r15" }; + "ip", "sp", "lr", "pc" }; + //"r12", "r13", "r14", "r15" }; #endif if (reg < ORC_GP_REG_BASE || reg >= ORC_GP_REG_BASE+16) { @@ -215,6 +216,23 @@ arm_emit_sub (OrcCompiler *compiler, int dest, int src1, int src2) } void +arm_emit_add_imm (OrcCompiler *compiler, int dest, int src1, int value) +{ + uint32_t code; + + code = 0xe2800000; + code |= (src1&0xf) << 16; + code |= (dest&0xf) << 12; + code |= (value) << 0; + + ORC_ASM_CODE(compiler," add %s, %s, #%d\n", + arm_reg_name (dest), + arm_reg_name (src1), + value); + arm_emit (compiler, code); +} + +void arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value) { uint32_t code; diff --git a/orc/arm.h b/orc/arm.h index 5fc382f..4baf584 100644 --- a/orc/arm.h +++ b/orc/arm.h @@ -4,6 +4,8 @@ #include +#define ARM_R0 (ORC_GP_REG_BASE+0) + #define ARM_A1 (ORC_GP_REG_BASE+0) #define ARM_A2 (ORC_GP_REG_BASE+1) #define ARM_A3 (ORC_GP_REG_BASE+2) @@ -67,6 +69,7 @@ void arm_emit_loadimm (OrcCompiler *compiler, int dest, int imm); void arm_emit_add (OrcCompiler *compiler, int dest, int src1, int src2); void arm_emit_sub (OrcCompiler *compiler, int dest, int src1, int src2); +void arm_emit_add_imm (OrcCompiler *compiler, int dest, int src1, int value); void arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value); void arm_emit_cmp_imm (OrcCompiler *compiler, int src1, int value); diff --git a/orc/orcprogram-arm.c b/orc/orcprogram-arm.c index a6f04c7..596fa89 100644 --- a/orc/orcprogram-arm.c +++ b/orc/orcprogram-arm.c @@ -15,7 +15,7 @@ #define SIZE 65536 -int arm_exec_ptr = ARM_V1; +int arm_exec_ptr = ARM_R0; void arm_emit_loop (OrcCompiler *compiler); @@ -108,10 +108,10 @@ orc_compiler_arm_init (OrcCompiler *compiler) { int i; - for(i=ORC_GP_REG_BASE;ivalid_regs[i] = 1; } - compiler->valid_regs[ARM_V1] = 0; + compiler->valid_regs[ARM_R0] = 0; //compiler->valid_regs[ARM_SB] = 0; compiler->valid_regs[ARM_IP] = 0; compiler->valid_regs[ARM_SP] = 0; @@ -337,9 +337,10 @@ arm_emit_loop (OrcCompiler *compiler) if (compiler->vars[k].vartype == ORC_VAR_TYPE_SRC || compiler->vars[k].vartype == ORC_VAR_TYPE_DEST) { if (compiler->vars[k].ptr_register) { - //arm_emit_add_imm_reg (compiler, arm_ptr_size, - // compiler->vars[k].size << compiler->loop_shift, - // compiler->vars[k].ptr_register); + arm_emit_add_imm (compiler, + compiler->vars[k].ptr_register, + compiler->vars[k].ptr_register, + compiler->vars[k].size << compiler->loop_shift); } else { //arm_emit_add_imm_memoffset (compiler, arm_ptr_size, // compiler->vars[k].size << compiler->loop_shift,