aar4.s 647 B

1234567891011121314151617181920212223242526272829303132333435
  1. #
  2. ! $Source$
  3. ! $State$
  4. ! $Revision$
  5. #include "powerpc.h"
  6. .sect .text
  7. ! Index into a bounds-checked array.
  8. !
  9. ! On entry:
  10. ! r3 = ptr to descriptor
  11. ! r4 = index
  12. ! r5 = address of array
  13. .define .aar4
  14. .aar4:
  15. addis r0, r0, <.trap_earray
  16. ori r0, r0, >.trap_earray
  17. mtspr ctr, r0 ! load CTR with trap address
  18. lwz r0, 0(r3)
  19. subf. r4, r0, r4 ! adjust range
  20. bcctr IFTRUE, LT, 0 ! check lower bound
  21. lwz r0, 4(r3)
  22. cmpl cr0, 0, r4, r3
  23. bcctr IFFALSE, LT, 0 ! check upper bound
  24. lwz r0, 8(r3)
  25. mullw r4, r4, r0 ! scale index
  26. add r3, r4, r5 ! calculate element address
  27. bclr ALWAYS, 0, 0