diff options
Diffstat (limited to 'translate-op.c')
-rw-r--r-- | translate-op.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/translate-op.c b/translate-op.c index fddac70..c25a161 100644 --- a/translate-op.c +++ b/translate-op.c @@ -27,11 +27,55 @@ enum { #define DEF(s, n, copy_size) INDEX_op_ ## s, +#ifdef GEN_TRACE +#include "opc-trace.h" +#else #include "opc.h" +#endif #undef DEF NB_OPS, }; #include "dyngen.h" +#ifdef GEN_TRACE +#define dyngen_code _trace_dyngen_code +#include "op-trace.h" +#else +#define dyngen_code _default_dyngen_code #include "op.h" +#endif + +typedef int (*dyngen_code_func)(uint8_t *gen_code_buf, + uint16_t *label_offsets, uint16_t *jmp_offsets, + const uint16_t *opc_buf, const uint32_t *opparam_buf, const long *gen_labels); + +extern dyngen_code_func _dyngen_code; + +#ifdef GEN_TRACE + +void qemu_trace_enable_dyngen( void ) +{ + _dyngen_code = dyngen_code; +} + +#else + +void qemu_trace_disable_dyngen( void ) +{ + _dyngen_code = dyngen_code; +} + +dyngen_code_func _dyngen_code = _default_dyngen_code; + +#undef dyngen_code + +int dyngen_code(uint8_t *gen_code_buf, + uint16_t *label_offsets, uint16_t *jmp_offsets, + const uint16_t *opc_buf, const uint32_t *opparam_buf, const long *gen_labels) +{ + return (*_dyngen_code)(gen_code_buf, label_offsets, jmp_offsets, opc_buf, opparam_buf, gen_labels); +} + +#endif + |