ARM

ARM — code generation for ARM

Synopsis

enum                OrcArmCond;
enum                OrcArmDP;
enum                OrcArmRegister;
void                orc_arm_do_fixups                   (OrcCompiler *compiler);
void                orc_arm_emit                        (OrcCompiler *compiler,
                                                         orc_uint32 insn);
void                orc_arm_emit_add                    (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int src2);
void                orc_arm_emit_add_imm                (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int value);
void                orc_arm_emit_branch                 (OrcCompiler *compiler,
                                                         int cond,
                                                         int label);
void                orc_arm_emit_bx_lr                  (OrcCompiler *compiler);
void                orc_arm_emit_cmp_imm                (OrcCompiler *compiler,
                                                         int src1,
                                                         int value);
void                orc_arm_emit_label                  (OrcCompiler *compiler,
                                                         int label);
void                orc_arm_emit_load_reg               (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int offset);
void                orc_arm_emit_mov                    (OrcCompiler *compiler,
                                                         int dest,
                                                         int src);
void                orc_arm_emit_pop                    (OrcCompiler *compiler,
                                                         int regs);
void                orc_arm_emit_push                   (OrcCompiler *compiler,
                                                         int regs);
void                orc_arm_emit_sub                    (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int src2);
void                orc_arm_emit_sub_imm                (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int value,
                                                         int record);
void                orc_arm_loadw                       (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int offset);
const char *        orc_arm_reg_name                    (int reg);
void                orc_arm_storew                      (OrcCompiler *compiler,
                                                         int dest,
                                                         int offset,
                                                         int src1);

Description

Details

enum OrcArmCond

typedef enum {
  ORC_ARM_COND_EQ = 0,
  ORC_ARM_COND_NE,
  ORC_ARM_COND_CS,
  ORC_ARM_COND_CC,
  ORC_ARM_COND_MI,
  ORC_ARM_COND_PL,
  ORC_ARM_COND_VS,
  ORC_ARM_COND_VC,
  ORC_ARM_COND_HI,
  ORC_ARM_COND_LS,
  ORC_ARM_COND_GE,
  ORC_ARM_COND_LT,
  ORC_ARM_COND_GT,
  ORC_ARM_COND_LE,
  ORC_ARM_COND_AL,
} OrcArmCond;


enum OrcArmDP

typedef enum {
  ORC_ARM_DP_AND = 0,
  ORC_ARM_DP_EOR,
  ORC_ARM_DP_SUB,
  ORC_ARM_DP_RSB,
  ORC_ARM_DP_ADD,
  ORC_ARM_DP_ADC,
  ORC_ARM_DP_SBC,
  ORC_ARM_DP_RSC,
  ORC_ARM_DP_TST,
  ORC_ARM_DP_TEQ,
  ORC_ARM_DP_CMP,
  ORC_ARM_DP_CMN,
  ORC_ARM_DP_ORR,
  ORC_ARM_DP_MOV,
  ORC_ARM_DP_BIC,
  ORC_ARM_DP_MVN
} OrcArmDP;


enum OrcArmRegister

typedef enum {
  ORC_ARM_A1 = ORC_GP_REG_BASE+0,
  ORC_ARM_A2,
  ORC_ARM_A3,
  ORC_ARM_A4,
  ORC_ARM_V1,
  ORC_ARM_V2,
  ORC_ARM_V3,
  ORC_ARM_V4,
  ORC_ARM_V5,
  ORC_ARM_V6,
  ORC_ARM_V7,
  ORC_ARM_V8,
  ORC_ARM_IP,
  ORC_ARM_SP,
  ORC_ARM_LR,
  ORC_ARM_PC
} OrcArmRegister;


orc_arm_do_fixups ()

void                orc_arm_do_fixups                   (OrcCompiler *compiler);


orc_arm_emit ()

void                orc_arm_emit                        (OrcCompiler *compiler,
                                                         orc_uint32 insn);


orc_arm_emit_add ()

void                orc_arm_emit_add                    (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int src2);


orc_arm_emit_add_imm ()

void                orc_arm_emit_add_imm                (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int value);


orc_arm_emit_branch ()

void                orc_arm_emit_branch                 (OrcCompiler *compiler,
                                                         int cond,
                                                         int label);


orc_arm_emit_bx_lr ()

void                orc_arm_emit_bx_lr                  (OrcCompiler *compiler);


orc_arm_emit_cmp_imm ()

void                orc_arm_emit_cmp_imm                (OrcCompiler *compiler,
                                                         int src1,
                                                         int value);


orc_arm_emit_label ()

void                orc_arm_emit_label                  (OrcCompiler *compiler,
                                                         int label);


orc_arm_emit_load_reg ()

void                orc_arm_emit_load_reg               (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int offset);


orc_arm_emit_mov ()

void                orc_arm_emit_mov                    (OrcCompiler *compiler,
                                                         int dest,
                                                         int src);


orc_arm_emit_pop ()

void                orc_arm_emit_pop                    (OrcCompiler *compiler,
                                                         int regs);


orc_arm_emit_push ()

void                orc_arm_emit_push                   (OrcCompiler *compiler,
                                                         int regs);


orc_arm_emit_sub ()

void                orc_arm_emit_sub                    (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int src2);


orc_arm_emit_sub_imm ()

void                orc_arm_emit_sub_imm                (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int value,
                                                         int record);


orc_arm_loadw ()

void                orc_arm_loadw                       (OrcCompiler *compiler,
                                                         int dest,
                                                         int src1,
                                                         int offset);


orc_arm_reg_name ()

const char *        orc_arm_reg_name                    (int reg);


orc_arm_storew ()

void                orc_arm_storew                      (OrcCompiler *compiler,
                                                         int dest,
                                                         int offset,
                                                         int src1);