On 7/5/25 1:06 AM, confuzzled wrote:
ulong rdtsc() {
     ulong result;
     uint* res = cast(uint*) &result;
     asm {
         rdtsc;  // Puts result in edx:eax

         // Cast our ulong's address to a 32-bit integer pointer
         // and move the register values into the correct memory locations.
         mov EAX, res[0]; // Low 32 bits
         mov EDX, res[1]; // High 32 bits
     }
     return result;
}

Got it:

ulong rdtsc() {
    ulong result;
    asm {
        rdtsc;  // Puts result in edx:eax
        mov [result], EAX; // Low 32 bits
        mov [result + 4], EDX; // High 32 bits
    }
    return result;
}

Thanks.

Reply via email to