51 lines
580 B
ArmAsm
51 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
|
|
|