strlb.s 842 B

1234567891011121314151617181920212223242526272829
  1. .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
  2. .define .strlb
  3. ! $Id$
  4. ! revised version by CHL
  5. ! Store the value that is on the stack in fp.
  6. ! Compute ap.
  7. .strlb:
  8. movl (sp)+,r3
  9. movl (sp)+,fp
  10. pushl r3
  11. movl $20,ap ! Compute argumentbase from local base.
  12. ! Distance is 5 longwords + the number of
  13. ! registers saved.
  14. movl 4(fp),r3 ! mask for saved registers
  15. movl $16,r2 ! position of first bit to test
  16. I4:
  17. subl3 r2,$28,r1 ! remaining size of mask
  18. ffs r2,r1,r3,r2 ! find first bit set in mask
  19. beql I5 ! no more bits set
  20. addl2 $4,ap ! for each saved register
  21. incl r2
  22. jbr I4
  23. I5:
  24. extzv $14,$2,6(fp),r3 ! Now find out about the stack alignment
  25. ! between fp and ap
  26. addl2 r3,ap ! add alignment
  27. addl2 fp,ap
  28. rsb