CACAO
Data Structures | Macros | Functions | Variables
replace.cpp File Reference

Go to the source code of this file.

Data Structures

struct  replace_patch_data_t
 

Macros

#define REPLACE_PATCH_DYNAMIC_CALL
 
#define DOLOG(code)   do{ if (opt_TraceReplacement > 1) { code; } } while(0)
 
#define DOLOG_SHORT(code)   do{ if (opt_TraceReplacement > 0) { code; } } while(0)
 
#define REPLACE_STATISTICS
 
#define REPLACE_COUNT(cnt)   (cnt)++
 
#define REPLACE_COUNT_IF(cnt, cond)   do{ if(cond) (cnt)++; } while(0)
 
#define REPLACE_COUNT_INC(cnt, inc)   ((cnt) += (inc))
 
#define REPLACE_COUNT_DIST(array, val)
 
#define TOP_IS_NORMAL   0
 
#define TOP_IS_ON_STACK   1
 
#define TOP_IS_IN_ITMP1   2
 
#define TOP_IS_VOID   3
 
#define CLEAR_javalocals(array, method)
 
#define COPY_OR_CLEAR_javalocals(dest, array, method)
 
#define COUNT_javalocals(array, method, counter)
 
#define REPLACE_PRINT_DIST(name, array)
 
#define TYPECHAR(t)   (((t) >= 0 && (t) <= TYPE_RET) ? show_jit_type_letters[t] : '?')
 

Functions

static void java_value_print (s4 type, replace_val_t value)
 
static void replace_stackframeinfo_println (stackframeinfo_t *sfi)
 
static void replace_statistics_source_frame (sourceframe_t *frame)
 
static void replace_create_replacement_point (jitdata *jd, insinfo_inline *iinfo, rplpoint *rp, rplpoint::Type type, instruction *iptr, rplalloc **pra, s4 *javalocals, s4 *stackvars, s4 stackdepth, s4 paramcount)
 
static insinfo_inlinereplace_create_inline_start_replacement_point (jitdata *jd, rplpoint *rp, instruction *iptr, rplalloc **pra, s4 *javalocals)
 
bool replace_create_replacement_points (jitdata *jd)
 
void replace_free_replacement_points (codeinfo *code)
 
void replace_activate_replacement_points (codeinfo *code, bool mappable)
 
void replace_deactivate_replacement_points (codeinfo *code)
 
static void replace_read_value (executionstate_t *es, rplalloc *ra, replace_val_t *javaval)
 
static void replace_write_value (executionstate_t *es, rplalloc *ra, replace_val_t *javaval)
 
static sourceframe_t * replace_new_sourceframe (sourcestate_t *ss)
 
static void replace_read_executionstate (rplpoint *rp, executionstate_t *es, sourcestate_t *ss, bool topframe)
 
static void replace_write_executionstate (rplpoint *rp, executionstate_t *es, sourcestate_t *ss, bool topframe)
 
void md_push_stackframe (executionstate_t *es, codeinfo *calleecode, u1 *ra)
 
u1replace_pop_activation_record (executionstate_t *es, sourceframe_t *frame)
 
static void replace_patch_method_pointer (methodptr *mpp, methodptr entrypoint, const char *kind)
 
void replace_patch_class (vftbl_t *vftbl, methodinfo *m, u1 *oldentrypoint, u1 *entrypoint)
 
void replace_patch_callback (classinfo *c, struct replace_patch_data_t *pd)
 
void replace_patch_class_hierarchy (methodinfo *m, u1 *oldentrypoint, u1 *entrypoint)
 
void replace_patch_future_calls (u1 *ra, sourceframe_t *callerframe, sourceframe_t *calleeframe)
 
void replace_push_activation_record (executionstate_t *es, rplpoint *rpcall, sourceframe_t *callerframe, sourceframe_t *calleeframe)
 
rplpoint * replace_find_replacement_point (codeinfo *code, sourceframe_t *frame, rplpoint *parent)
 
rplpoint * replace_find_replacement_point_for_pc (codeinfo *code, u1 *pc, unsigned desired_flags)
 
static void replace_pop_native_frame (executionstate_t *es, sourcestate_t *ss, stackframeinfo_t *sfi)
 
static void replace_push_native_frame (executionstate_t *es, sourcestate_t *ss)
 
sourcestate_t * replace_recover_source_state (rplpoint *rp, stackframeinfo_t *sfi, executionstate_t *es)
 
static bool replace_map_source_state (sourcestate_t *ss)
 
static void replace_build_execution_state (sourcestate_t *ss, executionstate_t *es)
 
static void replace_me (rplpoint *rp, executionstate_t *es)
 
bool replace_handler (u1 *pc, executionstate_t *es)
 
static void print_freq (FILE *file, int *array, int limit)
 
void replace_print_statistics (void)
 
void replace_replacement_point_println (rplpoint *rp, int depth)
 
void replace_show_replacement_points (codeinfo *code)
 
void replace_source_frame_println (sourceframe_t *frame)
 
void replace_sourcestate_println (sourcestate_t *ss)
 
void replace_sourcestate_println_short (sourcestate_t *ss)
 

Variables

static int stat_replacements = 0
 
static int stat_frames = 0
 
static int stat_recompile = 0
 
static int stat_staticpatch = 0
 
static int stat_unroll_inline = 0
 
static int stat_unroll_call = 0
 
static int stat_dist_frames [20] = { 0 }
 
static int stat_dist_locals [20] = { 0 }
 
static int stat_dist_locals_adr [10] = { 0 }
 
static int stat_dist_locals_prim [10] = { 0 }
 
static int stat_dist_locals_ret [10] = { 0 }
 
static int stat_dist_locals_void [10] = { 0 }
 
static int stat_dist_stack [10] = { 0 }
 
static int stat_dist_stack_adr [10] = { 0 }
 
static int stat_dist_stack_prim [10] = { 0 }
 
static int stat_dist_stack_ret [10] = { 0 }
 
static int stat_methods = 0
 
static int stat_rploints = 0
 
static int stat_regallocs = 0
 
static int stat_dist_method_rplpoints [20] = { 0 }
 
static s4 replace_normalize_type_map []
 
static const char * replace_type_str []
 

Macro Definition Documentation

#define CLEAR_javalocals (   array,
  method 
)
Value:
do { \
for (i=0; i<(method)->maxlocals; ++i) \
(array)[i] = jitdata::UNUSED; \
} while (0)
JNIEnv jthread jmethodID method
Definition: jvmti.h:207
MIIterator i

Definition at line 329 of file replace.cpp.

#define COPY_OR_CLEAR_javalocals (   dest,
  array,
  method 
)
Value:
do { \
if ((array) != NULL) \
MCOPY((dest), (array), s4, (method)->maxlocals); \
} while (0)
#define CLEAR_javalocals(array, method)
Definition: replace.cpp:329
JNIEnv jthread jmethodID method
Definition: jvmti.h:207
int32_t s4
Definition: types.hpp:45
#define MCOPY(dest, src, type, num)
Definition: memory.hpp:103

Definition at line 335 of file replace.cpp.

#define COUNT_javalocals (   array,
  method,
  counter 
)
Value:
do { \
for (i=0; i<(method)->maxlocals; ++i) \
if ((array)[i] != jitdata::UNUSED) \
(counter)++; \
} while (0)
JNIEnv jthread jmethodID method
Definition: jvmti.h:207
MIIterator i

Definition at line 343 of file replace.cpp.

#define DOLOG (   code)    do{ if (opt_TraceReplacement > 1) { code; } } while(0)

Definition at line 83 of file replace.cpp.

#define DOLOG_SHORT (   code)    do{ if (opt_TraceReplacement > 0) { code; } } while(0)

Definition at line 84 of file replace.cpp.

#define REPLACE_COUNT (   cnt)    (cnt)++

Definition at line 118 of file replace.cpp.

#define REPLACE_COUNT_DIST (   array,
  val 
)
Value:
do { \
int limit = (sizeof(array) / sizeof(int)) - 1; \
if ((val) < (limit)) (array)[val]++; \
else (array)[limit]++; \
} while (0)

Definition at line 122 of file replace.cpp.

#define REPLACE_COUNT_IF (   cnt,
  cond 
)    do{ if(cond) (cnt)++; } while(0)

Definition at line 119 of file replace.cpp.

#define REPLACE_COUNT_INC (   cnt,
  inc 
)    ((cnt) += (inc))

Definition at line 120 of file replace.cpp.

#define REPLACE_PATCH_DYNAMIC_CALL

Definition at line 71 of file replace.cpp.

#define REPLACE_PRINT_DIST (   name,
  array 
)
Value:
printf(" " name " distribution:\n"); \
print_freq(stdout, (array), sizeof(array)/sizeof(int) - 1);
JNIEnv jclass jobject const char * name
Definition: jvmti.h:312
static void print_freq(FILE *file, int *array, int limit)
Definition: replace.cpp:2857
#define printf(...)
Definition: ssa2.cpp:40

Definition at line 2877 of file replace.cpp.

#define REPLACE_STATISTICS

Definition at line 93 of file replace.cpp.

#define TOP_IS_IN_ITMP1   2

Definition at line 145 of file replace.cpp.

#define TOP_IS_NORMAL   0

Definition at line 143 of file replace.cpp.

#define TOP_IS_ON_STACK   1

Definition at line 144 of file replace.cpp.

#define TOP_IS_VOID   3

Definition at line 146 of file replace.cpp.

#define TYPECHAR (   t)    (((t) >= 0 && (t) <= TYPE_RET) ? show_jit_type_letters[t] : '?')

Definition at line 2968 of file replace.cpp.

Function Documentation

static void java_value_print ( s4  type,
replace_val_t  value 
)
static

Definition at line 3084 of file replace.cpp.

void md_push_stackframe ( executionstate_t es,
codeinfo calleecode,
u1 ra 
)

Definition at line 1473 of file replace.cpp.

static void print_freq ( FILE *  file,
int *  array,
int  limit 
)
static

Definition at line 2857 of file replace.cpp.

void replace_activate_replacement_points ( codeinfo code,
bool  mappable 
)

Definition at line 759 of file replace.cpp.

static void replace_build_execution_state ( sourcestate_t *  ss,
executionstate_t es 
)
static

Definition at line 2551 of file replace.cpp.

static insinfo_inline* replace_create_inline_start_replacement_point ( jitdata jd,
rplpoint *  rp,
instruction iptr,
rplalloc **  pra,
s4 javalocals 
)
static

Definition at line 274 of file replace.cpp.

static void replace_create_replacement_point ( jitdata jd,
insinfo_inline iinfo,
rplpoint *  rp,
rplpoint::Type  type,
instruction iptr,
rplalloc **  pra,
s4 javalocals,
s4 stackvars,
s4  stackdepth,
s4  paramcount 
)
static

Definition at line 175 of file replace.cpp.

bool replace_create_replacement_points ( jitdata jd)

Definition at line 350 of file replace.cpp.

void replace_deactivate_replacement_points ( codeinfo code)

Definition at line 840 of file replace.cpp.

rplpoint* replace_find_replacement_point ( codeinfo code,
sourceframe_t *  frame,
rplpoint *  parent 
)

Definition at line 1975 of file replace.cpp.

rplpoint* replace_find_replacement_point_for_pc ( codeinfo code,
u1 pc,
unsigned  desired_flags 
)

Definition at line 2062 of file replace.cpp.

void replace_free_replacement_points ( codeinfo code)

Definition at line 722 of file replace.cpp.

bool replace_handler ( u1 pc,
executionstate_t es 
)

Definition at line 2758 of file replace.cpp.

static bool replace_map_source_state ( sourcestate_t *  ss)
static

Definition at line 2410 of file replace.cpp.

static void replace_me ( rplpoint *  rp,
executionstate_t es 
)
static

Definition at line 2624 of file replace.cpp.

static sourceframe_t* replace_new_sourceframe ( sourcestate_t *  ss)
static

Definition at line 1032 of file replace.cpp.

void replace_patch_callback ( classinfo c,
struct replace_patch_data_t pd 
)

Definition at line 1746 of file replace.cpp.

void replace_patch_class ( vftbl_t vftbl,
methodinfo m,
u1 oldentrypoint,
u1 entrypoint 
)

Definition at line 1699 of file replace.cpp.

void replace_patch_class_hierarchy ( methodinfo m,
u1 oldentrypoint,
u1 entrypoint 
)

Definition at line 1759 of file replace.cpp.

void replace_patch_future_calls ( u1 ra,
sourceframe_t *  callerframe,
sourceframe_t *  calleeframe 
)

Definition at line 1790 of file replace.cpp.

static void replace_patch_method_pointer ( methodptr mpp,
methodptr  entrypoint,
const char *  kind 
)
static

Definition at line 1657 of file replace.cpp.

u1* replace_pop_activation_record ( executionstate_t es,
sourceframe_t *  frame 
)

Definition at line 1591 of file replace.cpp.

static void replace_pop_native_frame ( executionstate_t es,
sourcestate_t *  ss,
stackframeinfo_t sfi 
)
static

Definition at line 2106 of file replace.cpp.

void replace_print_statistics ( void  )

Definition at line 2881 of file replace.cpp.

void replace_push_activation_record ( executionstate_t es,
rplpoint *  rpcall,
sourceframe_t *  callerframe,
sourceframe_t *  calleeframe 
)

Definition at line 1898 of file replace.cpp.

static void replace_push_native_frame ( executionstate_t es,
sourcestate_t *  ss 
)
static

Definition at line 2199 of file replace.cpp.

static void replace_read_executionstate ( rplpoint *  rp,
executionstate_t es,
sourcestate_t *  ss,
bool  topframe 
)
static

Definition at line 1076 of file replace.cpp.

static void replace_read_value ( executionstate_t es,
rplalloc *  ra,
replace_val_t *  javaval 
)
static

Definition at line 928 of file replace.cpp.

sourcestate_t* replace_recover_source_state ( rplpoint *  rp,
stackframeinfo_t sfi,
executionstate_t es 
)

Definition at line 2279 of file replace.cpp.

void replace_replacement_point_println ( rplpoint *  rp,
int  depth 
)

Definition at line 2980 of file replace.cpp.

void replace_show_replacement_points ( codeinfo code)

Definition at line 3047 of file replace.cpp.

void replace_source_frame_println ( sourceframe_t *  frame)

Definition at line 3125 of file replace.cpp.

void replace_sourcestate_println ( sourcestate_t *  ss)

Definition at line 3237 of file replace.cpp.

void replace_sourcestate_println_short ( sourcestate_t *  ss)

Definition at line 3267 of file replace.cpp.

static void replace_stackframeinfo_println ( stackframeinfo_t sfi)
static

Definition at line 3303 of file replace.cpp.

static void replace_statistics_source_frame ( sourceframe_t *  frame)
static

Definition at line 2914 of file replace.cpp.

static void replace_write_executionstate ( rplpoint *  rp,
executionstate_t es,
sourcestate_t *  ss,
bool  topframe 
)
static

Definition at line 1310 of file replace.cpp.

static void replace_write_value ( executionstate_t es,
rplalloc *  ra,
replace_val_t *  javaval 
)
static

Definition at line 978 of file replace.cpp.

Variable Documentation

s4 replace_normalize_type_map[]
static
Initial value:
= {
rplpoint::TYPE_STD,
rplpoint::TYPE_STD,
rplpoint::TYPE_STD,
rplpoint::TYPE_CALL,
rplpoint::TYPE_CALL,
rplpoint::TYPE_RETURN,
rplpoint::TYPE_STD
}

Definition at line 1065 of file replace.cpp.

const char* replace_type_str[]
static
Initial value:
= {
"STD",
"EXH",
"SBR",
"CALL",
"INLINE",
"RETURN",
"BODY"
}

Definition at line 2970 of file replace.cpp.

int stat_dist_frames[20] = { 0 }
static

Definition at line 103 of file replace.cpp.

int stat_dist_locals[20] = { 0 }
static

Definition at line 104 of file replace.cpp.

int stat_dist_locals_adr[10] = { 0 }
static

Definition at line 105 of file replace.cpp.

int stat_dist_locals_prim[10] = { 0 }
static

Definition at line 106 of file replace.cpp.

int stat_dist_locals_ret[10] = { 0 }
static

Definition at line 107 of file replace.cpp.

int stat_dist_locals_void[10] = { 0 }
static

Definition at line 108 of file replace.cpp.

int stat_dist_method_rplpoints[20] = { 0 }
static

Definition at line 116 of file replace.cpp.

int stat_dist_stack[10] = { 0 }
static

Definition at line 109 of file replace.cpp.

int stat_dist_stack_adr[10] = { 0 }
static

Definition at line 110 of file replace.cpp.

int stat_dist_stack_prim[10] = { 0 }
static

Definition at line 111 of file replace.cpp.

int stat_dist_stack_ret[10] = { 0 }
static

Definition at line 112 of file replace.cpp.

int stat_frames = 0
static

Definition at line 98 of file replace.cpp.

int stat_methods = 0
static

Definition at line 113 of file replace.cpp.

int stat_recompile = 0
static

Definition at line 99 of file replace.cpp.

int stat_regallocs = 0
static

Definition at line 115 of file replace.cpp.

int stat_replacements = 0
static

Definition at line 97 of file replace.cpp.

int stat_rploints = 0
static

Definition at line 114 of file replace.cpp.

int stat_staticpatch = 0
static

Definition at line 100 of file replace.cpp.

int stat_unroll_call = 0
static

Definition at line 102 of file replace.cpp.

int stat_unroll_inline = 0
static

Definition at line 101 of file replace.cpp.