38 lines
		
	
	
		
			786 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			786 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* fpu_compare() - compare doubles	Author: Erik van der Kouwe */
 | |
| /* fpu_sw_get() - get FPU status      	17 Dec 2009 */
 | |
| /* fpu_xam() - examine double */
 | |
| .text
 | |
| .globl	_fpu_compare
 | |
| .globl	_fpu_sw_get
 | |
| .globl	_fpu_xam
 | |
| 
 | |
| /* u16_t fpu_compare(double x, double y) */
 | |
| _fpu_compare:
 | |
| /* move the values onto the floating point stack */
 | |
| 	fldl	12(%esp)
 | |
| 	fldl	4(%esp)
 | |
| 
 | |
| /* compare values and return status word */
 | |
| 	fcompp
 | |
| 	jmp	_fpu_sw_get
 | |
| 
 | |
| /* u16_t fpu_sw_get(void) */
 | |
| _fpu_sw_get:
 | |
| /* clear unused high-order word and get status word */
 | |
| 	xor	%eax, %eax
 | |
| .byte	0xdf, 0xe0	/* fnstsw	ax */
 | |
| 	ret
 | |
| 
 | |
| /* u16_t fpu_xam(double value) */
 | |
| _fpu_xam:
 | |
| /* move the value onto the floating point stack */
 | |
| 	fldl	4(%esp)
 | |
| 
 | |
| /* examine value and get status word */
 | |
| 	fxam
 | |
| 	call	_fpu_sw_get
 | |
| 
 | |
| /* pop the value */
 | |
| 	fstp	%st
 | |
| 	ret
 | 
