- initial implementation of _read_host_time_ns, a function to retrieve real-time in ns in vmware virtual machines
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
# 
 | 
						|
! sections
 | 
						|
 | 
						|
.sect .text; .sect .rom; .sect .data; .sect .bss
 | 
						|
 | 
						|
.define	_read_tsc	! read the cycle counter (Pentium and up)
 | 
						|
 | 
						|
.sect .text
 | 
						|
!*===========================================================================*
 | 
						|
! PUBLIC void read_tsc(unsigned long *high, unsigned long *low);
 | 
						|
! Read the cycle counter of the CPU. Pentium and up. 
 | 
						|
.align 16
 | 
						|
_read_tsc:
 | 
						|
	push edx
 | 
						|
	push eax
 | 
						|
.data1 0x0f		! this is the RDTSC instruction 
 | 
						|
.data1 0x31		! it places the TSC in EDX:EAX
 | 
						|
	push ebp
 | 
						|
	mov ebp, 16(esp)
 | 
						|
	mov (ebp), edx
 | 
						|
	mov ebp, 20(esp)
 | 
						|
	mov (ebp), eax
 | 
						|
	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.
 | 
						|
.align 16
 | 
						|
_read_host_time_ns:
 | 
						|
	push edx
 | 
						|
	push eax
 | 
						|
	push ecx
 | 
						|
	mov ecx, 0x10001
 | 
						|
.data1 0x0f		! this is the RDPMC instruction 
 | 
						|
.data1 0x33		! it places the result in EDX:EAX
 | 
						|
	push ebp
 | 
						|
	mov ebp, 20(esp)
 | 
						|
	mov (ebp), edx
 | 
						|
	mov ebp, 24(esp)
 | 
						|
	mov (ebp), eax
 | 
						|
	pop ebp
 | 
						|
	pop ecx
 | 
						|
	pop eax
 | 
						|
	pop edx
 | 
						|
	ret
 | 
						|
 |