30 lines
846 B
ArmAsm
30 lines
846 B
ArmAsm
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
|
|
.define .strlb
|
|
|
|
! $Header$
|
|
! revised version by CHL
|
|
! Store the value that is on the stack in fp.
|
|
! Compute ap.
|
|
.strlb:
|
|
movl (sp)+,r3
|
|
movl (sp)+,fp
|
|
pushl r3
|
|
movl $20,ap ! Compute argumentbase from local base.
|
|
! Distance is 5 longwords + the number of
|
|
! registers saved.
|
|
movl 4(fp),r3 ! mask for saved registers
|
|
movl $16,r2 ! position of first bit to test
|
|
I4:
|
|
subl3 r2,$28,r1 ! remaining size of mask
|
|
ffs r2,r1,r3,r2 ! find first bit set in mask
|
|
beql I5 ! no more bits set
|
|
addl2 $4,ap ! for each saved register
|
|
incl r2
|
|
jbr I4
|
|
I5:
|
|
extzv $14,$2,6(fp),r3 ! Now find out about the stack alignment
|
|
! between fp and ap
|
|
addl2 r3,ap ! add alignment
|
|
addl2 fp,ap
|
|
rsb
|