⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.h

📁 qemu虚拟机代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * i386 virtual CPU header *  *  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 */#ifndef CPU_I386_H#define CPU_I386_H#include "config.h"#ifdef TARGET_X86_64#define TARGET_LONG_BITS 64#else#define TARGET_LONG_BITS 32#endif/* target supports implicit self modifying code */#define TARGET_HAS_SMC/* support for self modifying code even if the modified instruction is   close to the modifying instruction */#define TARGET_HAS_PRECISE_SMC#define TARGET_HAS_ICE 1#include "cpu-defs.h"#include "softfloat.h"#if defined(__i386__) && !defined(CONFIG_SOFTMMU)#define USE_CODE_COPY#endif#define R_EAX 0#define R_ECX 1#define R_EDX 2#define R_EBX 3#define R_ESP 4#define R_EBP 5#define R_ESI 6#define R_EDI 7#define R_AL 0#define R_CL 1#define R_DL 2#define R_BL 3#define R_AH 4#define R_CH 5#define R_DH 6#define R_BH 7#define R_ES 0#define R_CS 1#define R_SS 2#define R_DS 3#define R_FS 4#define R_GS 5/* segment descriptor fields */#define DESC_G_MASK     (1 << 23)#define DESC_B_SHIFT    22#define DESC_B_MASK     (1 << DESC_B_SHIFT)#define DESC_L_SHIFT    21 /* x86_64 only : 64 bit code segment */#define DESC_L_MASK     (1 << DESC_L_SHIFT)#define DESC_AVL_MASK   (1 << 20)#define DESC_P_MASK     (1 << 15)#define DESC_DPL_SHIFT  13#define DESC_S_MASK     (1 << 12)#define DESC_TYPE_SHIFT 8#define DESC_A_MASK     (1 << 8)#define DESC_CS_MASK    (1 << 11) /* 1=code segment 0=data segment */#define DESC_C_MASK     (1 << 10) /* code: conforming */#define DESC_R_MASK     (1 << 9)  /* code: readable */#define DESC_E_MASK     (1 << 10) /* data: expansion direction */#define DESC_W_MASK     (1 << 9)  /* data: writable */#define DESC_TSS_BUSY_MASK (1 << 9)/* eflags masks */#define CC_C   	0x0001#define CC_P 	0x0004#define CC_A	0x0010#define CC_Z	0x0040#define CC_S    0x0080#define CC_O    0x0800#define TF_SHIFT   8#define IOPL_SHIFT 12#define VM_SHIFT   17#define TF_MASK 		0x00000100#define IF_MASK 		0x00000200#define DF_MASK 		0x00000400#define IOPL_MASK		0x00003000#define NT_MASK	         	0x00004000#define RF_MASK			0x00010000#define VM_MASK			0x00020000#define AC_MASK			0x00040000 #define VIF_MASK                0x00080000#define VIP_MASK                0x00100000#define ID_MASK                 0x00200000/* hidden flags - used internally by qemu to represent additionnal cpu   states. Only the CPL, INHIBIT_IRQ and HALTED are not redundant. We avoid   using the IOPL_MASK, TF_MASK and VM_MASK bit position to ease oring   with eflags. *//* current cpl */#define HF_CPL_SHIFT         0/* true if soft mmu is being used */#define HF_SOFTMMU_SHIFT     2/* true if hardware interrupts must be disabled for next instruction */#define HF_INHIBIT_IRQ_SHIFT 3/* 16 or 32 segments */#define HF_CS32_SHIFT        4#define HF_SS32_SHIFT        5/* zero base for DS, ES and SS : can be '0' only in 32 bit CS segment */#define HF_ADDSEG_SHIFT      6/* copy of CR0.PE (protected mode) */#define HF_PE_SHIFT          7#define HF_TF_SHIFT          8 /* must be same as eflags */#define HF_MP_SHIFT          9 /* the order must be MP, EM, TS */#define HF_EM_SHIFT         10#define HF_TS_SHIFT         11#define HF_IOPL_SHIFT       12 /* must be same as eflags */#define HF_LMA_SHIFT        14 /* only used on x86_64: long mode active */#define HF_CS64_SHIFT       15 /* only used on x86_64: 64 bit code segment  */#define HF_OSFXSR_SHIFT     16 /* CR4.OSFXSR */#define HF_VM_SHIFT         17 /* must be same as eflags */#define HF_HALTED_SHIFT     18 /* CPU halted */#define HF_CPL_MASK          (3 << HF_CPL_SHIFT)#define HF_SOFTMMU_MASK      (1 << HF_SOFTMMU_SHIFT)#define HF_INHIBIT_IRQ_MASK  (1 << HF_INHIBIT_IRQ_SHIFT)#define HF_CS32_MASK         (1 << HF_CS32_SHIFT)#define HF_SS32_MASK         (1 << HF_SS32_SHIFT)#define HF_ADDSEG_MASK       (1 << HF_ADDSEG_SHIFT)#define HF_PE_MASK           (1 << HF_PE_SHIFT)#define HF_TF_MASK           (1 << HF_TF_SHIFT)#define HF_MP_MASK           (1 << HF_MP_SHIFT)#define HF_EM_MASK           (1 << HF_EM_SHIFT)#define HF_TS_MASK           (1 << HF_TS_SHIFT)#define HF_LMA_MASK          (1 << HF_LMA_SHIFT)#define HF_CS64_MASK         (1 << HF_CS64_SHIFT)#define HF_OSFXSR_MASK       (1 << HF_OSFXSR_SHIFT)#define HF_HALTED_MASK       (1 << HF_HALTED_SHIFT)#define CR0_PE_MASK  (1 << 0)#define CR0_MP_MASK  (1 << 1)#define CR0_EM_MASK  (1 << 2)#define CR0_TS_MASK  (1 << 3)#define CR0_ET_MASK  (1 << 4)#define CR0_NE_MASK  (1 << 5)#define CR0_WP_MASK  (1 << 16)#define CR0_AM_MASK  (1 << 18)#define CR0_PG_MASK  (1 << 31)#define CR4_VME_MASK  (1 << 0)#define CR4_PVI_MASK  (1 << 1)#define CR4_TSD_MASK  (1 << 2)#define CR4_DE_MASK   (1 << 3)#define CR4_PSE_MASK  (1 << 4)#define CR4_PAE_MASK  (1 << 5)#define CR4_PGE_MASK  (1 << 7)#define CR4_PCE_MASK  (1 << 8)#define CR4_OSFXSR_MASK (1 << 9)#define CR4_OSXMMEXCPT_MASK  (1 << 10)#define PG_PRESENT_BIT	0#define PG_RW_BIT	1#define PG_USER_BIT	2#define PG_PWT_BIT	3#define PG_PCD_BIT	4#define PG_ACCESSED_BIT	5#define PG_DIRTY_BIT	6#define PG_PSE_BIT	7#define PG_GLOBAL_BIT	8#define PG_NX_BIT	63#define PG_PRESENT_MASK  (1 << PG_PRESENT_BIT)#define PG_RW_MASK	 (1 << PG_RW_BIT)#define PG_USER_MASK	 (1 << PG_USER_BIT)#define PG_PWT_MASK	 (1 << PG_PWT_BIT)#define PG_PCD_MASK	 (1 << PG_PCD_BIT)#define PG_ACCESSED_MASK (1 << PG_ACCESSED_BIT)#define PG_DIRTY_MASK	 (1 << PG_DIRTY_BIT)#define PG_PSE_MASK	 (1 << PG_PSE_BIT)#define PG_GLOBAL_MASK	 (1 << PG_GLOBAL_BIT)#define PG_NX_MASK	 (1LL << PG_NX_BIT)#define PG_ERROR_W_BIT     1#define PG_ERROR_P_MASK    0x01#define PG_ERROR_W_MASK    (1 << PG_ERROR_W_BIT)#define PG_ERROR_U_MASK    0x04#define PG_ERROR_RSVD_MASK 0x08#define PG_ERROR_I_D_MASK  0x10#define MSR_IA32_APICBASE               0x1b#define MSR_IA32_APICBASE_BSP           (1<<8)#define MSR_IA32_APICBASE_ENABLE        (1<<11)#define MSR_IA32_APICBASE_BASE          (0xfffff<<12)#define MSR_IA32_SYSENTER_CS            0x174#define MSR_IA32_SYSENTER_ESP           0x175#define MSR_IA32_SYSENTER_EIP           0x176#define MSR_MCG_CAP                     0x179#define MSR_MCG_STATUS                  0x17a#define MSR_MCG_CTL                     0x17b#define MSR_PAT                         0x277#define MSR_EFER                        0xc0000080#define MSR_EFER_SCE   (1 << 0)#define MSR_EFER_LME   (1 << 8)#define MSR_EFER_LMA   (1 << 10)#define MSR_EFER_NXE   (1 << 11)#define MSR_EFER_FFXSR (1 << 14)#define MSR_STAR                        0xc0000081#define MSR_LSTAR                       0xc0000082#define MSR_CSTAR                       0xc0000083#define MSR_FMASK                       0xc0000084#define MSR_FSBASE                      0xc0000100#define MSR_GSBASE                      0xc0000101#define MSR_KERNELGSBASE                0xc0000102/* cpuid_features bits */#define CPUID_FP87 (1 << 0)#define CPUID_VME  (1 << 1)#define CPUID_DE   (1 << 2)#define CPUID_PSE  (1 << 3)#define CPUID_TSC  (1 << 4)#define CPUID_MSR  (1 << 5)#define CPUID_PAE  (1 << 6)#define CPUID_MCE  (1 << 7)#define CPUID_CX8  (1 << 8)#define CPUID_APIC (1 << 9)#define CPUID_SEP  (1 << 11) /* sysenter/sysexit */#define CPUID_MTRR (1 << 12)#define CPUID_PGE  (1 << 13)#define CPUID_MCA  (1 << 14)#define CPUID_CMOV (1 << 15)#define CPUID_PAT  (1 << 16)#define CPUID_CLFLUSH (1 << 19)/* ... */#define CPUID_MMX  (1 << 23)#define CPUID_FXSR (1 << 24)#define CPUID_SSE  (1 << 25)#define CPUID_SSE2 (1 << 26)#define CPUID_EXT_SSE3     (1 << 0)#define CPUID_EXT_MONITOR  (1 << 3)#define CPUID_EXT_CX16     (1 << 13)#define CPUID_EXT2_SYSCALL (1 << 11)#define CPUID_EXT2_NX      (1 << 20)#define CPUID_EXT2_FFXSR   (1 << 25)#define CPUID_EXT2_LM      (1 << 29)#define EXCP00_DIVZ	0#define EXCP01_SSTP	1#define EXCP02_NMI	2#define EXCP03_INT3	3#define EXCP04_INTO	4#define EXCP05_BOUND	5#define EXCP06_ILLOP	6#define EXCP07_PREX	7#define EXCP08_DBLE	8#define EXCP09_XERR	9#define EXCP0A_TSS	10#define EXCP0B_NOSEG	11#define EXCP0C_STACK	12#define EXCP0D_GPF	13#define EXCP0E_PAGE	14#define EXCP10_COPR	16#define EXCP11_ALGN	17#define EXCP12_MCHK	18enum {    CC_OP_DYNAMIC, /* must use dynamic code to get cc_op */    CC_OP_EFLAGS,  /* all cc are explicitely computed, CC_SRC = flags */    CC_OP_MULB, /* modify all flags, C, O = (CC_SRC != 0) */    CC_OP_MULW,    CC_OP_MULL,    CC_OP_MULQ,    CC_OP_ADDB, /* modify all flags, CC_DST = res, CC_SRC = src1 */    CC_OP_ADDW,    CC_OP_ADDL,    CC_OP_ADDQ,    CC_OP_ADCB, /* modify all flags, CC_DST = res, CC_SRC = src1 */    CC_OP_ADCW,    CC_OP_ADCL,    CC_OP_ADCQ,    CC_OP_SUBB, /* modify all flags, CC_DST = res, CC_SRC = src1 */    CC_OP_SUBW,    CC_OP_SUBL,    CC_OP_SUBQ,    CC_OP_SBBB, /* modify all flags, CC_DST = res, CC_SRC = src1 */    CC_OP_SBBW,    CC_OP_SBBL,    CC_OP_SBBQ,    CC_OP_LOGICB, /* modify all flags, CC_DST = res */    CC_OP_LOGICW,    CC_OP_LOGICL,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -