Revision 54604f74
b/hostregs_helper.h | ||
---|---|---|
18 | 18 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | 19 |
*/ |
20 | 20 |
|
21 |
/* The GCC global register vairable extension is used to reserve some
|
|
22 |
host registers for use by dyngen. However only the core parts of the
|
|
23 |
translation engine are compiled with these settings. We must manually |
|
21 |
/* The GCC global register variable extension is used to reserve some
|
|
22 |
host registers for use by generated code. However only the core parts of
|
|
23 |
the translation engine are compiled with these settings. We must manually
|
|
24 | 24 |
save/restore these registers when called from regular code. |
25 | 25 |
It is not sufficient to save/restore T0 et. al. as these may be declared |
26 | 26 |
with a datatype smaller than the actual register. */ |
b/tcg/tcg.c | ||
---|---|---|
1890 | 1890 |
|
1891 | 1891 |
#ifdef CONFIG_PROFILER |
1892 | 1892 |
|
1893 |
static int64_t dyngen_table_op_count[NB_OPS];
|
|
1893 |
static int64_t tcg_table_op_count[NB_OPS];
|
|
1894 | 1894 |
|
1895 | 1895 |
void dump_op_count(void) |
1896 | 1896 |
{ |
1897 | 1897 |
int i; |
1898 | 1898 |
FILE *f; |
1899 |
f = fopen("/tmp/op1.log", "w"); |
|
1900 |
for(i = 0; i < INDEX_op_end; i++) { |
|
1901 |
fprintf(f, "%s %" PRId64 "\n", tcg_op_defs[i].name, dyngen_table_op_count[i]); |
|
1902 |
} |
|
1903 |
fclose(f); |
|
1904 |
f = fopen("/tmp/op2.log", "w"); |
|
1899 |
f = fopen("/tmp/op.log", "w"); |
|
1905 | 1900 |
for(i = INDEX_op_end; i < NB_OPS; i++) { |
1906 |
fprintf(f, "%s %" PRId64 "\n", tcg_op_defs[i].name, dyngen_table_op_count[i]);
|
|
1901 |
fprintf(f, "%s %" PRId64 "\n", tcg_op_defs[i].name, tcg_table_op_count[i]);
|
|
1907 | 1902 |
} |
1908 | 1903 |
fclose(f); |
1909 | 1904 |
} |
... | ... | |
1953 | 1948 |
for(;;) { |
1954 | 1949 |
opc = gen_opc_buf[op_index]; |
1955 | 1950 |
#ifdef CONFIG_PROFILER |
1956 |
dyngen_table_op_count[opc]++;
|
|
1951 |
tcg_table_op_count[opc]++;
|
|
1957 | 1952 |
#endif |
1958 | 1953 |
def = &tcg_op_defs[opc]; |
1959 | 1954 |
#if 0 |
... | ... | |
2030 | 2025 |
return -1; |
2031 | 2026 |
} |
2032 | 2027 |
|
2033 |
int dyngen_code(TCGContext *s, uint8_t *gen_code_buf)
|
|
2028 |
int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf)
|
|
2034 | 2029 |
{ |
2035 | 2030 |
#ifdef CONFIG_PROFILER |
2036 | 2031 |
{ |
... | ... | |
2058 | 2053 |
offset bytes from the start of the TB. The contents of gen_code_buf must |
2059 | 2054 |
not be changed, though writing the same values is ok. |
2060 | 2055 |
Return -1 if not found. */ |
2061 |
int dyngen_code_search_pc(TCGContext *s, uint8_t *gen_code_buf, long offset)
|
|
2056 |
int tcg_gen_code_search_pc(TCGContext *s, uint8_t *gen_code_buf, long offset)
|
|
2062 | 2057 |
{ |
2063 | 2058 |
return tcg_gen_code_common(s, gen_code_buf, offset); |
2064 | 2059 |
} |
b/tcg/tcg.h | ||
---|---|---|
314 | 314 |
void tcg_context_init(TCGContext *s); |
315 | 315 |
void tcg_func_start(TCGContext *s); |
316 | 316 |
|
317 |
int dyngen_code(TCGContext *s, uint8_t *gen_code_buf);
|
|
318 |
int dyngen_code_search_pc(TCGContext *s, uint8_t *gen_code_buf, long offset);
|
|
317 |
int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf);
|
|
318 |
int tcg_gen_code_search_pc(TCGContext *s, uint8_t *gen_code_buf, long offset);
|
|
319 | 319 |
|
320 | 320 |
void tcg_set_frame(TCGContext *s, int reg, |
321 | 321 |
tcg_target_long start, tcg_target_long size); |
b/translate-all.c | ||
---|---|---|
118 | 118 |
s->interm_time += profile_getclock() - ti; |
119 | 119 |
s->code_time -= profile_getclock(); |
120 | 120 |
#endif |
121 |
gen_code_size = dyngen_code(s, gen_code_buf);
|
|
121 |
gen_code_size = tcg_gen_code(s, gen_code_buf);
|
|
122 | 122 |
*gen_code_size_ptr = gen_code_size; |
123 | 123 |
#ifdef CONFIG_PROFILER |
124 | 124 |
s->code_time += profile_getclock(); |
... | ... | |
177 | 177 |
s->tb_jmp_offset = NULL; |
178 | 178 |
s->tb_next = tb->tb_next; |
179 | 179 |
#endif |
180 |
j = dyngen_code_search_pc(s, (uint8_t *)tc_ptr, searched_pc - tc_ptr);
|
|
180 |
j = tcg_gen_code_search_pc(s, (uint8_t *)tc_ptr, searched_pc - tc_ptr);
|
|
181 | 181 |
if (j < 0) |
182 | 182 |
return -1; |
183 | 183 |
/* now find start of instruction before */ |
Also available in: Unified diff