/* * VARCem Virtual ARchaeological Computer EMulator. * An emulator of (mostly) x86-based PC systems and devices, * using the ISA,EISA,VLB,MCA and PCI system buses, roughly * spanning the era between 1981 and 1995. * * This file is part of the VARCem Project. * * Miscellaneous x86 CPU Instructions. * * Version: @(#)x86_ops.h 1.0.2 2018/05/05 * * Authors: Fred N. van Kempen, * Sarah Walker, * Miran Grca, * * Copyright 2018 Fred N. van Kempen. * Copyright 2008-2018 Sarah Walker. * Copyright 2016-2018 Miran Grca. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the: * * Free Software Foundation, Inc. * 59 Temple Place - Suite 330 * Boston, MA 02111-1307 * USA. */ #ifndef _X86_OPS_H #define _X86_OPS_H #define UN_USED(x) (void)(x) typedef int (*OpFn)(uint32_t fetchdat); #ifdef USE_DYNAREC void x86_setopcodes(const OpFn *opcodes, const OpFn *opcodes_0f, const OpFn *dynarec_opcodes, const OpFn *dynarec_opcodes_0f); extern const OpFn *x86_dynarec_opcodes; extern const OpFn *x86_dynarec_opcodes_0f; extern const OpFn *x86_dynarec_opcodes_d8_a16; extern const OpFn *x86_dynarec_opcodes_d8_a32; extern const OpFn *x86_dynarec_opcodes_d9_a16; extern const OpFn *x86_dynarec_opcodes_d9_a32; extern const OpFn *x86_dynarec_opcodes_da_a16; extern const OpFn *x86_dynarec_opcodes_da_a32; extern const OpFn *x86_dynarec_opcodes_db_a16; extern const OpFn *x86_dynarec_opcodes_db_a32; extern const OpFn *x86_dynarec_opcodes_dc_a16; extern const OpFn *x86_dynarec_opcodes_dc_a32; extern const OpFn *x86_dynarec_opcodes_dd_a16; extern const OpFn *x86_dynarec_opcodes_dd_a32; extern const OpFn *x86_dynarec_opcodes_de_a16; extern const OpFn *x86_dynarec_opcodes_de_a32; extern const OpFn *x86_dynarec_opcodes_df_a16; extern const OpFn *x86_dynarec_opcodes_df_a32; extern const OpFn *x86_dynarec_opcodes_REPE; extern const OpFn *x86_dynarec_opcodes_REPNE; extern const OpFn *x86_dynarec_opcodes_3DNOW; extern const OpFn dynarec_ops_286[1024]; extern const OpFn dynarec_ops_286_0f[1024]; extern const OpFn dynarec_ops_386[1024]; extern const OpFn dynarec_ops_386_0f[1024]; extern const OpFn dynarec_ops_486_0f[1024]; extern const OpFn dynarec_ops_winchip_0f[1024]; extern const OpFn dynarec_ops_winchip2_0f[1024]; extern const OpFn dynarec_ops_pentium_0f[1024]; extern const OpFn dynarec_ops_pentiummmx_0f[1024]; #if defined(USE_NEW_DYNAREC) || (defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)) extern const OpFn dynarec_ops_c6x86mx_0f[1024]; #endif #ifdef USE_NEW_DYNAREC extern const OpFn dynarec_ops_k6_0f[1024]; extern const OpFn dynarec_ops_k62_0f[1024]; #endif #if defined(DEV_BRANCH) && defined(USE_I686) extern const OpFn dynarec_ops_pentiumpro_0f[1024]; extern const OpFn dynarec_ops_pentium2_0f[1024]; extern const OpFn dynarec_ops_pentium2d_0f[1024]; #endif extern const OpFn dynarec_ops_fpu_287_d9_a16[256]; extern const OpFn dynarec_ops_fpu_287_d9_a32[256]; extern const OpFn dynarec_ops_fpu_287_da_a16[256]; extern const OpFn dynarec_ops_fpu_287_da_a32[256]; extern const OpFn dynarec_ops_fpu_287_db_a16[256]; extern const OpFn dynarec_ops_fpu_287_db_a32[256]; extern const OpFn dynarec_ops_fpu_287_dc_a16[32]; extern const OpFn dynarec_ops_fpu_287_dc_a32[32]; extern const OpFn dynarec_ops_fpu_287_dd_a16[256]; extern const OpFn dynarec_ops_fpu_287_dd_a32[256]; extern const OpFn dynarec_ops_fpu_287_de_a16[256]; extern const OpFn dynarec_ops_fpu_287_de_a32[256]; extern const OpFn dynarec_ops_fpu_287_df_a16[256]; extern const OpFn dynarec_ops_fpu_287_df_a32[256]; extern const OpFn dynarec_ops_fpu_d8_a16[32]; extern const OpFn dynarec_ops_fpu_d8_a32[32]; extern const OpFn dynarec_ops_fpu_d9_a16[256]; extern const OpFn dynarec_ops_fpu_d9_a32[256]; extern const OpFn dynarec_ops_fpu_da_a16[256]; extern const OpFn dynarec_ops_fpu_da_a32[256]; extern const OpFn dynarec_ops_fpu_db_a16[256]; extern const OpFn dynarec_ops_fpu_db_a32[256]; extern const OpFn dynarec_ops_fpu_dc_a16[32]; extern const OpFn dynarec_ops_fpu_dc_a32[32]; extern const OpFn dynarec_ops_fpu_dd_a16[256]; extern const OpFn dynarec_ops_fpu_dd_a32[256]; extern const OpFn dynarec_ops_fpu_de_a16[256]; extern const OpFn dynarec_ops_fpu_de_a32[256]; extern const OpFn dynarec_ops_fpu_df_a16[256]; extern const OpFn dynarec_ops_fpu_df_a32[256]; extern const OpFn dynarec_ops_nofpu_a16[256]; extern const OpFn dynarec_ops_nofpu_a32[256]; extern const OpFn dynarec_ops_fpu_686_da_a16[256]; extern const OpFn dynarec_ops_fpu_686_da_a32[256]; extern const OpFn dynarec_ops_fpu_686_db_a16[256]; extern const OpFn dynarec_ops_fpu_686_db_a32[256]; extern const OpFn dynarec_ops_fpu_686_df_a16[256]; extern const OpFn dynarec_ops_fpu_686_df_a32[256]; extern const OpFn dynarec_ops_REPE[1024]; extern const OpFn dynarec_ops_REPNE[1024]; #ifdef USE_NEW_DYNAREC extern const OpFn dynarec_ops_3DNOW[256]; #endif #else void x86_setopcodes(const OpFn *opcodes, const OpFn *opcodes_0f); #endif extern const OpFn *x86_opcodes; extern const OpFn *x86_opcodes_0f; extern const OpFn *x86_opcodes_d8_a16; extern const OpFn *x86_opcodes_d8_a32; extern const OpFn *x86_opcodes_d9_a16; extern const OpFn *x86_opcodes_d9_a32; extern const OpFn *x86_opcodes_da_a16; extern const OpFn *x86_opcodes_da_a32; extern const OpFn *x86_opcodes_db_a16; extern const OpFn *x86_opcodes_db_a32; extern const OpFn *x86_opcodes_dc_a16; extern const OpFn *x86_opcodes_dc_a32; extern const OpFn *x86_opcodes_dd_a16; extern const OpFn *x86_opcodes_dd_a32; extern const OpFn *x86_opcodes_de_a16; extern const OpFn *x86_opcodes_de_a32; extern const OpFn *x86_opcodes_df_a16; extern const OpFn *x86_opcodes_df_a32; extern const OpFn *x86_opcodes_REPE; extern const OpFn *x86_opcodes_REPNE; extern const OpFn *x86_opcodes_3DNOW; extern const OpFn ops_286[1024]; extern const OpFn ops_286_0f[1024]; extern const OpFn ops_386[1024]; extern const OpFn ops_386_0f[1024]; extern const OpFn ops_486_0f[1024]; extern const OpFn ops_winchip_0f[1024]; extern const OpFn ops_winchip2_0f[1024]; extern const OpFn ops_pentium_0f[1024]; extern const OpFn ops_pentiummmx_0f[1024]; #if defined(USE_NEW_DYNAREC) || (defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)) extern const OpFn ops_c6x86mx_0f[1024]; #endif #ifdef USE_NEW_DYNAREC extern const OpFn ops_k6_0f[1024]; extern const OpFn ops_k62_0f[1024]; #endif #if defined(DEV_BRANCH) && defined(USE_I686) extern const OpFn ops_pentiumpro_0f[1024]; extern const OpFn ops_pentium2_0f[1024]; extern const OpFn ops_pentium2d_0f[1024]; #endif extern const OpFn ops_fpu_287_d9_a16[256]; extern const OpFn ops_fpu_287_d9_a32[256]; extern const OpFn ops_fpu_287_da_a16[256]; extern const OpFn ops_fpu_287_da_a32[256]; extern const OpFn ops_fpu_287_db_a16[256]; extern const OpFn ops_fpu_287_db_a32[256]; extern const OpFn ops_fpu_287_dc_a16[32]; extern const OpFn ops_fpu_287_dc_a32[32]; extern const OpFn ops_fpu_287_dd_a16[256]; extern const OpFn ops_fpu_287_dd_a32[256]; extern const OpFn ops_fpu_287_de_a16[256]; extern const OpFn ops_fpu_287_de_a32[256]; extern const OpFn ops_fpu_287_df_a16[256]; extern const OpFn ops_fpu_287_df_a32[256]; extern const OpFn ops_fpu_d8_a16[32]; extern const OpFn ops_fpu_d8_a32[32]; extern const OpFn ops_fpu_d9_a16[256]; extern const OpFn ops_fpu_d9_a32[256]; extern const OpFn ops_fpu_da_a16[256]; extern const OpFn ops_fpu_da_a32[256]; extern const OpFn ops_fpu_db_a16[256]; extern const OpFn ops_fpu_db_a32[256]; extern const OpFn ops_fpu_dc_a16[32]; extern const OpFn ops_fpu_dc_a32[32]; extern const OpFn ops_fpu_dd_a16[256]; extern const OpFn ops_fpu_dd_a32[256]; extern const OpFn ops_fpu_de_a16[256]; extern const OpFn ops_fpu_de_a32[256]; extern const OpFn ops_fpu_df_a16[256]; extern const OpFn ops_fpu_df_a32[256]; extern const OpFn ops_nofpu_a16[256]; extern const OpFn ops_nofpu_a32[256]; extern const OpFn ops_fpu_686_da_a16[256]; extern const OpFn ops_fpu_686_da_a32[256]; extern const OpFn ops_fpu_686_db_a16[256]; extern const OpFn ops_fpu_686_db_a32[256]; extern const OpFn ops_fpu_686_df_a16[256]; extern const OpFn ops_fpu_686_df_a32[256]; extern const OpFn ops_REPE[1024]; extern const OpFn ops_REPNE[1024]; extern const OpFn ops_3DNOW[256]; #define C0 (1<<8) #define C1 (1<<9) #define C2 (1<<10) #define C3 (1<<14) #endif /*_X86_OPS_H*/