Revision a23a9ec6 tcg/tcg.c
b/tcg/tcg.c | ||
---|---|---|
1156 | 1156 |
} |
1157 | 1157 |
tcg_set_nop(s, gen_opc_buf + op_index, args, def->nb_args); |
1158 | 1158 |
#ifdef CONFIG_PROFILER |
1159 |
{ |
|
1160 |
extern int64_t dyngen_tcg_del_op_count; |
|
1161 |
dyngen_tcg_del_op_count++; |
|
1162 |
} |
|
1159 |
s->del_op_count++; |
|
1163 | 1160 |
#endif |
1164 | 1161 |
} else { |
1165 | 1162 |
do_not_remove: |
... | ... | |
1822 | 1819 |
} |
1823 | 1820 |
#endif |
1824 | 1821 |
|
1822 |
#ifdef CONFIG_PROFILER |
|
1823 |
s->la_time -= profile_getclock(); |
|
1824 |
#endif |
|
1825 | 1825 |
tcg_liveness_analysis(s); |
1826 |
#ifdef CONFIG_PROFILER |
|
1827 |
s->la_time += profile_getclock(); |
|
1828 |
#endif |
|
1826 | 1829 |
|
1827 | 1830 |
#ifdef DEBUG_DISAS |
1828 | 1831 |
if (unlikely(loglevel & CPU_LOG_TB_OP_OPT)) { |
... | ... | |
1911 | 1914 |
case 0 ... INDEX_op_end - 1: |
1912 | 1915 |
/* legacy dyngen ops */ |
1913 | 1916 |
#ifdef CONFIG_PROFILER |
1914 |
{ |
|
1915 |
extern int64_t dyngen_old_op_count; |
|
1916 |
dyngen_old_op_count++; |
|
1917 |
} |
|
1917 |
s->old_op_count++; |
|
1918 | 1918 |
#endif |
1919 | 1919 |
tcg_reg_alloc_bb_end(s); |
1920 | 1920 |
if (search_pc >= 0) { |
... | ... | |
1954 | 1954 |
{ |
1955 | 1955 |
#ifdef CONFIG_PROFILER |
1956 | 1956 |
{ |
1957 |
extern int64_t dyngen_op_count; |
|
1958 |
extern int dyngen_op_count_max; |
|
1959 | 1957 |
int n; |
1960 | 1958 |
n = (gen_opc_ptr - gen_opc_buf); |
1961 |
dyngen_op_count += n; |
|
1962 |
if (n > dyngen_op_count_max) |
|
1963 |
dyngen_op_count_max = n; |
|
1959 |
s->op_count += n; |
|
1960 |
if (n > s->op_count_max) |
|
1961 |
s->op_count_max = n; |
|
1962 |
|
|
1963 |
s->temp_count += s->nb_temps; |
|
1964 |
if (s->nb_temps > s->temp_count_max) |
|
1965 |
s->temp_count_max = s->nb_temps; |
|
1964 | 1966 |
} |
1965 | 1967 |
#endif |
1966 | 1968 |
|
... | ... | |
1980 | 1982 |
{ |
1981 | 1983 |
return tcg_gen_code_common(s, gen_code_buf, offset); |
1982 | 1984 |
} |
1985 |
|
|
1986 |
#ifdef CONFIG_PROFILER |
|
1987 |
void tcg_dump_info(FILE *f, |
|
1988 |
int (*cpu_fprintf)(FILE *f, const char *fmt, ...)) |
|
1989 |
{ |
|
1990 |
TCGContext *s = &tcg_ctx; |
|
1991 |
int64_t tot; |
|
1992 |
|
|
1993 |
tot = s->interm_time + s->code_time; |
|
1994 |
cpu_fprintf(f, "JIT cycles %" PRId64 " (%0.3f s at 2.4 GHz)\n", |
|
1995 |
tot, tot / 2.4e9); |
|
1996 |
cpu_fprintf(f, "translated TBs %" PRId64 " (aborted=%" PRId64 " %0.1f%%)\n", |
|
1997 |
s->tb_count, |
|
1998 |
s->tb_count1 - s->tb_count, |
|
1999 |
s->tb_count1 ? (double)(s->tb_count1 - s->tb_count) / s->tb_count1 * 100.0 : 0); |
|
2000 |
cpu_fprintf(f, "avg ops/TB %0.1f max=%d\n", |
|
2001 |
s->tb_count ? (double)s->op_count / s->tb_count : 0, s->op_count_max); |
|
2002 |
cpu_fprintf(f, "old ops/total ops %0.1f%%\n", |
|
2003 |
s->op_count ? (double)s->old_op_count / s->op_count * 100.0 : 0); |
|
2004 |
cpu_fprintf(f, "deleted ops/TB %0.2f\n", |
|
2005 |
s->tb_count ? |
|
2006 |
(double)s->del_op_count / s->tb_count : 0); |
|
2007 |
cpu_fprintf(f, "avg temps/TB %0.2f max=%d\n", |
|
2008 |
s->tb_count ? |
|
2009 |
(double)s->temp_count / s->tb_count : 0, |
|
2010 |
s->temp_count_max); |
|
2011 |
|
|
2012 |
cpu_fprintf(f, "cycles/op %0.1f\n", |
|
2013 |
s->op_count ? (double)tot / s->op_count : 0); |
|
2014 |
cpu_fprintf(f, "cycles/in byte %0.1f\n", |
|
2015 |
s->code_in_len ? (double)tot / s->code_in_len : 0); |
|
2016 |
cpu_fprintf(f, "cycles/out byte %0.1f\n", |
|
2017 |
s->code_out_len ? (double)tot / s->code_out_len : 0); |
|
2018 |
if (tot == 0) |
|
2019 |
tot = 1; |
|
2020 |
cpu_fprintf(f, " gen_interm time %0.1f%%\n", |
|
2021 |
(double)s->interm_time / tot * 100.0); |
|
2022 |
cpu_fprintf(f, " gen_code time %0.1f%%\n", |
|
2023 |
(double)s->code_time / tot * 100.0); |
|
2024 |
cpu_fprintf(f, "liveness/code time %0.1f%%\n", |
|
2025 |
(double)s->la_time / (s->code_time ? s->code_time : 1) * 100.0); |
|
2026 |
cpu_fprintf(f, "cpu_restore count %" PRId64 "\n", |
|
2027 |
s->restore_count); |
|
2028 |
cpu_fprintf(f, " avg cycles %0.1f\n", |
|
2029 |
s->restore_count ? (double)s->restore_time / s->restore_count : 0); |
|
2030 |
{ |
|
2031 |
extern void dump_op_count(void); |
|
2032 |
dump_op_count(); |
|
2033 |
} |
|
2034 |
} |
|
2035 |
#else |
|
2036 |
void dump_tcg_info(FILE *f, |
|
2037 |
int (*cpu_fprintf)(FILE *f, const char *fmt, ...)) |
|
2038 |
{ |
|
2039 |
cpu_fprintf("[TCG profiler not compiled]\n"); |
|
2040 |
} |
|
2041 |
#endif |
Also available in: Unified diff