32 #include "codegen.hpp"
45 STAT_REGISTER_VAR(
int,count_branches_resolved,0,
"resolved branches",
"resolved branches")
53 STAT_REGISTER_GROUP_VAR(
int,count_emit_branch_8bit,0,"emit branch 8bit","Number of branch_emit ( 8bit offset)",emit_branch_stat)
54 STAT_REGISTER_GROUP_VAR(
int,count_emit_branch_16bit,0,"emit branch 16bit","Number of branch_emit (16bit offset)",emit_branch_stat)
55 STAT_REGISTER_GROUP_VAR(
int,count_emit_branch_32bit,0,"emit branch 32bit","Number of branch_emit (32bit offset)",emit_branch_stat)
56 STAT_REGISTER_GROUP_VAR(
int,count_emit_branch_64bit,0,"emit branch 64bit","Number of branch_emit (64bit offset)",emit_branch_stat)
68 src =
VAROP(iptr->s1);
121 #if SIZEOF_VOID_P == 4
143 #if SIZEOF_VOID_P == 4
165 #if SIZEOF_VOID_P == 4
187 #if SIZEOF_VOID_P == 4
209 #if SIZEOF_VOID_P == 4
231 #if SIZEOF_VOID_P == 4
272 for (PatcherListTy::iterator
i = code->
patchers->begin(),
295 if ((target->
mpc >= 0)) {
301 disp = target->
mpc - branchmpc;
303 #if defined(ENABLE_STATISTICS)
304 if ((int8_t)disp == disp) count_emit_branch_8bit++;
305 else if ((int16_t)disp == disp) count_emit_branch_16bit++;
306 else if ((int32_t)disp == disp) count_emit_branch_32bit++;
307 # if SIZEOF_VOID_P == 8
308 else if ((int64_t)disp == disp) count_emit_branch_64bit++;
336 emit_bccz(cd, target, condition, -1, options);
358 #if SUPPORT_BRANCH_CONDITIONAL_ONE_INTEGER_REGISTER
402 #if SUPPORT_BRANCH_CONDITIONAL_TWO_INTEGER_REGISTERS
423 #if SUPPORT_BRANCH_CONDITIONAL_CONDITION_REGISTER
455 #if SUPPORT_BRANCH_CONDITIONAL_UNSIGNED_CONDITIONS
477 #if defined(__POWERPC__) || defined(__POWERPC64__)
503 if (br->
label == label)
525 int32_t disp = br->
mpc - mpc;
527 #if defined(ENABLE_STATISTICS)
528 if ((int8_t)disp == disp) count_emit_branch_8bit++;
529 else if ((int16_t)disp == disp) count_emit_branch_16bit++;
530 else if ((int32_t)disp == disp) count_emit_branch_32bit++;
531 # if SIZEOF_VOID_P == 8
532 else if ((int64_t)disp == disp) count_emit_branch_64bit++;
561 if (br->
label == label)
578 int32_t disp = mpc - br->
mpc;
585 #if defined(ENABLE_STATISTICS)
586 if ((int8_t)disp == disp) count_emit_branch_8bit++;
587 else if ((int16_t)disp == disp) count_emit_branch_16bit++;
588 else if ((int32_t)disp == disp) count_emit_branch_32bit++;
589 # if SIZEOF_VOID_P == 8
590 else if ((int64_t)disp == disp) count_emit_branch_64bit++;
636 #if SUPPORT_BRANCH_CONDITIONAL_ONE_INTEGER_REGISTER
638 void emit_label_beqz(
codegendata* cd,
int label,
int reg)
643 void emit_label_bnez(
codegendata* cd,
int label,
int reg)
648 void emit_label_bltz(
codegendata* cd,
int label,
int reg)
653 void emit_label_bgtz(
codegendata* cd,
int label,
int reg)
670 #if SUPPORT_BRANCH_CONDITIONAL_TWO_INTEGER_REGISTERS
672 void emit_label_beq(
codegendata* cd,
int label,
int s1,
int s2)
677 void emit_label_bne(
codegendata* cd,
int label,
int s1,
int s2)
691 #if SUPPORT_BRANCH_CONDITIONAL_CONDITION_REGISTER
s4 emit_load_s3(jitdata *jd, instruction *iptr, s4 tempreg)
s4 emit_load_s1(jitdata *jd, instruction *iptr, s4 tempreg)
#define STATISTICS(x)
Wrapper for statistics only code.
void emit_bcc(codegendata *cd, basicblock *target, s4 condition, u4 options)
#define BRANCH_UNCONDITIONAL
void emit_label_bcc(codegendata *cd, s4 label, s4 condition, u4 options)
void emit_patcher_traps(jitdata *jd)
s4 emit_load_high(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_label_br(codegendata *cd, s4 label)
This file contains the statistics framework.
s4 emit_load_s2(jitdata *jd, instruction *iptr, s4 tempreg)
#define STAT_REGISTER_GROUP_VAR(type, var, init, name, description, group)
Register an statistics variable and add it to a group.
#define STAT_REGISTER_SUM_GROUP(var, name, description)
Register a statistics summary group.
s4 emit_load(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_store(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
DumpList< branch_label_ref_t * > * brancheslabel
cacao::shared_ptr< cacao::Patcher > PatcherPtrTy
void codegen_branch_label_add(codegendata *cd, s4 label, s4 condition, s4 reg, u4 options)
union instruction::@12 sx
#define PACK_REGS(low, high)
void emit_store_dst(jitdata *jd, instruction *iptr, s4 d)
void emit_label_bccz(codegendata *cd, s4 label, s4 condition, s4 reg, u4 options)
s4 emit_load_low(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void codegen_add_branch_ref(codegendata *cd, basicblock *target, s4 condition, s4 reg, u4 options)
void emit_branch(codegendata *cd, s4 disp, s4 condition, s4 reg, u4 opt)
List implementation with dump memory.
struct instruction::@12::@13 s23
void emit_label(codegendata *cd, s4 label)
void emit_bccz(codegendata *cd, basicblock *target, s4 condition, s4 reg, u4 options)
#define STAT_REGISTER_VAR_EXTERN(type, var, init, name, description)
Register an external statistics variable.
#define STAT_REGISTER_VAR(type, var, init, name, description)
Register an external statistics variable.
void emit_br(codegendata *cd, basicblock *target)