50 lines
		
	
	
	
		
			580 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			580 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .sli4
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
 | 
						|
! Shift 32 bits integer left
 | 
						|
! Expects on stack:	number of shifts
 | 
						|
!			number to be shifted
 | 
						|
! Yields on stack:	result
 | 
						|
 | 
						|
.sli4:
 | 
						|
	pop h
 | 
						|
	shld .retadr
 | 
						|
	mov h,b
 | 
						|
	mov l,c
 | 
						|
	shld .bcreg
 | 
						|
 | 
						|
	pop b		!number of shifts
 | 
						|
	pop d		!low-order bytes of number to be shifted
 | 
						|
	pop h		!high-order bytes
 | 
						|
	mov a,b		!if bc>=32 return 0
 | 
						|
	ora a
 | 
						|
	jnz 2f
 | 
						|
	mov a,c
 | 
						|
	cpi 32
 | 
						|
	jnc 2f
 | 
						|
1:	dcr c
 | 
						|
	jm 3f
 | 
						|
	dad h
 | 
						|
	xchg
 | 
						|
	dad h
 | 
						|
	xchg
 | 
						|
	jnc 1b
 | 
						|
	inx h
 | 
						|
	jmp 1b
 | 
						|
 | 
						|
2:	lxi h,0
 | 
						|
	lxi d,0
 | 
						|
 | 
						|
3:	push h
 | 
						|
	push d
 | 
						|
 | 
						|
	lhld .bcreg
 | 
						|
	mov b,h
 | 
						|
	mov c,l
 | 
						|
	lhld .retadr
 | 
						|
	pchl
 | 
						|
 |