static int opRDTSC(uint32_t fetchdat) { if (!cpu_has_feature(CPU_FEATURE_RDTSC)) { cpu_state.pc = cpu_state.oldpc; x86illegal(); return 1; } if ((cr4 & CR4_TSD) && CPL) { x86gpf("RDTSC when TSD set and CPL != 0", 0); return 1; } EAX = tsc & 0xffffffff; EDX = tsc >> 32; CLOCK_CYCLES(1); #ifdef USE_DYNAREC if (cpu_use_dynarec) update_tsc(); #endif return 0; } static int opRDPMC(uint32_t fetchdat) { if (ECX > 1 || (!(cr4 & CR4_PCE) && (cr0 & 1) && CPL)) { x86gpf("RDPMC not allowed", 0); return 1; } EAX = EDX = 0; CLOCK_CYCLES(1); return 0; }