1ed69e831SClaudio Fontana /* 2ed69e831SClaudio Fontana * TCG specific prototypes for helpers 3ed69e831SClaudio Fontana * 4ed69e831SClaudio Fontana * Copyright (c) 2003 Fabrice Bellard 5ed69e831SClaudio Fontana * 6ed69e831SClaudio Fontana * This library is free software; you can redistribute it and/or 7ed69e831SClaudio Fontana * modify it under the terms of the GNU Lesser General Public 8ed69e831SClaudio Fontana * License as published by the Free Software Foundation; either 9ed69e831SClaudio Fontana * version 2 of the License, or (at your option) any later version. 10ed69e831SClaudio Fontana * 11ed69e831SClaudio Fontana * This library is distributed in the hope that it will be useful, 12ed69e831SClaudio Fontana * but WITHOUT ANY WARRANTY; without even the implied warranty of 13ed69e831SClaudio Fontana * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14ed69e831SClaudio Fontana * Lesser General Public License for more details. 15ed69e831SClaudio Fontana * 16ed69e831SClaudio Fontana * You should have received a copy of the GNU Lesser General Public 17ed69e831SClaudio Fontana * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18ed69e831SClaudio Fontana */ 19ed69e831SClaudio Fontana 20ed69e831SClaudio Fontana #ifndef I386_HELPER_TCG_H 21ed69e831SClaudio Fontana #define I386_HELPER_TCG_H 22ed69e831SClaudio Fontana 23ed69e831SClaudio Fontana #include "exec/exec-all.h" 24ed69e831SClaudio Fontana 25ed69e831SClaudio Fontana /* Maximum instruction code size */ 26ed69e831SClaudio Fontana #define TARGET_MAX_INSN_SIZE 16 27ed69e831SClaudio Fontana 28ed69e831SClaudio Fontana #if defined(TARGET_X86_64) 29ed69e831SClaudio Fontana # define TCG_PHYS_ADDR_BITS 40 30ed69e831SClaudio Fontana #else 31ed69e831SClaudio Fontana # define TCG_PHYS_ADDR_BITS 36 32ed69e831SClaudio Fontana #endif 33ed69e831SClaudio Fontana 34b8184135SPaolo Bonzini QEMU_BUILD_BUG_ON(TCG_PHYS_ADDR_BITS > TARGET_PHYS_ADDR_SPACE_BITS); 35ed69e831SClaudio Fontana 36ed69e831SClaudio Fontana /** 37ed69e831SClaudio Fontana * x86_cpu_do_interrupt: 38ed69e831SClaudio Fontana * @cpu: vCPU the interrupt is to be handled by. 39ed69e831SClaudio Fontana */ 40ed69e831SClaudio Fontana void x86_cpu_do_interrupt(CPUState *cpu); 41ed69e831SClaudio Fontana bool x86_cpu_exec_interrupt(CPUState *cpu, int int_req); 42ed69e831SClaudio Fontana 43ed69e831SClaudio Fontana /* helper.c */ 44ed69e831SClaudio Fontana bool x86_cpu_tlb_fill(CPUState *cs, vaddr address, int size, 45ed69e831SClaudio Fontana MMUAccessType access_type, int mmu_idx, 46ed69e831SClaudio Fontana bool probe, uintptr_t retaddr); 47ed69e831SClaudio Fontana 48ed69e831SClaudio Fontana void breakpoint_handler(CPUState *cs); 49ed69e831SClaudio Fontana 50ed69e831SClaudio Fontana /* n must be a constant to be efficient */ 51ed69e831SClaudio Fontana static inline target_long lshift(target_long x, int n) 52ed69e831SClaudio Fontana { 53ed69e831SClaudio Fontana if (n >= 0) { 54ed69e831SClaudio Fontana return x << n; 55ed69e831SClaudio Fontana } else { 56ed69e831SClaudio Fontana return x >> (-n); 57ed69e831SClaudio Fontana } 58ed69e831SClaudio Fontana } 59ed69e831SClaudio Fontana 60ed69e831SClaudio Fontana /* translate.c */ 61ed69e831SClaudio Fontana void tcg_x86_init(void); 62ed69e831SClaudio Fontana 63ed69e831SClaudio Fontana /* excp_helper.c */ 64ed69e831SClaudio Fontana void QEMU_NORETURN raise_exception(CPUX86State *env, int exception_index); 65ed69e831SClaudio Fontana void QEMU_NORETURN raise_exception_ra(CPUX86State *env, int exception_index, 66ed69e831SClaudio Fontana uintptr_t retaddr); 67ed69e831SClaudio Fontana void QEMU_NORETURN raise_exception_err(CPUX86State *env, int exception_index, 68ed69e831SClaudio Fontana int error_code); 69ed69e831SClaudio Fontana void QEMU_NORETURN raise_exception_err_ra(CPUX86State *env, int exception_index, 70ed69e831SClaudio Fontana int error_code, uintptr_t retaddr); 71ed69e831SClaudio Fontana void QEMU_NORETURN raise_interrupt(CPUX86State *nenv, int intno, int is_int, 72ed69e831SClaudio Fontana int error_code, int next_eip_addend); 73ed69e831SClaudio Fontana 74ed69e831SClaudio Fontana /* cc_helper.c */ 75ed69e831SClaudio Fontana extern const uint8_t parity_table[256]; 76ed69e831SClaudio Fontana 7769483f31SClaudio Fontana /* misc_helper.c */ 7869483f31SClaudio Fontana void cpu_load_eflags(CPUX86State *env, int eflags, int update_mask); 79ed69e831SClaudio Fontana 80ed69e831SClaudio Fontana /* svm_helper.c */ 81ed69e831SClaudio Fontana void QEMU_NORETURN cpu_vmexit(CPUX86State *nenv, uint32_t exit_code, 82ed69e831SClaudio Fontana uint64_t exit_info_1, uintptr_t retaddr); 8368775856SPaolo Bonzini void do_vmexit(CPUX86State *env); 84ed69e831SClaudio Fontana 85ed69e831SClaudio Fontana /* seg_helper.c */ 86ed69e831SClaudio Fontana void do_interrupt_x86_hardirq(CPUX86State *env, int intno, int is_hw); 87*30493a03SClaudio Fontana void do_interrupt_all(X86CPU *cpu, int intno, int is_int, 88*30493a03SClaudio Fontana int error_code, target_ulong next_eip, int is_hw); 89*30493a03SClaudio Fontana void handle_even_inj(CPUX86State *env, int intno, int is_int, 90*30493a03SClaudio Fontana int error_code, int is_hw, int rm); 91*30493a03SClaudio Fontana int exception_has_error_code(int intno); 92ed69e831SClaudio Fontana 93ed69e831SClaudio Fontana /* smm_helper.c */ 94ed69e831SClaudio Fontana void do_smm_enter(X86CPU *cpu); 95ed69e831SClaudio Fontana 966d8d1a03SClaudio Fontana /* bpt_helper.c */ 976d8d1a03SClaudio Fontana bool check_hw_breakpoints(CPUX86State *env, bool force_dr6_update); 986d8d1a03SClaudio Fontana 99ed69e831SClaudio Fontana #endif /* I386_HELPER_TCG_H */ 100