39 lines
		
	
	
	
		
			639 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			639 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
#
 | 
						|
.sect .text; .sect .rom; .sect .data; .sect .bss
 | 
						|
 | 
						|
/*
 | 
						|
 * 64-big unsigned tristate comparison.
 | 
						|
 * Inputs:
 | 
						|
 *    r2r3: left
 | 
						|
 *    r4r5: right
 | 
						|
 * Outputs;
 | 
						|
 *    r2: result
 | 
						|
 */
 | 
						|
 | 
						|
.sect .text
 | 
						|
.define .compareul
 | 
						|
.compareul:
 | 
						|
	/* Compare high words. */
 | 
						|
 | 
						|
	sltu at, r3, r5			! if r3<r5, then 1
 | 
						|
	subu at, zero, at		! if r3<r5, then -1
 | 
						|
	bne at, zero, exit
 | 
						|
	nop
 | 
						|
 | 
						|
	sltu at, r5, r3			! if r3>r5, then 1
 | 
						|
	bne at, zero, exit
 | 
						|
	nop
 | 
						|
 | 
						|
	/* High words are equal --- compare low words. */
 | 
						|
 | 
						|
	sltu at, r2, r4			! if r2<r4, then 1
 | 
						|
	subu at, zero, at		! if r2<r4, then -1
 | 
						|
	bne at, zero, exit
 | 
						|
	nop
 | 
						|
 | 
						|
	sltu at, r4, r2			! if r2>r4, then 1
 | 
						|
exit:
 | 
						|
	mov r2, at
 | 
						|
	jr ra
 | 
						|
	nop
 | 
						|
 |