1 /* 2 * Host code generation 3 * 4 * Copyright (c) 2003 Fabrice Bellard 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 #include <stdarg.h> 21 #include <stdlib.h> 22 #include <stdio.h> 23 #include <string.h> 24 #include <inttypes.h> 25 26 #include "config.h" 27 28 enum { 29 #define DEF(s, n, copy_size) INDEX_op_ ## s, 30 #ifdef GEN_TRACE 31 #include "opc-trace.h" 32 #else 33 #include "opc.h" 34 #endif 35 #undef DEF 36 NB_OPS, 37 }; 38 39 #include "dyngen.h" 40 #ifdef GEN_TRACE 41 #define dyngen_code _trace_dyngen_code 42 #include "op-trace.h" 43 #else 44 #define dyngen_code _default_dyngen_code 45 #include "op.h" 46 #endif 47 48 typedef int (*dyngen_code_func)(uint8_t *gen_code_buf, 49 uint16_t *label_offsets, uint16_t *jmp_offsets, 50 const uint16_t *opc_buf, const uint32_t *opparam_buf, const long *gen_labels); 51 52 extern dyngen_code_func _dyngen_code; 53 54 #ifdef GEN_TRACE 55 56 void qemu_trace_enable_dyngen( void ) 57 { 58 _dyngen_code = dyngen_code; 59 } 60 61 #else 62 63 void qemu_trace_disable_dyngen( void ) 64 { 65 _dyngen_code = dyngen_code; 66 } 67 68 dyngen_code_func _dyngen_code = _default_dyngen_code; 69 70 #undef dyngen_code 71 72 int dyngen_code(uint8_t *gen_code_buf, 73 uint16_t *label_offsets, uint16_t *jmp_offsets, 74 const uint16_t *opc_buf, const uint32_t *opparam_buf, const long *gen_labels) 75 { 76 return (*_dyngen_code)(gen_code_buf, label_offsets, jmp_offsets, opc_buf, opparam_buf, gen_labels); 77 } 78 79 #endif 80 81 82