47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*  */
 | |
| /* 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
 | 
