/* */ /* sections */ .globl _read_tsc /* read the cycle counter (Pentium and up) */ .text /**===========================================================================* */ /* PUBLIC void read_tsc(unsigned long *high, unsigned long *low); */ /* Read the cycle counter of the CPU. Pentium and up. */ .balign 16 _read_tsc: push %edx push %eax .byte 0x0f /* this is the RDTSC instruction */ .byte 0x31 /* it places the TSC in EDX:EAX */ push %ebp movl 16(%esp), %ebp movl %edx, (%ebp) movl 20(%esp), %ebp movl %eax, (%ebp) pop %ebp pop %eax pop %edx ret /**===========================================================================* */ /* PUBLIC void read_host_time_ns(unsigned long *high, unsigned long *low); */ /* access real time in ns from host in vmware. */ .balign 16 _read_host_time_ns: pushl %edx pushl %eax pushl %ecx movl $0x10001, %ecx .byte 0x0f /* this is the RDTSC instruction */ .byte 0x31 /* it places the TSC in EDX:EAX */ pushl %ebp movl 20(%esp), %ebp movl %edx, (%ebp) movl 24(%esp), %ebp movl %eax, (%ebp) popl %ebp popl %ecx popl %eax popl %edx ret