| /* |
| * Host code generation |
| * |
| * Copyright (c) 2003 Fabrice Bellard |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| #include <stdarg.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <inttypes.h> |
| |
| #include "config.h" |
| |
| 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 |
| |
| |