Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B, Instruction Set Reference, N-Z

Vol. 2B 4-243
INSTRUCTION SET REFERENCE, N-Z
EAX IA32_FIXED_CTR(ECX)[30:0];
EDX IA32_FIXED_CTR(ECX)[39:32];
ELSE IF (ECX[30:0] in valid range)
EAX PMC(ECX[30:0])[31:0];
EDX PMC(ECX[30:0])[39:32];
ELSE (* ECX is not valid or CR4.PCE is 0 and CPL is 1, 2, or 3 and CR0.PE is 1 *)
#GP(0);
FI;
(* P6 family processors and Pentium processor with MMX technology *)
IF (ECX
= 0 or 1) and ((CR4.PCE = 1) or (CPL = 0) or (CR0.PE = 0))
THEN
EAX PMC(ECX)[31:0];
EDX PMC(ECX)[39:32];
ELSE (* ECX is not 0 or 1 or CR4.PCE is 0 and CPL is 1, 2, or 3 and CR0.PE is 1 *)
#GP(0);
FI;
(* Processors with CPUID family 15 *)
IF ((CR4.PCE
= 1) or (CPL = 0) or (CR0.PE = 0))
THEN IF (ECX[30:0]
= 0:17)
THEN IF ECX[31]
= 0
THEN IF 64-Bit Mode
THEN
RAX[31:0] PMC(ECX[30:0])[31:0]; (* 40-bit read *)
RAX[63:32] 0;
RDX[31:0] PMC(ECX[30:0])[39:32];
RDX[63:32] 0;
ELSE
EAX PMC(ECX[30:0])[31:0]; (* 40-bit read *)
EDX PMC(ECX[30:0])[39:32];
FI;
ELSE IF ECX[31]
= 1
THEN IF 64-Bit Mode
THEN
RAX[31:0] PMC(ECX[30:0])[31:0]; (* 32-bit read *)
RAX[63:32] 0;
RDX 0;
ELSE
EAX PMC(ECX[30:0])[31:0]; (* 32-bit read *)
EDX 0;
FI;
FI;
ELSE IF (*64-bit Intel Xeon processor with L3 *)