const char *
arm_reg_name (int reg)
{
-#if 1
+#if 0
static const char *gp_regs[] = {
"a1", "a2", "a3", "a4",
"v1", "v2", "v3", "v4",
"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) {
}
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;
#include <orc/orcprogram.h>
+#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)
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);
#define SIZE 65536
-int arm_exec_ptr = ARM_V1;
+int arm_exec_ptr = ARM_R0;
void arm_emit_loop (OrcCompiler *compiler);
{
int i;
- for(i=ORC_GP_REG_BASE;i<ORC_GP_REG_BASE+16;i++){
+ for(i=ORC_GP_REG_BASE;i<ORC_GP_REG_BASE+9;i++){
compiler->valid_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;
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,