83 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define .rmi4
 | |
| 
 | |
| yl=2
 | |
| yh=4
 | |
| xl=6
 | |
| xh=8
 | |
| 
 | |
| .rmi4:
 | |
|         ! $Header$
 | |
| 	mov     si,sp           ! copy of sp
 | |
| 	mov     bx,yl(si)
 | |
| 	mov     ax,yh(si)
 | |
| 	cwd
 | |
| 	cmp     dx,ax
 | |
| 	jne     7f
 | |
| 	and     dx,dx
 | |
| 	jge     1f
 | |
| 	neg     bx
 | |
| 	je      7f
 | |
| 1:
 | |
| 	xor     dx,dx
 | |
| 	mov     cx,xl(si)
 | |
| 	mov     ax,xh(si)
 | |
| 	and     ax,ax
 | |
| 	jge     2f
 | |
| 	neg     ax
 | |
| 	neg     cx
 | |
| 	sbb     ax,dx
 | |
| 2:
 | |
| 	div     bx
 | |
| 	xchg    ax,cx
 | |
| 	div     bx              ! dx= result(low), 0=result(high)
 | |
| 	xor     bx,bx
 | |
| 9:
 | |
| 	cmp     xh(si),0
 | |
| 	jge     1f
 | |
| 	neg     bx
 | |
| 	neg     dx
 | |
| 	sbb     bx,0
 | |
| 1:
 | |
| 			! bx is high order result
 | |
| 			! dx is low order result
 | |
| 	ret     8
 | |
| 
 | |
| 7:
 | |
| 	mov     di,ax
 | |
| 	xor     bx,bx
 | |
| 	and     di,di
 | |
| 	jge     1f
 | |
| 	neg     di
 | |
| 	neg     yl(si)
 | |
| 	sbb     di,bx
 | |
| 1:
 | |
| 	mov     ax,xl(si)
 | |
| 	mov     dx,xh(si)
 | |
| 	and     dx,dx
 | |
| 	jge     1f
 | |
| 	neg     dx
 | |
| 	neg     ax
 | |
| 	sbb     dx,bx
 | |
| 1:
 | |
| 	mov     cx,16
 | |
| 1:
 | |
| 	shl     ax,1
 | |
| 	rcl     dx,1
 | |
| 	rcl     bx,1
 | |
| 	cmp     di,bx
 | |
| 	ja      3f
 | |
| 	jb      2f
 | |
| 	cmp     yl(si),dx
 | |
| 	jbe     2f
 | |
| 3:
 | |
| 	loop    1b
 | |
| 		! dx=result(low), bx=result(high)
 | |
| 	jmp     9b
 | |
| 2:
 | |
| 	sub     dx,yl(si)
 | |
| 	sbb     bx,di
 | |
| 	inc     ax
 | |
| 	loop    1b
 | |
| 1:
 | |
| 		! dx=result(low), bx=result(high)
 | |
| 	jmp     9b
 |