1 // license:BSD-3-Clause 2 // copyright-holders:Ville Linde, Barry Rodewald, Carl, Philip Bennett 3 #ifndef MAME_CPU_I386_I386_H 4 #define MAME_CPU_I386_I386_H 5 6 #pragma once 7 8 // SoftFloat 2 lacks an include guard 9 #ifndef softfloat_h 10 #define softfloat_h 1 11 #include "softfloat/milieu.h" 12 #include "softfloat/softfloat.h" 13 #endif 14 15 #include "divtlb.h" 16 17 #include "i386dasm.h" 18 19 #define INPUT_LINE_A20 1 20 #define INPUT_LINE_SMI 2 21 22 23 // mingw has this defined for 32-bit compiles 24 #undef i386 25 26 #define X86_NUM_CPUS 4 27 28 class i386_device : public cpu_device, public device_vtlb_interface, public i386_disassembler::config 29 { 30 public: 31 // construction/destruction 32 i386_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 33 34 // configuration helpers smiact()35 auto smiact() { return m_smiact.bind(); } ferr()36 auto ferr() { return m_ferr_handler.bind(); } 37 38 uint64_t debug_segbase(int params, const uint64_t *param); 39 uint64_t debug_seglimit(int params, const uint64_t *param); 40 uint64_t debug_segofftovirt(int params, const uint64_t *param); 41 uint64_t debug_virttophys(int params, const uint64_t *param); 42 uint64_t debug_cacheflush(int params, const uint64_t *param); 43 44 protected: 45 i386_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int program_data_width, int program_addr_width, int io_data_width); 46 47 // device-level overrides 48 virtual void device_start() override; 49 virtual void device_reset() override; 50 virtual void device_debug_setup() override; 51 52 // device_execute_interface overrides execute_min_cycles()53 virtual uint32_t execute_min_cycles() const noexcept override { return 1; } execute_max_cycles()54 virtual uint32_t execute_max_cycles() const noexcept override { return 40; } execute_input_lines()55 virtual uint32_t execute_input_lines() const noexcept override { return 32; } execute_input_edge_triggered(int inputnum)56 virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return inputnum == INPUT_LINE_NMI; } 57 virtual void execute_run() override; 58 virtual void execute_set_input(int inputnum, int state) override; 59 60 // device_memory_interface overrides 61 virtual space_config_vector memory_space_config() const override; 62 virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; 63 64 // device_state_interface overrides 65 virtual void state_import(const device_state_entry &entry) override; 66 virtual void state_export(const device_state_entry &entry) override; 67 virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; 68 69 // device_disasm_interface overrides 70 virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; 71 virtual int get_mode() const override; 72 73 // cpu-specific system management mode routines 74 virtual void enter_smm(); 75 virtual void leave_smm(); 76 77 // routines for opcodes whose operation can vary between cpu models 78 // default implementations usually just log an error message 79 virtual void opcode_cpuid(); 80 virtual uint64_t opcode_rdmsr(bool &valid_msr); 81 virtual void opcode_wrmsr(uint64_t data, bool &valid_msr); opcode_invd()82 virtual void opcode_invd() { cache_invalidate(); } opcode_wbinvd()83 virtual void opcode_wbinvd() { cache_writeback(); cache_invalidate(); } 84 85 // routines for the cache 86 // default implementation assumes there is no cache cache_writeback()87 virtual void cache_writeback() {} cache_invalidate()88 virtual void cache_invalidate() {} cache_clean()89 virtual void cache_clean() {} 90 91 // routine to access memory mem_pr8(offs_t address)92 virtual u8 mem_pr8(offs_t address) { return macache32.read_byte(address); } mem_pr16(offs_t address)93 virtual u16 mem_pr16(offs_t address) { return macache32.read_word(address); } mem_pr32(offs_t address)94 virtual u32 mem_pr32(offs_t address) { return macache32.read_dword(address); } 95 96 address_space_config m_program_config; 97 address_space_config m_io_config; 98 99 std::unique_ptr<uint8_t[]> cycle_table_rm[X86_NUM_CPUS]; 100 std::unique_ptr<uint8_t[]> cycle_table_pm[X86_NUM_CPUS]; 101 102 103 union I386_GPR { 104 uint32_t d[8]; 105 uint16_t w[16]; 106 uint8_t b[32]; 107 }; 108 109 struct I386_SREG { 110 uint16_t selector; 111 uint16_t flags; 112 uint32_t base; 113 uint32_t limit; 114 int d; // Operand size 115 bool valid; 116 }; 117 118 struct I386_SYS_TABLE { 119 uint32_t base; 120 uint16_t limit; 121 }; 122 123 struct I386_SEG_DESC { 124 uint16_t segment; 125 uint16_t flags; 126 uint32_t base; 127 uint32_t limit; 128 }; 129 130 union XMM_REG { 131 uint8_t b[16]; 132 uint16_t w[8]; 133 uint32_t d[4]; 134 uint64_t q[2]; 135 int8_t c[16]; 136 int16_t s[8]; 137 int32_t i[4]; 138 int64_t l[2]; 139 float f[4]; 140 double f64[2]; 141 }; 142 143 union MMX_REG { 144 uint32_t d[2]; 145 int32_t i[2]; 146 uint16_t w[4]; 147 int16_t s[4]; 148 uint8_t b[8]; 149 int8_t c[8]; 150 float f[2]; 151 uint64_t q; 152 int64_t l; 153 }; 154 155 struct I386_CALL_GATE 156 { 157 uint16_t segment; 158 uint16_t selector; 159 uint32_t offset; 160 uint8_t ar; // access rights 161 uint8_t dpl; 162 uint8_t dword_count; 163 uint8_t present; 164 }; 165 166 enum FEATURE_FLAGS : uint32_t { 167 // returned in the EDX register 168 FF_PBE = (u32)1 << 31, // Pend. Brk. EN. 169 FF_TM = 1 << 29, // Thermal Monitor 170 FF_HTT = 1 << 28, // Multi-threading 171 FF_SS = 1 << 27, // Self Snoop 172 FF_SSE2 = 1 << 26, // SSE2 Extensions 173 FF_SSE = 1 << 25, // SSE Extensions 174 FF_FXSR = 1 << 24, // FXSAVE/FXRSTOR 175 FF_MMX = 1 << 23, // MMX Technology 176 FF_ACPI = 1 << 22, // Thermal Monitor and Clock Ctrl 177 FF_DS = 1 << 21, // Debug Store 178 FF_CLFSH = 1 << 19, // CLFLUSH instruction 179 FF_PSN = 1 << 18, // Processor Serial Number 180 FF_PSE36 = 1 << 17, // 36 Bit Page Size Extension 181 FF_PAT = 1 << 16, // Page Attribute Table 182 FF_CMOV = 1 << 15, // Conditional Move/Compare Instruction 183 FF_MCA = 1 << 14, // Machine Check Architecture 184 FF_PGE = 1 << 13, // PTE Global Bit 185 FF_MTRR = 1 << 12, // Memory Type Range Registers 186 FF_SEP = 1 << 11, // SYSENTER and SYSEXIT 187 FF_APIC = 1 << 9, // APIC on Chip 188 FF_CX8 = 1 << 8, // CMPXCHG8B Inst. 189 FF_MCE = 1 << 7, // Machine Check Exception 190 FF_PAE = 1 << 6, // Physical Address Extensions 191 FF_MSR = 1 << 5, // RDMSR and WRMSR Support 192 FF_TSC = 1 << 4, // Time Stamp Counter 193 FF_PSE = 1 << 3, // Page Size Extensions 194 FF_DE = 1 << 2, // Debugging Extensions 195 FF_VME = 1 << 1, // Virtual-8086 Mode Enhancement 196 FF_FPU = 1 << 0, // x87 FPU on Chip 197 // retuned in the ECX register 198 FF_RDRAND = 1 << 30, 199 FF_F16C = 1 << 29, 200 FF_AVX = 1 << 28, 201 FF_OSXSAVE = 1 << 27, 202 FF_XSAVE = 1 << 26, 203 FF_AES = 1 << 25, 204 FF_TSCD = 1 << 24, // Deadline 205 FF_POPCNT = 1 << 23, 206 FF_MOVBE = 1 << 22, 207 FF_x2APIC = 1 << 21, 208 FF_SSE4_2 = 1 << 20, // SSE4.2 209 FF_SSE4_1 = 1 << 19, // SSE4.1 210 FF_DCA = 1 << 18, // Direct Cache Access 211 FF_PCID = 1 << 17, // Process-context Identifiers 212 FF_PDCM = 1 << 15, // Perf/Debug Capability MSR 213 FF_xTPR = 1 << 14, // Update Control 214 FF_CMPXCHG16B = 1 << 13, 215 FF_FMA = 1 << 12, // Fused Multiply Add 216 FF_SDBG = 1 << 11, 217 FF_CNXT_ID = 1 << 10, // L1 Context ID 218 FF_SSSE3 = 1 << 9, // SSSE3 Extensions 219 FF_TM2 = 1 << 8, // Thermal Monitor 2 220 FF_EIST = 1 << 7, // Enhanced Intel SpeedStep Technology 221 FF_SMX = 1 << 6, // Safer Mode Extensions 222 FF_VMX = 1 << 5, // Virtual Machine Extensions 223 FF_DS_CPL = 1 << 4, // CPL Qualified Debug Store 224 FF_MONITOR = 1 << 3, // MONITOR/MWAIT 225 FF_DTES64 = 1 << 2, // 64 Bit DS Area 226 FF_PCLMULQDQ = 1 << 1, // Carryless Multiplication 227 FF_SSE3 = 1 << 0, // SSE3 Extensions 228 }; 229 230 typedef void (i386_device::*i386_modrm_func)(uint8_t modrm); 231 typedef void (i386_device::*i386_op_func)(); 232 struct X86_OPCODE { 233 uint8_t opcode; 234 uint32_t flags; 235 i386_op_func handler16; 236 i386_op_func handler32; 237 bool lockable; 238 }; 239 static const X86_OPCODE s_x86_opcode_table[]; 240 241 I386_GPR m_reg; 242 I386_SREG m_sreg[6]; 243 uint32_t m_eip; 244 uint32_t m_pc; 245 uint32_t m_prev_eip; 246 uint32_t m_eflags; 247 uint32_t m_eflags_mask; 248 uint8_t m_CF; 249 uint8_t m_DF; 250 uint8_t m_SF; 251 uint8_t m_OF; 252 uint8_t m_ZF; 253 uint8_t m_PF; 254 uint8_t m_AF; 255 uint8_t m_IF; 256 uint8_t m_TF; 257 uint8_t m_IOP1; 258 uint8_t m_IOP2; 259 uint8_t m_NT; 260 uint8_t m_RF; 261 uint8_t m_VM; 262 uint8_t m_AC; 263 uint8_t m_VIF; 264 uint8_t m_VIP; 265 uint8_t m_ID; 266 267 uint8_t m_CPL; // current privilege level 268 269 bool m_auto_clear_RF; 270 uint8_t m_performed_intersegment_jump; 271 uint8_t m_delayed_interrupt_enable; 272 273 uint32_t m_cr[5]; // Control registers 274 uint32_t m_dr[8]; // Debug registers 275 uint32_t m_tr[8]; // Test registers 276 277 memory_passthrough_handler* m_dr_breakpoints[4]; 278 int m_notifier; 279 280 //386 Debug Register change handlers. 281 inline void dri_changed(); 282 inline void dr7_changed(uint32_t old_val, uint32_t new_val); 283 284 I386_SYS_TABLE m_gdtr; // Global Descriptor Table Register 285 I386_SYS_TABLE m_idtr; // Interrupt Descriptor Table Register 286 I386_SEG_DESC m_task; // Task register 287 I386_SEG_DESC m_ldtr; // Local Descriptor Table Register 288 289 uint8_t m_ext; // external interrupt 290 291 int m_halted; 292 293 int m_operand_size; 294 int m_xmm_operand_size; 295 int m_address_size; 296 int m_operand_prefix; 297 int m_address_prefix; 298 299 int m_segment_prefix; 300 int m_segment_override; 301 302 int m_cycles; 303 int m_base_cycles; 304 uint8_t m_opcode; 305 306 uint8_t m_irq_state; 307 address_space *m_program; 308 address_space *m_io; 309 uint32_t m_a20_mask; 310 memory_access<32, 1, 0, ENDIANNESS_LITTLE>::cache macache16; 311 memory_access<32, 2, 0, ENDIANNESS_LITTLE>::cache macache32; 312 313 int m_cpuid_max_input_value_eax; // Highest CPUID standard function available 314 uint32_t m_cpuid_id0, m_cpuid_id1, m_cpuid_id2; 315 uint32_t m_cpu_version; 316 uint32_t m_feature_flags; 317 uint64_t m_tsc; 318 uint64_t m_perfctr[2]; 319 320 // FPU 321 floatx80 m_x87_reg[8]; 322 323 uint16_t m_x87_cw; 324 uint16_t m_x87_sw; 325 uint16_t m_x87_tw; 326 uint16_t m_x87_ds; 327 uint32_t m_x87_data_ptr; 328 uint16_t m_x87_cs; 329 uint32_t m_x87_inst_ptr; 330 uint16_t m_x87_opcode; 331 332 i386_modrm_func m_opcode_table_x87_d8[256]; 333 i386_modrm_func m_opcode_table_x87_d9[256]; 334 i386_modrm_func m_opcode_table_x87_da[256]; 335 i386_modrm_func m_opcode_table_x87_db[256]; 336 i386_modrm_func m_opcode_table_x87_dc[256]; 337 i386_modrm_func m_opcode_table_x87_dd[256]; 338 i386_modrm_func m_opcode_table_x87_de[256]; 339 i386_modrm_func m_opcode_table_x87_df[256]; 340 341 // SSE 342 XMM_REG m_sse_reg[8]; 343 uint32_t m_mxcsr; 344 345 i386_op_func m_opcode_table1_16[256]; 346 i386_op_func m_opcode_table1_32[256]; 347 i386_op_func m_opcode_table2_16[256]; 348 i386_op_func m_opcode_table2_32[256]; 349 i386_op_func m_opcode_table338_16[256]; 350 i386_op_func m_opcode_table338_32[256]; 351 i386_op_func m_opcode_table33a_16[256]; 352 i386_op_func m_opcode_table33a_32[256]; 353 i386_op_func m_opcode_table366_16[256]; 354 i386_op_func m_opcode_table366_32[256]; 355 i386_op_func m_opcode_table3f2_16[256]; 356 i386_op_func m_opcode_table3f2_32[256]; 357 i386_op_func m_opcode_table3f3_16[256]; 358 i386_op_func m_opcode_table3f3_32[256]; 359 i386_op_func m_opcode_table46638_16[256]; 360 i386_op_func m_opcode_table46638_32[256]; 361 i386_op_func m_opcode_table4f238_16[256]; 362 i386_op_func m_opcode_table4f238_32[256]; 363 i386_op_func m_opcode_table4f338_16[256]; 364 i386_op_func m_opcode_table4f338_32[256]; 365 i386_op_func m_opcode_table4663a_16[256]; 366 i386_op_func m_opcode_table4663a_32[256]; 367 i386_op_func m_opcode_table4f23a_16[256]; 368 i386_op_func m_opcode_table4f23a_32[256]; 369 370 bool m_lock_table[2][256]; 371 372 uint8_t *m_cycle_table_pm; 373 uint8_t *m_cycle_table_rm; 374 375 bool m_smm; 376 bool m_smi; 377 bool m_smi_latched; 378 bool m_nmi_masked; 379 bool m_nmi_latched; 380 uint32_t m_smbase; 381 devcb_write_line m_smiact; 382 devcb_write_line m_ferr_handler; 383 bool m_lock; 384 385 // bytes in current opcode, debug only 386 uint8_t m_opcode_bytes[16]; 387 uint32_t m_opcode_pc; 388 int m_opcode_bytes_length; 389 390 uint64_t m_debugger_temp; 391 392 void register_state_i386(); 393 void register_state_i386_x87(); 394 void register_state_i386_x87_xmm(); 395 uint32_t i386_translate(int segment, uint32_t ip, int rwn); 396 inline vtlb_entry get_permissions(uint32_t pte, int wp); 397 bool i386_translate_address(int intention, offs_t *address, vtlb_entry *entry); 398 bool translate_address(int pl, int type, uint32_t *address, uint32_t *error); 399 void CHANGE_PC(uint32_t pc); 400 inline void NEAR_BRANCH(int32_t offs); 401 inline uint8_t FETCH(); 402 inline uint16_t FETCH16(); 403 inline uint32_t FETCH32(); READ8(uint32_t ea)404 inline uint8_t READ8(uint32_t ea) { return READ8PL(ea, m_CPL); } READ16(uint32_t ea)405 inline uint16_t READ16(uint32_t ea) { return READ16PL(ea, m_CPL); } READ32(uint32_t ea)406 inline uint32_t READ32(uint32_t ea) { return READ32PL(ea, m_CPL); } READ64(uint32_t ea)407 inline uint64_t READ64(uint32_t ea) { return READ64PL(ea, m_CPL); } 408 virtual uint8_t READ8PL(uint32_t ea, uint8_t privilege); 409 virtual uint16_t READ16PL(uint32_t ea, uint8_t privilege); 410 virtual uint32_t READ32PL(uint32_t ea, uint8_t privilege); 411 virtual uint64_t READ64PL(uint32_t ea, uint8_t privilege); 412 inline void WRITE_TEST(uint32_t ea); WRITE8(uint32_t ea,uint8_t value)413 inline void WRITE8(uint32_t ea, uint8_t value) { WRITE8PL(ea, m_CPL, value); } WRITE16(uint32_t ea,uint16_t value)414 inline void WRITE16(uint32_t ea, uint16_t value) { WRITE16PL(ea, m_CPL, value); } WRITE32(uint32_t ea,uint32_t value)415 inline void WRITE32(uint32_t ea, uint32_t value) { WRITE32PL(ea, m_CPL, value); } WRITE64(uint32_t ea,uint64_t value)416 inline void WRITE64(uint32_t ea, uint64_t value) { WRITE64PL(ea, m_CPL, value); } 417 virtual void WRITE8PL(uint32_t ea, uint8_t privilege, uint8_t value); 418 virtual void WRITE16PL(uint32_t ea, uint8_t privilege, uint16_t value); 419 virtual void WRITE32PL(uint32_t ea, uint8_t privilege, uint32_t value); 420 virtual void WRITE64PL(uint32_t ea, uint8_t privilege, uint64_t value); 421 inline uint8_t OR8(uint8_t dst, uint8_t src); 422 inline uint16_t OR16(uint16_t dst, uint16_t src); 423 inline uint32_t OR32(uint32_t dst, uint32_t src); 424 inline uint8_t AND8(uint8_t dst, uint8_t src); 425 inline uint16_t AND16(uint16_t dst, uint16_t src); 426 inline uint32_t AND32(uint32_t dst, uint32_t src); 427 inline uint8_t XOR8(uint8_t dst, uint8_t src); 428 inline uint16_t XOR16(uint16_t dst, uint16_t src); 429 inline uint32_t XOR32(uint32_t dst, uint32_t src); 430 inline uint8_t SBB8(uint8_t dst, uint8_t src, uint8_t b); 431 inline uint16_t SBB16(uint16_t dst, uint16_t src, uint16_t b); 432 inline uint32_t SBB32(uint32_t dst, uint32_t src, uint32_t b); 433 inline uint8_t ADC8(uint8_t dst, uint8_t src, uint8_t c); 434 inline uint16_t ADC16(uint16_t dst, uint16_t src, uint8_t c); 435 inline uint32_t ADC32(uint32_t dst, uint32_t src, uint32_t c); 436 inline uint8_t INC8(uint8_t dst); 437 inline uint16_t INC16(uint16_t dst); 438 inline uint32_t INC32(uint32_t dst); 439 inline uint8_t DEC8(uint8_t dst); 440 inline uint16_t DEC16(uint16_t dst); 441 inline uint32_t DEC32(uint32_t dst); 442 inline void PUSH16(uint16_t value); 443 inline void PUSH32(uint32_t value); 444 inline void PUSH32SEG(uint32_t value); 445 inline void PUSH8(uint8_t value); 446 inline uint8_t POP8(); 447 inline uint16_t POP16(); 448 inline uint32_t POP32(); 449 inline void BUMP_SI(int adjustment); 450 inline void BUMP_DI(int adjustment); 451 inline void check_ioperm(offs_t port, uint8_t mask); 452 inline uint8_t READPORT8(offs_t port); 453 inline void WRITEPORT8(offs_t port, uint8_t value); 454 virtual uint16_t READPORT16(offs_t port); 455 virtual void WRITEPORT16(offs_t port, uint16_t value); 456 virtual uint32_t READPORT32(offs_t port); 457 virtual void WRITEPORT32(offs_t port, uint32_t value); 458 uint32_t i386_load_protected_mode_segment(I386_SREG *seg, uint64_t *desc ); 459 void i386_load_call_gate(I386_CALL_GATE *gate); 460 void i386_set_descriptor_accessed(uint16_t selector); 461 void i386_load_segment_descriptor(int segment ); 462 uint32_t i386_get_stack_segment(uint8_t privilege); 463 uint32_t i386_get_stack_ptr(uint8_t privilege); 464 uint32_t get_flags() const; 465 void set_flags(uint32_t f ); 466 void sib_byte(uint8_t mod, uint32_t* out_ea, uint8_t* out_segment); 467 void modrm_to_EA(uint8_t mod_rm, uint32_t* out_ea, uint8_t* out_segment); 468 uint32_t GetNonTranslatedEA(uint8_t modrm,uint8_t *seg); 469 uint32_t GetEA(uint8_t modrm, int rwn); 470 uint32_t Getx87EA(uint8_t modrm, int rwn); 471 void i386_check_sreg_validity(int reg); 472 int i386_limit_check(int seg, uint32_t offset); 473 void i386_sreg_load(uint16_t selector, uint8_t reg, bool *fault); 474 void i386_trap(int irq, int irq_gate, int trap_level); 475 void i386_trap_with_error(int irq, int irq_gate, int trap_level, uint32_t error); 476 void i286_task_switch(uint16_t selector, uint8_t nested); 477 void i386_task_switch(uint16_t selector, uint8_t nested); 478 void i386_check_irq_line(); 479 void i386_protected_mode_jump(uint16_t seg, uint32_t off, int indirect, int operand32); 480 void i386_protected_mode_call(uint16_t seg, uint32_t off, int indirect, int operand32); 481 void i386_protected_mode_retf(uint8_t count, uint8_t operand32); 482 void i386_protected_mode_iret(int operand32); 483 void build_cycle_table(); 484 void report_invalid_opcode(); 485 void report_invalid_modrm(const char* opcode, uint8_t modrm); 486 void i386_decode_opcode(); 487 void i386_decode_two_byte(); 488 void i386_decode_three_byte38(); 489 void i386_decode_three_byte3a(); 490 void i386_decode_three_byte66(); 491 void i386_decode_three_bytef2(); 492 void i386_decode_three_bytef3(); 493 void i386_decode_four_byte3866(); 494 void i386_decode_four_byte3a66(); 495 void i386_decode_four_byte38f2(); 496 void i386_decode_four_byte3af2(); 497 void i386_decode_four_byte38f3(); 498 uint8_t read8_debug(uint32_t ea, uint8_t *data); 499 uint32_t i386_get_debug_desc(I386_SREG *seg); 500 void CYCLES(int x); 501 inline void CYCLES_RM(int modrm, int r, int m); 502 uint8_t i386_shift_rotate8(uint8_t modrm, uint32_t value, uint8_t shift); 503 void i386_adc_rm8_r8(); 504 void i386_adc_r8_rm8(); 505 void i386_adc_al_i8(); 506 void i386_add_rm8_r8(); 507 void i386_add_r8_rm8(); 508 void i386_add_al_i8(); 509 void i386_and_rm8_r8(); 510 void i386_and_r8_rm8(); 511 void i386_and_al_i8(); 512 void i386_clc(); 513 void i386_cld(); 514 void i386_cli(); 515 void i386_cmc(); 516 void i386_cmp_rm8_r8(); 517 void i386_cmp_r8_rm8(); 518 void i386_cmp_al_i8(); 519 void i386_cmpsb(); 520 void i386_in_al_i8(); 521 void i386_in_al_dx(); 522 void i386_ja_rel8(); 523 void i386_jbe_rel8(); 524 void i386_jc_rel8(); 525 void i386_jg_rel8(); 526 void i386_jge_rel8(); 527 void i386_jl_rel8(); 528 void i386_jle_rel8(); 529 void i386_jnc_rel8(); 530 void i386_jno_rel8(); 531 void i386_jnp_rel8(); 532 void i386_jns_rel8(); 533 void i386_jnz_rel8(); 534 void i386_jo_rel8(); 535 void i386_jp_rel8(); 536 void i386_js_rel8(); 537 void i386_jz_rel8(); 538 void i386_jmp_rel8(); 539 void i386_lahf(); 540 void i386_lodsb(); 541 void i386_mov_rm8_r8(); 542 void i386_mov_r8_rm8(); 543 void i386_mov_rm8_i8(); 544 void i386_mov_r32_cr(); 545 void i386_mov_r32_dr(); 546 void i386_mov_cr_r32(); 547 void i386_mov_dr_r32(); 548 void i386_mov_al_m8(); 549 void i386_mov_m8_al(); 550 void i386_mov_rm16_sreg(); 551 void i386_mov_sreg_rm16(); 552 void i386_mov_al_i8(); 553 void i386_mov_cl_i8(); 554 void i386_mov_dl_i8(); 555 void i386_mov_bl_i8(); 556 void i386_mov_ah_i8(); 557 void i386_mov_ch_i8(); 558 void i386_mov_dh_i8(); 559 void i386_mov_bh_i8(); 560 void i386_movsb(); 561 void i386_or_rm8_r8(); 562 void i386_or_r8_rm8(); 563 void i386_or_al_i8(); 564 void i386_out_al_i8(); 565 void i386_out_al_dx(); 566 void i386_arpl(); 567 void i386_push_i8(); 568 void i386_ins_generic(int size); 569 void i386_insb(); 570 void i386_insw(); 571 void i386_insd(); 572 void i386_outs_generic(int size); 573 void i386_outsb(); 574 void i386_outsw(); 575 void i386_outsd(); 576 void i386_repeat(int invert_flag); 577 void i386_rep(); 578 void i386_repne(); 579 void i386_sahf(); 580 void i386_sbb_rm8_r8(); 581 void i386_sbb_r8_rm8(); 582 void i386_sbb_al_i8(); 583 void i386_scasb(); 584 void i386_setalc(); 585 void i386_seta_rm8(); 586 void i386_setbe_rm8(); 587 void i386_setc_rm8(); 588 void i386_setg_rm8(); 589 void i386_setge_rm8(); 590 void i386_setl_rm8(); 591 void i386_setle_rm8(); 592 void i386_setnc_rm8(); 593 void i386_setno_rm8(); 594 void i386_setnp_rm8(); 595 void i386_setns_rm8(); 596 void i386_setnz_rm8(); 597 void i386_seto_rm8(); 598 void i386_setp_rm8(); 599 void i386_sets_rm8(); 600 void i386_setz_rm8(); 601 void i386_stc(); 602 void i386_std(); 603 void i386_sti(); 604 void i386_stosb(); 605 void i386_sub_rm8_r8(); 606 void i386_sub_r8_rm8(); 607 void i386_sub_al_i8(); 608 void i386_test_al_i8(); 609 void i386_test_rm8_r8(); 610 void i386_xchg_r8_rm8(); 611 void i386_xor_rm8_r8(); 612 void i386_xor_r8_rm8(); 613 void i386_xor_al_i8(); 614 void i386_group80_8(); 615 void i386_groupC0_8(); 616 void i386_groupD0_8(); 617 void i386_groupD2_8(); 618 void i386_groupF6_8(); 619 void i386_groupFE_8(); 620 void i386_segment_CS(); 621 void i386_segment_DS(); 622 void i386_segment_ES(); 623 void i386_segment_FS(); 624 void i386_segment_GS(); 625 void i386_segment_SS(); 626 void i386_operand_size(); 627 void i386_address_size(); 628 void i386_nop(); 629 void i386_int3(); 630 void i386_int(); 631 void i386_into(); 632 void i386_escape(); 633 void i386_hlt(); 634 void i386_decimal_adjust(int direction); 635 void i386_daa(); 636 void i386_das(); 637 void i386_aaa(); 638 void i386_aas(); 639 void i386_aad(); 640 void i386_aam(); 641 void i386_clts(); 642 void i386_wait(); 643 void i486_wait(); 644 void i386_lock(); 645 void i386_mov_r32_tr(); 646 void i386_mov_tr_r32(); 647 void i386_loadall(); 648 void i386_invalid(); 649 void i386_xlat(); 650 uint16_t i386_shift_rotate16(uint8_t modrm, uint32_t value, uint8_t shift); 651 void i386_adc_rm16_r16(); 652 void i386_adc_r16_rm16(); 653 void i386_adc_ax_i16(); 654 void i386_add_rm16_r16(); 655 void i386_add_r16_rm16(); 656 void i386_add_ax_i16(); 657 void i386_and_rm16_r16(); 658 void i386_and_r16_rm16(); 659 void i386_and_ax_i16(); 660 void i386_bsf_r16_rm16(); 661 void i386_bsr_r16_rm16(); 662 void i386_bt_rm16_r16(); 663 void i386_btc_rm16_r16(); 664 void i386_btr_rm16_r16(); 665 void i386_bts_rm16_r16(); 666 void i386_call_abs16(); 667 void i386_call_rel16(); 668 void i386_cbw(); 669 void i386_cmp_rm16_r16(); 670 void i386_cmp_r16_rm16(); 671 void i386_cmp_ax_i16(); 672 void i386_cmpsw(); 673 void i386_cwd(); 674 void i386_dec_ax(); 675 void i386_dec_cx(); 676 void i386_dec_dx(); 677 void i386_dec_bx(); 678 void i386_dec_sp(); 679 void i386_dec_bp(); 680 void i386_dec_si(); 681 void i386_dec_di(); 682 void i386_imul_r16_rm16(); 683 void i386_imul_r16_rm16_i16(); 684 void i386_imul_r16_rm16_i8(); 685 void i386_in_ax_i8(); 686 void i386_in_ax_dx(); 687 void i386_inc_ax(); 688 void i386_inc_cx(); 689 void i386_inc_dx(); 690 void i386_inc_bx(); 691 void i386_inc_sp(); 692 void i386_inc_bp(); 693 void i386_inc_si(); 694 void i386_inc_di(); 695 void i386_iret16(); 696 void i386_ja_rel16(); 697 void i386_jbe_rel16(); 698 void i386_jc_rel16(); 699 void i386_jg_rel16(); 700 void i386_jge_rel16(); 701 void i386_jl_rel16(); 702 void i386_jle_rel16(); 703 void i386_jnc_rel16(); 704 void i386_jno_rel16(); 705 void i386_jnp_rel16(); 706 void i386_jns_rel16(); 707 void i386_jnz_rel16(); 708 void i386_jo_rel16(); 709 void i386_jp_rel16(); 710 void i386_js_rel16(); 711 void i386_jz_rel16(); 712 void i386_jcxz16(); 713 void i386_jmp_rel16(); 714 void i386_jmp_abs16(); 715 void i386_lea16(); 716 void i386_enter16(); 717 void i386_leave16(); 718 void i386_lodsw(); 719 void i386_loop16(); 720 void i386_loopne16(); 721 void i386_loopz16(); 722 void i386_mov_rm16_r16(); 723 void i386_mov_r16_rm16(); 724 void i386_mov_rm16_i16(); 725 void i386_mov_ax_m16(); 726 void i386_mov_m16_ax(); 727 void i386_mov_ax_i16(); 728 void i386_mov_cx_i16(); 729 void i386_mov_dx_i16(); 730 void i386_mov_bx_i16(); 731 void i386_mov_sp_i16(); 732 void i386_mov_bp_i16(); 733 void i386_mov_si_i16(); 734 void i386_mov_di_i16(); 735 void i386_movsw(); 736 void i386_movsx_r16_rm8(); 737 void i386_movzx_r16_rm8(); 738 void i386_or_rm16_r16(); 739 void i386_or_r16_rm16(); 740 void i386_or_ax_i16(); 741 void i386_out_ax_i8(); 742 void i386_out_ax_dx(); 743 void i386_pop_ax(); 744 void i386_pop_cx(); 745 void i386_pop_dx(); 746 void i386_pop_bx(); 747 void i386_pop_sp(); 748 void i386_pop_bp(); 749 void i386_pop_si(); 750 void i386_pop_di(); 751 bool i386_pop_seg16(int segment); 752 void i386_pop_ds16(); 753 void i386_pop_es16(); 754 void i386_pop_fs16(); 755 void i386_pop_gs16(); 756 void i386_pop_ss16(); 757 void i386_pop_rm16(); 758 void i386_popa(); 759 void i386_popf(); 760 void i386_push_ax(); 761 void i386_push_cx(); 762 void i386_push_dx(); 763 void i386_push_bx(); 764 void i386_push_sp(); 765 void i386_push_bp(); 766 void i386_push_si(); 767 void i386_push_di(); 768 void i386_push_cs16(); 769 void i386_push_ds16(); 770 void i386_push_es16(); 771 void i386_push_fs16(); 772 void i386_push_gs16(); 773 void i386_push_ss16(); 774 void i386_push_i16(); 775 void i386_pusha(); 776 void i386_pushf(); 777 void i386_ret_near16_i16(); 778 void i386_ret_near16(); 779 void i386_sbb_rm16_r16(); 780 void i386_sbb_r16_rm16(); 781 void i386_sbb_ax_i16(); 782 void i386_scasw(); 783 void i386_shld16_i8(); 784 void i386_shld16_cl(); 785 void i386_shrd16_i8(); 786 void i386_shrd16_cl(); 787 void i386_stosw(); 788 void i386_sub_rm16_r16(); 789 void i386_sub_r16_rm16(); 790 void i386_sub_ax_i16(); 791 void i386_test_ax_i16(); 792 void i386_test_rm16_r16(); 793 void i386_xchg_ax_cx(); 794 void i386_xchg_ax_dx(); 795 void i386_xchg_ax_bx(); 796 void i386_xchg_ax_sp(); 797 void i386_xchg_ax_bp(); 798 void i386_xchg_ax_si(); 799 void i386_xchg_ax_di(); 800 void i386_xchg_r16_rm16(); 801 void i386_xor_rm16_r16(); 802 void i386_xor_r16_rm16(); 803 void i386_xor_ax_i16(); 804 void i386_group81_16(); 805 void i386_group83_16(); 806 void i386_groupC1_16(); 807 void i386_groupD1_16(); 808 void i386_groupD3_16(); 809 void i386_groupF7_16(); 810 void i386_groupFF_16(); 811 void i386_group0F00_16(); 812 void i386_group0F01_16(); 813 void i386_group0FBA_16(); 814 void i386_lar_r16_rm16(); 815 void i386_lsl_r16_rm16(); 816 void i386_bound_r16_m16_m16(); 817 void i386_retf16(); 818 void i386_retf_i16(); 819 bool i386_load_far_pointer16(int s); 820 void i386_lds16(); 821 void i386_lss16(); 822 void i386_les16(); 823 void i386_lfs16(); 824 void i386_lgs16(); 825 uint32_t i386_shift_rotate32(uint8_t modrm, uint32_t value, uint8_t shift); 826 void i386_adc_rm32_r32(); 827 void i386_adc_r32_rm32(); 828 void i386_adc_eax_i32(); 829 void i386_add_rm32_r32(); 830 void i386_add_r32_rm32(); 831 void i386_add_eax_i32(); 832 void i386_and_rm32_r32(); 833 void i386_and_r32_rm32(); 834 void i386_and_eax_i32(); 835 void i386_bsf_r32_rm32(); 836 void i386_bsr_r32_rm32(); 837 void i386_bt_rm32_r32(); 838 void i386_btc_rm32_r32(); 839 void i386_btr_rm32_r32(); 840 void i386_bts_rm32_r32(); 841 void i386_call_abs32(); 842 void i386_call_rel32(); 843 void i386_cdq(); 844 void i386_cmp_rm32_r32(); 845 void i386_cmp_r32_rm32(); 846 void i386_cmp_eax_i32(); 847 void i386_cmpsd(); 848 void i386_cwde(); 849 void i386_dec_eax(); 850 void i386_dec_ecx(); 851 void i386_dec_edx(); 852 void i386_dec_ebx(); 853 void i386_dec_esp(); 854 void i386_dec_ebp(); 855 void i386_dec_esi(); 856 void i386_dec_edi(); 857 void i386_imul_r32_rm32(); 858 void i386_imul_r32_rm32_i32(); 859 void i386_imul_r32_rm32_i8(); 860 void i386_in_eax_i8(); 861 void i386_in_eax_dx(); 862 void i386_inc_eax(); 863 void i386_inc_ecx(); 864 void i386_inc_edx(); 865 void i386_inc_ebx(); 866 void i386_inc_esp(); 867 void i386_inc_ebp(); 868 void i386_inc_esi(); 869 void i386_inc_edi(); 870 void i386_iret32(); 871 void i386_ja_rel32(); 872 void i386_jbe_rel32(); 873 void i386_jc_rel32(); 874 void i386_jg_rel32(); 875 void i386_jge_rel32(); 876 void i386_jl_rel32(); 877 void i386_jle_rel32(); 878 void i386_jnc_rel32(); 879 void i386_jno_rel32(); 880 void i386_jnp_rel32(); 881 void i386_jns_rel32(); 882 void i386_jnz_rel32(); 883 void i386_jo_rel32(); 884 void i386_jp_rel32(); 885 void i386_js_rel32(); 886 void i386_jz_rel32(); 887 void i386_jcxz32(); 888 void i386_jmp_rel32(); 889 void i386_jmp_abs32(); 890 void i386_lea32(); 891 void i386_enter32(); 892 void i386_leave32(); 893 void i386_lodsd(); 894 void i386_loop32(); 895 void i386_loopne32(); 896 void i386_loopz32(); 897 void i386_mov_rm32_r32(); 898 void i386_mov_r32_rm32(); 899 void i386_mov_rm32_i32(); 900 void i386_mov_eax_m32(); 901 void i386_mov_m32_eax(); 902 void i386_mov_eax_i32(); 903 void i386_mov_ecx_i32(); 904 void i386_mov_edx_i32(); 905 void i386_mov_ebx_i32(); 906 void i386_mov_esp_i32(); 907 void i386_mov_ebp_i32(); 908 void i386_mov_esi_i32(); 909 void i386_mov_edi_i32(); 910 void i386_movsd(); 911 void i386_movsx_r32_rm8(); 912 void i386_movsx_r32_rm16(); 913 void i386_movzx_r32_rm8(); 914 void i386_movzx_r32_rm16(); 915 void i386_or_rm32_r32(); 916 void i386_or_r32_rm32(); 917 void i386_or_eax_i32(); 918 void i386_out_eax_i8(); 919 void i386_out_eax_dx(); 920 void i386_pop_eax(); 921 void i386_pop_ecx(); 922 void i386_pop_edx(); 923 void i386_pop_ebx(); 924 void i386_pop_esp(); 925 void i386_pop_ebp(); 926 void i386_pop_esi(); 927 void i386_pop_edi(); 928 bool i386_pop_seg32(int segment); 929 void i386_pop_ds32(); 930 void i386_pop_es32(); 931 void i386_pop_fs32(); 932 void i386_pop_gs32(); 933 void i386_pop_ss32(); 934 void i386_pop_rm32(); 935 void i386_popad(); 936 void i386_popfd(); 937 void i386_push_eax(); 938 void i386_push_ecx(); 939 void i386_push_edx(); 940 void i386_push_ebx(); 941 void i386_push_esp(); 942 void i386_push_ebp(); 943 void i386_push_esi(); 944 void i386_push_edi(); 945 void i386_push_cs32(); 946 void i386_push_ds32(); 947 void i386_push_es32(); 948 void i386_push_fs32(); 949 void i386_push_gs32(); 950 void i386_push_ss32(); 951 void i386_push_i32(); 952 void i386_pushad(); 953 void i386_pushfd(); 954 void i386_ret_near32_i16(); 955 void i386_ret_near32(); 956 void i386_sbb_rm32_r32(); 957 void i386_sbb_r32_rm32(); 958 void i386_sbb_eax_i32(); 959 void i386_scasd(); 960 void i386_shld32_i8(); 961 void i386_shld32_cl(); 962 void i386_shrd32_i8(); 963 void i386_shrd32_cl(); 964 void i386_stosd(); 965 void i386_sub_rm32_r32(); 966 void i386_sub_r32_rm32(); 967 void i386_sub_eax_i32(); 968 void i386_test_eax_i32(); 969 void i386_test_rm32_r32(); 970 void i386_xchg_eax_ecx(); 971 void i386_xchg_eax_edx(); 972 void i386_xchg_eax_ebx(); 973 void i386_xchg_eax_esp(); 974 void i386_xchg_eax_ebp(); 975 void i386_xchg_eax_esi(); 976 void i386_xchg_eax_edi(); 977 void i386_xchg_r32_rm32(); 978 void i386_xor_rm32_r32(); 979 void i386_xor_r32_rm32(); 980 void i386_xor_eax_i32(); 981 void i386_group81_32(); 982 void i386_group83_32(); 983 void i386_groupC1_32(); 984 void i386_groupD1_32(); 985 void i386_groupD3_32(); 986 void i386_groupF7_32(); 987 void i386_groupFF_32(); 988 void i386_group0F00_32(); 989 void i386_group0F01_32(); 990 void i386_group0FBA_32(); 991 void i386_lar_r32_rm32(); 992 void i386_lsl_r32_rm32(); 993 void i386_bound_r32_m32_m32(); 994 void i386_retf32(); 995 void i386_retf_i32(); 996 void i386_load_far_pointer32(int s); 997 void i386_lds32(); 998 void i386_lss32(); 999 void i386_les32(); 1000 void i386_lfs32(); 1001 void i386_lgs32(); 1002 void i486_cpuid(); 1003 void i486_invd(); 1004 void i486_wbinvd(); 1005 void i486_cmpxchg_rm8_r8(); 1006 void i486_cmpxchg_rm16_r16(); 1007 void i486_cmpxchg_rm32_r32(); 1008 void i486_xadd_rm8_r8(); 1009 void i486_xadd_rm16_r16(); 1010 void i486_xadd_rm32_r32(); 1011 void i486_group0F01_16(); 1012 void i486_group0F01_32(); 1013 void i486_bswap_eax(); 1014 void i486_bswap_ecx(); 1015 void i486_bswap_edx(); 1016 void i486_bswap_ebx(); 1017 void i486_bswap_esp(); 1018 void i486_bswap_ebp(); 1019 void i486_bswap_esi(); 1020 void i486_bswap_edi(); 1021 void i486_mov_cr_r32(); 1022 inline void MMXPROLOG(); 1023 inline void READMMX(uint32_t ea,MMX_REG &r); 1024 inline void WRITEMMX(uint32_t ea,MMX_REG &r); 1025 inline void READXMM(uint32_t ea,XMM_REG &r); 1026 inline void WRITEXMM(uint32_t ea,XMM_REG &r); 1027 inline void READXMM_LO64(uint32_t ea,XMM_REG &r); 1028 inline void WRITEXMM_LO64(uint32_t ea,XMM_REG &r); 1029 inline void READXMM_HI64(uint32_t ea,XMM_REG &r); 1030 inline void WRITEXMM_HI64(uint32_t ea,XMM_REG &r); 1031 void pentium_rdmsr(); 1032 void pentium_wrmsr(); 1033 void pentium_rdtsc(); 1034 void pentium_ud2(); 1035 void pentium_rsm(); 1036 void pentium_prefetch_m8(); 1037 void pentium_cmovo_r16_rm16(); 1038 void pentium_cmovo_r32_rm32(); 1039 void pentium_cmovno_r16_rm16(); 1040 void pentium_cmovno_r32_rm32(); 1041 void pentium_cmovb_r16_rm16(); 1042 void pentium_cmovb_r32_rm32(); 1043 void pentium_cmovae_r16_rm16(); 1044 void pentium_cmovae_r32_rm32(); 1045 void pentium_cmove_r16_rm16(); 1046 void pentium_cmove_r32_rm32(); 1047 void pentium_cmovne_r16_rm16(); 1048 void pentium_cmovne_r32_rm32(); 1049 void pentium_cmovbe_r16_rm16(); 1050 void pentium_cmovbe_r32_rm32(); 1051 void pentium_cmova_r16_rm16(); 1052 void pentium_cmova_r32_rm32(); 1053 void pentium_cmovs_r16_rm16(); 1054 void pentium_cmovs_r32_rm32(); 1055 void pentium_cmovns_r16_rm16(); 1056 void pentium_cmovns_r32_rm32(); 1057 void pentium_cmovp_r16_rm16(); 1058 void pentium_cmovp_r32_rm32(); 1059 void pentium_cmovnp_r16_rm16(); 1060 void pentium_cmovnp_r32_rm32(); 1061 void pentium_cmovl_r16_rm16(); 1062 void pentium_cmovl_r32_rm32(); 1063 void pentium_cmovge_r16_rm16(); 1064 void pentium_cmovge_r32_rm32(); 1065 void pentium_cmovle_r16_rm16(); 1066 void pentium_cmovle_r32_rm32(); 1067 void pentium_cmovg_r16_rm16(); 1068 void pentium_cmovg_r32_rm32(); 1069 void pentium_movnti_m16_r16(); 1070 void pentium_movnti_m32_r32(); 1071 void i386_cyrix_special(); 1072 void i386_cyrix_unknown(); 1073 void pentium_cmpxchg8b_m64(); 1074 void pentium_movntq_m64_r64(); 1075 void pentium_maskmovq_r64_r64(); 1076 void pentium_popcnt_r16_rm16(); 1077 void pentium_popcnt_r32_rm32(); 1078 void pentium_tzcnt_r16_rm16(); 1079 void pentium_tzcnt_r32_rm32(); 1080 void mmx_group_0f71(); 1081 void mmx_group_0f72(); 1082 void mmx_group_0f73(); 1083 void mmx_psrlw_r64_rm64(); 1084 void mmx_psrld_r64_rm64(); 1085 void mmx_psrlq_r64_rm64(); 1086 void mmx_paddq_r64_rm64(); 1087 void mmx_pmullw_r64_rm64(); 1088 void mmx_psubusb_r64_rm64(); 1089 void mmx_psubusw_r64_rm64(); 1090 void mmx_pand_r64_rm64(); 1091 void mmx_paddusb_r64_rm64(); 1092 void mmx_paddusw_r64_rm64(); 1093 void mmx_pandn_r64_rm64(); 1094 void mmx_psraw_r64_rm64(); 1095 void mmx_psrad_r64_rm64(); 1096 void mmx_pmulhw_r64_rm64(); 1097 void mmx_psubsb_r64_rm64(); 1098 void mmx_psubsw_r64_rm64(); 1099 void mmx_por_r64_rm64(); 1100 void mmx_paddsb_r64_rm64(); 1101 void mmx_paddsw_r64_rm64(); 1102 void mmx_pxor_r64_rm64(); 1103 void mmx_psllw_r64_rm64(); 1104 void mmx_pslld_r64_rm64(); 1105 void mmx_psllq_r64_rm64(); 1106 void mmx_pmaddwd_r64_rm64(); 1107 void mmx_psubb_r64_rm64(); 1108 void mmx_psubw_r64_rm64(); 1109 void mmx_psubd_r64_rm64(); 1110 void mmx_paddb_r64_rm64(); 1111 void mmx_paddw_r64_rm64(); 1112 void mmx_paddd_r64_rm64(); 1113 void mmx_emms(); 1114 void i386_cyrix_svdc(); 1115 void i386_cyrix_rsdc(); 1116 void i386_cyrix_svldt(); 1117 void i386_cyrix_rsldt(); 1118 void i386_cyrix_svts(); 1119 void i386_cyrix_rsts(); 1120 void mmx_movd_r64_rm32(); 1121 void mmx_movq_r64_rm64(); 1122 void mmx_movd_rm32_r64(); 1123 void mmx_movq_rm64_r64(); 1124 void mmx_pcmpeqb_r64_rm64(); 1125 void mmx_pcmpeqw_r64_rm64(); 1126 void mmx_pcmpeqd_r64_rm64(); 1127 void mmx_pshufw_r64_rm64_i8(); 1128 void mmx_punpcklbw_r64_r64m32(); 1129 void mmx_punpcklwd_r64_r64m32(); 1130 void mmx_punpckldq_r64_r64m32(); 1131 void mmx_packsswb_r64_rm64(); 1132 void mmx_pcmpgtb_r64_rm64(); 1133 void mmx_pcmpgtw_r64_rm64(); 1134 void mmx_pcmpgtd_r64_rm64(); 1135 void mmx_packuswb_r64_rm64(); 1136 void mmx_punpckhbw_r64_rm64(); 1137 void mmx_punpckhwd_r64_rm64(); 1138 void mmx_punpckhdq_r64_rm64(); 1139 void mmx_packssdw_r64_rm64(); 1140 void sse_group_0fae(); 1141 void sse_group_660f71(); 1142 void sse_group_660f72(); 1143 void sse_group_660f73(); 1144 void sse_cvttps2dq_r128_rm128(); 1145 void sse_cvtss2sd_r128_r128m32(); 1146 void sse_cvttss2si_r32_r128m32(); 1147 void sse_cvtss2si_r32_r128m32(); 1148 void sse_cvtsi2ss_r128_rm32(); 1149 void sse_cvtpi2ps_r128_rm64(); 1150 void sse_cvttps2pi_r64_r128m64(); 1151 void sse_cvtps2pi_r64_r128m64(); 1152 void sse_cvtps2pd_r128_r128m64(); 1153 void sse_cvtdq2ps_r128_rm128(); 1154 void sse_cvtdq2pd_r128_r128m64(); 1155 void sse_movss_r128_rm128(); 1156 void sse_movss_rm128_r128(); 1157 void sse_movsldup_r128_rm128(); 1158 void sse_movshdup_r128_rm128(); 1159 void sse_movaps_r128_rm128(); 1160 void sse_movaps_rm128_r128(); 1161 void sse_movups_r128_rm128(); 1162 void sse_movups_rm128_r128(); 1163 void sse_movlps_r128_m64(); 1164 void sse_movlps_m64_r128(); 1165 void sse_movhps_r128_m64(); 1166 void sse_movhps_m64_r128(); 1167 void sse_movntps_m128_r128(); 1168 void sse_movmskps_r16_r128(); 1169 void sse_movmskps_r32_r128(); 1170 void sse_movq2dq_r128_r64(); 1171 void sse_movdqu_r128_rm128(); 1172 void sse_movdqu_rm128_r128(); 1173 void sse_movd_m128_rm32(); 1174 void sse_movdqa_m128_rm128(); 1175 void sse_movq_r128_r128m64(); 1176 void sse_movd_rm32_r128(); 1177 void sse_movdqa_rm128_r128(); 1178 void sse_pmovmskb_r16_r64(); 1179 void sse_pmovmskb_r32_r64(); 1180 void sse_xorps(); 1181 void sse_addps(); 1182 void sse_sqrtps_r128_rm128(); 1183 void sse_rsqrtps_r128_rm128(); 1184 void sse_rcpps_r128_rm128(); 1185 void sse_andps_r128_rm128(); 1186 void sse_andnps_r128_rm128(); 1187 void sse_orps_r128_rm128(); 1188 void sse_mulps(); 1189 void sse_subps(); 1190 void sse_minps(); 1191 void sse_divps(); 1192 void sse_maxps(); 1193 void sse_maxss_r128_r128m32(); 1194 void sse_addss(); 1195 void sse_subss(); 1196 void sse_mulss(); 1197 void sse_divss(); 1198 void sse_rcpss_r128_r128m32(); 1199 void sse_sqrtss_r128_r128m32(); 1200 void sse_rsqrtss_r128_r128m32(); 1201 void sse_minss_r128_r128m32(); 1202 void sse_comiss_r128_r128m32(); 1203 void sse_ucomiss_r128_r128m32(); 1204 void sse_shufps(); 1205 void sse_punpcklbw_r128_rm128(); 1206 void sse_punpcklwd_r128_rm128(); 1207 void sse_punpckldq_r128_rm128(); 1208 void sse_punpcklqdq_r128_rm128(); 1209 void sse_unpcklps_r128_rm128(); 1210 void sse_unpckhps_r128_rm128(); 1211 void sse_cmpps_r128_rm128_i8(); 1212 void sse_cmpss_r128_r128m32_i8(); 1213 void sse_pinsrw_r64_r16m16_i8(); 1214 void sse_pinsrw_r64_r32m16_i8(); 1215 void sse_pinsrw_r128_r32m16_i8(); 1216 void sse_pextrw_r16_r64_i8(); 1217 void sse_pextrw_r32_r64_i8(); 1218 void sse_pextrw_reg_r128_i8(); 1219 void sse_pminub_r64_rm64(); 1220 void sse_pmaxub_r64_rm64(); 1221 void sse_pavgb_r64_rm64(); 1222 void sse_pavgw_r64_rm64(); 1223 void sse_pmulhuw_r64_rm64(); 1224 void sse_pminsw_r64_rm64(); 1225 void sse_pmaxsw_r64_rm64(); 1226 void sse_pmuludq_r64_rm64(); 1227 void sse_psadbw_r64_rm64(); 1228 void sse_psubq_r64_rm64(); 1229 void sse_pshufhw_r128_rm128_i8(); 1230 void sse_packsswb_r128_rm128(); 1231 void sse_packssdw_r128_rm128(); 1232 void sse_pcmpgtb_r128_rm128(); 1233 void sse_pcmpgtw_r128_rm128(); 1234 void sse_pcmpgtd_r128_rm128(); 1235 void sse_packuswb_r128_rm128(); 1236 void sse_punpckhbw_r128_rm128(); 1237 void sse_punpckhwd_r128_rm128(); 1238 void sse_unpckhdq_r128_rm128(); 1239 void sse_punpckhqdq_r128_rm128(); 1240 void sse_pcmpeqb_r128_rm128(); 1241 void sse_pcmpeqw_r128_rm128(); 1242 void sse_pcmpeqd_r128_rm128(); 1243 void sse_paddq_r128_rm128(); 1244 void sse_pmullw_r128_rm128(); 1245 void sse_pmuludq_r128_rm128(); 1246 void sse_psubq_r128_rm128(); 1247 void sse_paddb_r128_rm128(); 1248 void sse_paddw_r128_rm128(); 1249 void sse_paddd_r128_rm128(); 1250 void sse_psubusb_r128_rm128(); 1251 void sse_psubusw_r128_rm128(); 1252 void sse_pminub_r128_rm128(); 1253 void sse_pand_r128_rm128(); 1254 void sse_pandn_r128_rm128(); 1255 void sse_paddusb_r128_rm128(); 1256 void sse_paddusw_r128_rm128(); 1257 void sse_pmaxub_r128_rm128(); 1258 void sse_pmulhuw_r128_rm128(); 1259 void sse_pmulhw_r128_rm128(); 1260 void sse_psubsw_r128_rm128(); 1261 void sse_psubsb_r128_rm128(); 1262 void sse_pminsw_r128_rm128(); 1263 void sse_pmaxsw_r128_rm128(); 1264 void sse_paddsb_r128_rm128(); 1265 void sse_paddsw_r128_rm128(); 1266 void sse_por_r128_rm128(); 1267 void sse_pxor_r128_rm128(); 1268 void sse_pmaddwd_r128_rm128(); 1269 void sse_psubb_r128_rm128(); 1270 void sse_psubw_r128_rm128(); 1271 void sse_psubd_r128_rm128(); 1272 void sse_psadbw_r128_rm128(); 1273 void sse_pavgb_r128_rm128(); 1274 void sse_pavgw_r128_rm128(); 1275 void sse_pmovmskb_r32_r128(); 1276 void sse_maskmovdqu_r128_r128(); 1277 void sse_andpd_r128_rm128(); 1278 void sse_andnpd_r128_rm128(); 1279 void sse_orpd_r128_rm128(); 1280 void sse_xorpd_r128_rm128(); 1281 void sse_unpcklpd_r128_rm128(); 1282 void sse_unpckhpd_r128_rm128(); 1283 void sse_shufpd_r128_rm128_i8(); 1284 void sse_pshufd_r128_rm128_i8(); 1285 void sse_pshuflw_r128_rm128_i8(); 1286 void sse_movmskpd_r32_r128(); 1287 void sse_ucomisd_r128_r128m64(); 1288 void sse_comisd_r128_r128m64(); 1289 void sse_psrlw_r128_rm128(); 1290 void sse_psrld_r128_rm128(); 1291 void sse_psrlq_r128_rm128(); 1292 void sse_psllw_r128_rm128(); 1293 void sse_pslld_r128_rm128(); 1294 void sse_psllq_r128_rm128(); 1295 void sse_psraw_r128_rm128(); 1296 void sse_psrad_r128_rm128(); 1297 void sse_movntdq_m128_r128(); 1298 void sse_cvttpd2dq_r128_rm128(); 1299 void sse_movq_r128m64_r128(); 1300 void sse_addsubpd_r128_rm128(); 1301 void sse_cmppd_r128_rm128_i8(); 1302 void sse_haddpd_r128_rm128(); 1303 void sse_hsubpd_r128_rm128(); 1304 void sse_sqrtpd_r128_rm128(); 1305 void sse_cvtpi2pd_r128_rm64(); 1306 void sse_cvttpd2pi_r64_rm128(); 1307 void sse_cvtpd2pi_r64_rm128(); 1308 void sse_cvtpd2ps_r128_rm128(); 1309 void sse_cvtps2dq_r128_rm128(); 1310 void sse_addpd_r128_rm128(); 1311 void sse_mulpd_r128_rm128(); 1312 void sse_subpd_r128_rm128(); 1313 void sse_minpd_r128_rm128(); 1314 void sse_divpd_r128_rm128(); 1315 void sse_maxpd_r128_rm128(); 1316 void sse_movntpd_m128_r128(); 1317 void sse_movapd_r128_rm128(); 1318 void sse_movapd_rm128_r128(); 1319 void sse_movhpd_r128_m64(); 1320 void sse_movhpd_m64_r128(); 1321 void sse_movupd_r128_rm128(); 1322 void sse_movupd_rm128_r128(); 1323 void sse_movlpd_r128_m64(); 1324 void sse_movlpd_m64_r128(); 1325 void sse_movsd_r128_r128m64(); 1326 void sse_movsd_r128m64_r128(); 1327 void sse_movddup_r128_r128m64(); 1328 void sse_cvtsi2sd_r128_rm32(); 1329 void sse_cvttsd2si_r32_r128m64(); 1330 void sse_cvtsd2si_r32_r128m64(); 1331 void sse_sqrtsd_r128_r128m64(); 1332 void sse_addsd_r128_r128m64(); 1333 void sse_mulsd_r128_r128m64(); 1334 void sse_cvtsd2ss_r128_r128m64(); 1335 void sse_subsd_r128_r128m64(); 1336 void sse_minsd_r128_r128m64(); 1337 void sse_divsd_r128_r128m64(); 1338 void sse_maxsd_r128_r128m64(); 1339 void sse_haddps_r128_rm128(); 1340 void sse_hsubps_r128_rm128(); 1341 void sse_cmpsd_r128_r128m64_i8(); 1342 void sse_addsubps_r128_rm128(); 1343 void sse_movdq2q_r64_r128(); 1344 void sse_cvtpd2dq_r128_rm128(); 1345 void sse_lddqu_r128_m128(); 1346 inline void sse_predicate_compare_single(uint8_t imm8, XMM_REG d, XMM_REG s); 1347 inline void sse_predicate_compare_double(uint8_t imm8, XMM_REG d, XMM_REG s); 1348 inline void sse_predicate_compare_single_scalar(uint8_t imm8, XMM_REG d, XMM_REG s); 1349 inline void sse_predicate_compare_double_scalar(uint8_t imm8, XMM_REG d, XMM_REG s); 1350 inline floatx80 READ80(uint32_t ea); 1351 inline void WRITE80(uint32_t ea, floatx80 t); 1352 inline void x87_set_stack_top(int top); 1353 inline void x87_set_tag(int reg, int tag); 1354 void x87_write_stack(int i, floatx80 value, bool update_tag); 1355 inline void x87_set_stack_underflow(); 1356 inline void x87_set_stack_overflow(); 1357 int x87_inc_stack(); 1358 int x87_dec_stack(); 1359 int x87_check_exceptions(bool store = false); 1360 int x87_mf_fault(); 1361 inline void x87_write_cw(uint16_t cw); 1362 void x87_reset(); 1363 floatx80 x87_add(floatx80 a, floatx80 b); 1364 floatx80 x87_sub(floatx80 a, floatx80 b); 1365 floatx80 x87_mul(floatx80 a, floatx80 b); 1366 floatx80 x87_div(floatx80 a, floatx80 b); 1367 void x87_fadd_m32real(uint8_t modrm); 1368 void x87_fadd_m64real(uint8_t modrm); 1369 void x87_fadd_st_sti(uint8_t modrm); 1370 void x87_fadd_sti_st(uint8_t modrm); 1371 void x87_faddp(uint8_t modrm); 1372 void x87_fiadd_m32int(uint8_t modrm); 1373 void x87_fiadd_m16int(uint8_t modrm); 1374 void x87_fsub_m32real(uint8_t modrm); 1375 void x87_fsub_m64real(uint8_t modrm); 1376 void x87_fsub_st_sti(uint8_t modrm); 1377 void x87_fsub_sti_st(uint8_t modrm); 1378 void x87_fsubp(uint8_t modrm); 1379 void x87_fisub_m32int(uint8_t modrm); 1380 void x87_fisub_m16int(uint8_t modrm); 1381 void x87_fsubr_m32real(uint8_t modrm); 1382 void x87_fsubr_m64real(uint8_t modrm); 1383 void x87_fsubr_st_sti(uint8_t modrm); 1384 void x87_fsubr_sti_st(uint8_t modrm); 1385 void x87_fsubrp(uint8_t modrm); 1386 void x87_fisubr_m32int(uint8_t modrm); 1387 void x87_fisubr_m16int(uint8_t modrm); 1388 void x87_fdiv_m32real(uint8_t modrm); 1389 void x87_fdiv_m64real(uint8_t modrm); 1390 void x87_fdiv_st_sti(uint8_t modrm); 1391 void x87_fdiv_sti_st(uint8_t modrm); 1392 void x87_fdivp(uint8_t modrm); 1393 void x87_fidiv_m32int(uint8_t modrm); 1394 void x87_fidiv_m16int(uint8_t modrm); 1395 void x87_fdivr_m32real(uint8_t modrm); 1396 void x87_fdivr_m64real(uint8_t modrm); 1397 void x87_fdivr_st_sti(uint8_t modrm); 1398 void x87_fdivr_sti_st(uint8_t modrm); 1399 void x87_fdivrp(uint8_t modrm); 1400 void x87_fidivr_m32int(uint8_t modrm); 1401 void x87_fidivr_m16int(uint8_t modrm); 1402 void x87_fmul_m32real(uint8_t modrm); 1403 void x87_fmul_m64real(uint8_t modrm); 1404 void x87_fmul_st_sti(uint8_t modrm); 1405 void x87_fmul_sti_st(uint8_t modrm); 1406 void x87_fmulp(uint8_t modrm); 1407 void x87_fimul_m32int(uint8_t modrm); 1408 void x87_fimul_m16int(uint8_t modrm); 1409 void x87_fprem(uint8_t modrm); 1410 void x87_fprem1(uint8_t modrm); 1411 void x87_fsqrt(uint8_t modrm); 1412 void x87_f2xm1(uint8_t modrm); 1413 void x87_fyl2x(uint8_t modrm); 1414 void x87_fyl2xp1(uint8_t modrm); 1415 void x87_fptan(uint8_t modrm); 1416 void x87_fpatan(uint8_t modrm); 1417 void x87_fsin(uint8_t modrm); 1418 void x87_fcos(uint8_t modrm); 1419 void x87_fsincos(uint8_t modrm); 1420 void x87_fld_m32real(uint8_t modrm); 1421 void x87_fld_m64real(uint8_t modrm); 1422 void x87_fld_m80real(uint8_t modrm); 1423 void x87_fld_sti(uint8_t modrm); 1424 void x87_fild_m16int(uint8_t modrm); 1425 void x87_fild_m32int(uint8_t modrm); 1426 void x87_fild_m64int(uint8_t modrm); 1427 void x87_fbld(uint8_t modrm); 1428 void x87_fst_m32real(uint8_t modrm); 1429 void x87_fst_m64real(uint8_t modrm); 1430 void x87_fst_sti(uint8_t modrm); 1431 void x87_fstp_m32real(uint8_t modrm); 1432 void x87_fstp_m64real(uint8_t modrm); 1433 void x87_fstp_m80real(uint8_t modrm); 1434 void x87_fstp_sti(uint8_t modrm); 1435 void x87_fist_m16int(uint8_t modrm); 1436 void x87_fist_m32int(uint8_t modrm); 1437 void x87_fistp_m16int(uint8_t modrm); 1438 void x87_fistp_m32int(uint8_t modrm); 1439 void x87_fistp_m64int(uint8_t modrm); 1440 void x87_fbstp(uint8_t modrm); 1441 void x87_fld1(uint8_t modrm); 1442 void x87_fldl2t(uint8_t modrm); 1443 void x87_fldl2e(uint8_t modrm); 1444 void x87_fldpi(uint8_t modrm); 1445 void x87_fldlg2(uint8_t modrm); 1446 void x87_fldln2(uint8_t modrm); 1447 void x87_fldz(uint8_t modrm); 1448 void x87_fnop(uint8_t modrm); 1449 void x87_fchs(uint8_t modrm); 1450 void x87_fabs(uint8_t modrm); 1451 void x87_fscale(uint8_t modrm); 1452 void x87_frndint(uint8_t modrm); 1453 void x87_fxtract(uint8_t modrm); 1454 void x87_ftst(uint8_t modrm); 1455 void x87_fxam(uint8_t modrm); 1456 void x87_fcmovb_sti(uint8_t modrm); 1457 void x87_fcmove_sti(uint8_t modrm); 1458 void x87_fcmovbe_sti(uint8_t modrm); 1459 void x87_fcmovu_sti(uint8_t modrm); 1460 void x87_fcmovnb_sti(uint8_t modrm); 1461 void x87_fcmovne_sti(uint8_t modrm); 1462 void x87_fcmovnbe_sti(uint8_t modrm); 1463 void x87_fcmovnu_sti(uint8_t modrm); 1464 void x87_ficom_m16int(uint8_t modrm); 1465 void x87_ficom_m32int(uint8_t modrm); 1466 void x87_ficomp_m16int(uint8_t modrm); 1467 void x87_ficomp_m32int(uint8_t modrm); 1468 void x87_fcom_m32real(uint8_t modrm); 1469 void x87_fcom_m64real(uint8_t modrm); 1470 void x87_fcom_sti(uint8_t modrm); 1471 void x87_fcomp_m32real(uint8_t modrm); 1472 void x87_fcomp_m64real(uint8_t modrm); 1473 void x87_fcomp_sti(uint8_t modrm); 1474 void x87_fcomi_sti(uint8_t modrm); 1475 void x87_fcomip_sti(uint8_t modrm); 1476 void x87_fucomi_sti(uint8_t modrm); 1477 void x87_fucomip_sti(uint8_t modrm); 1478 void x87_fcompp(uint8_t modrm); 1479 void x87_fucom_sti(uint8_t modrm); 1480 void x87_fucomp_sti(uint8_t modrm); 1481 void x87_fucompp(uint8_t modrm); 1482 void x87_fdecstp(uint8_t modrm); 1483 void x87_fincstp(uint8_t modrm); 1484 void x87_fclex(uint8_t modrm); 1485 void x87_ffree(uint8_t modrm); 1486 void x87_finit(uint8_t modrm); 1487 void x87_fldcw(uint8_t modrm); 1488 void x87_fstcw(uint8_t modrm); 1489 void x87_fldenv(uint8_t modrm); 1490 void x87_fstenv(uint8_t modrm); 1491 void x87_fsave(uint8_t modrm); 1492 void x87_frstor(uint8_t modrm); 1493 void x87_fxch(uint8_t modrm); 1494 void x87_fxch_sti(uint8_t modrm); 1495 void x87_fstsw_ax(uint8_t modrm); 1496 void x87_fstsw_m2byte(uint8_t modrm); 1497 void x87_invalid(uint8_t modrm); 1498 void i386_x87_group_d8(); 1499 void i386_x87_group_d9(); 1500 void i386_x87_group_da(); 1501 void i386_x87_group_db(); 1502 void i386_x87_group_dc(); 1503 void i386_x87_group_dd(); 1504 void i386_x87_group_de(); 1505 void i386_x87_group_df(); 1506 void build_x87_opcode_table_d8(); 1507 void build_x87_opcode_table_d9(); 1508 void build_x87_opcode_table_da(); 1509 void build_x87_opcode_table_db(); 1510 void build_x87_opcode_table_dc(); 1511 void build_x87_opcode_table_dd(); 1512 void build_x87_opcode_table_de(); 1513 void build_x87_opcode_table_df(); 1514 void build_x87_opcode_table(); 1515 void i386_postload(); 1516 void i386_common_init(); 1517 void build_opcode_table(uint32_t features); 1518 void zero_state(); 1519 void i386_set_a20_line(int state); 1520 1521 }; 1522 1523 1524 class i386sx_device : public i386_device 1525 { 1526 public: 1527 // construction/destruction 1528 i386sx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1529 1530 protected: mem_pr8(offs_t address)1531 virtual u8 mem_pr8(offs_t address) override { return macache16.read_byte(address); }; mem_pr16(offs_t address)1532 virtual u16 mem_pr16(offs_t address) override { return macache16.read_word(address); }; mem_pr32(offs_t address)1533 virtual u32 mem_pr32(offs_t address) override { return macache16.read_dword(address); }; 1534 1535 virtual uint16_t READ16PL(uint32_t ea, uint8_t privilege) override; 1536 virtual uint32_t READ32PL(uint32_t ea, uint8_t privilege) override; 1537 virtual uint64_t READ64PL(uint32_t ea, uint8_t privilege) override; 1538 virtual void WRITE16PL(uint32_t ea, uint8_t privilege, uint16_t value) override; 1539 virtual void WRITE32PL(uint32_t ea, uint8_t privilege, uint32_t value) override; 1540 virtual void WRITE64PL(uint32_t ea, uint8_t privilege, uint64_t value) override; 1541 virtual uint16_t READPORT16(offs_t port) override; 1542 virtual void WRITEPORT16(offs_t port, uint16_t value) override; 1543 virtual uint32_t READPORT32(offs_t port) override; 1544 virtual void WRITEPORT32(offs_t port, uint32_t value) override; 1545 }; 1546 1547 class i486_device : public i386_device 1548 { 1549 public: 1550 // construction/destruction 1551 i486_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1552 1553 protected: 1554 i486_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 1555 1556 virtual void device_start() override; 1557 virtual void device_reset() override; 1558 }; 1559 1560 class i486dx4_device : public i486_device 1561 { 1562 public: 1563 // construction/destruction 1564 i486dx4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1565 1566 protected: 1567 virtual void device_reset() override; 1568 }; 1569 1570 1571 class pentium_device : public i386_device 1572 { 1573 public: 1574 // construction/destruction 1575 pentium_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1576 1577 protected: 1578 pentium_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 1579 execute_input_edge_triggered(int inputnum)1580 virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return inputnum == INPUT_LINE_NMI || inputnum == INPUT_LINE_SMI; } 1581 virtual void execute_set_input(int inputnum, int state) override; 1582 virtual uint64_t opcode_rdmsr(bool &valid_msr) override; 1583 virtual void opcode_wrmsr(uint64_t data, bool &valid_msr) override; 1584 virtual void device_start() override; 1585 virtual void device_reset() override; 1586 }; 1587 1588 1589 class pentium_mmx_device : public pentium_device 1590 { 1591 public: 1592 // construction/destruction 1593 pentium_mmx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1594 1595 protected: 1596 virtual void device_start() override; 1597 virtual void device_reset() override; 1598 }; 1599 1600 1601 class mediagx_device : public i386_device 1602 { 1603 public: 1604 // construction/destruction 1605 mediagx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1606 1607 protected: 1608 virtual void device_start() override; 1609 virtual void device_reset() override; 1610 }; 1611 1612 1613 class pentium_pro_device : public pentium_device 1614 { 1615 public: 1616 // construction/destruction 1617 pentium_pro_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1618 1619 protected: 1620 pentium_pro_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 1621 1622 virtual uint64_t opcode_rdmsr(bool &valid_msr) override; 1623 virtual void opcode_wrmsr(uint64_t data, bool &valid_msr) override; 1624 virtual void device_start() override; 1625 virtual void device_reset() override; 1626 }; 1627 1628 1629 class pentium2_device : public pentium_pro_device 1630 { 1631 public: 1632 // construction/destruction 1633 pentium2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1634 1635 protected: 1636 virtual void device_start() override; 1637 virtual void device_reset() override; 1638 }; 1639 1640 1641 class pentium3_device : public pentium_pro_device 1642 { 1643 public: 1644 // construction/destruction 1645 pentium3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1646 1647 protected: 1648 virtual void device_start() override; 1649 virtual void device_reset() override; 1650 }; 1651 1652 1653 class pentium4_device : public pentium_device 1654 { 1655 public: 1656 // construction/destruction 1657 pentium4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 1658 1659 protected: 1660 virtual uint64_t opcode_rdmsr(bool &valid_msr) override; 1661 virtual void opcode_wrmsr(uint64_t data, bool &valid_msr) override; 1662 virtual void device_start() override; 1663 virtual void device_reset() override; 1664 }; 1665 1666 1667 DECLARE_DEVICE_TYPE(I386, i386_device) 1668 DECLARE_DEVICE_TYPE(I386SX, i386sx_device) 1669 DECLARE_DEVICE_TYPE(I486, i486_device) 1670 DECLARE_DEVICE_TYPE(I486DX4, i486dx4_device) 1671 DECLARE_DEVICE_TYPE(PENTIUM, pentium_device) 1672 DECLARE_DEVICE_TYPE(PENTIUM_MMX, pentium_mmx_device) 1673 DECLARE_DEVICE_TYPE(MEDIAGX, mediagx_device) 1674 DECLARE_DEVICE_TYPE(PENTIUM_PRO, pentium_pro_device) 1675 DECLARE_DEVICE_TYPE(PENTIUM2, pentium2_device) 1676 DECLARE_DEVICE_TYPE(PENTIUM3, pentium3_device) 1677 DECLARE_DEVICE_TYPE(PENTIUM4, pentium4_device) 1678 1679 #endif // MAME_CPU_I386_I386_H 1680