minix3/lib/libc/arch/i386/read_tsc.S

43 lines
1.2 KiB
ArmAsm

/* */
/* sections */
#include <machine/asm.h>
/**===========================================================================* */
/* PUBLIC void read_tsc(unsigned long *high, unsigned long *low); */
/* Read the cycle counter of the CPU. Pentium and up. */
ENTRY(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. */
ENTRY(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