2007-11-02 18:56:58 +00:00
|
|
|
#
|
|
|
|
! $Source$
|
|
|
|
! $State$
|
|
|
|
! $Revision$
|
|
|
|
|
|
|
|
#include "powerpc.h"
|
|
|
|
|
|
|
|
.sect .text
|
|
|
|
|
|
|
|
! Index into a bounds-checked array.
|
|
|
|
!
|
|
|
|
! On entry:
|
|
|
|
! r3 = ptr to descriptor
|
|
|
|
! r4 = index
|
|
|
|
! r5 = address of array
|
2016-09-18 03:55:55 +00:00
|
|
|
! Yields:
|
|
|
|
! r3 = address of element
|
|
|
|
! r0 = size of element (used by .lar4, .sar4)
|
|
|
|
! Preserves r10 for .lar4, .sar4
|
2007-11-02 18:56:58 +00:00
|
|
|
|
|
|
|
.define .aar4
|
|
|
|
.aar4:
|
2016-09-18 21:03:23 +00:00
|
|
|
li32 r0, .trap_earray
|
2007-11-02 18:56:58 +00:00
|
|
|
mtspr ctr, r0 ! load CTR with trap address
|
|
|
|
|
|
|
|
lwz r0, 0(r3)
|
|
|
|
subf. r4, r0, r4 ! adjust range
|
|
|
|
bcctr IFTRUE, LT, 0 ! check lower bound
|
|
|
|
|
|
|
|
lwz r0, 4(r3)
|
|
|
|
cmpl cr0, 0, r4, r3
|
|
|
|
bcctr IFFALSE, LT, 0 ! check upper bound
|
|
|
|
|
|
|
|
lwz r0, 8(r3)
|
|
|
|
mullw r4, r4, r0 ! scale index
|
|
|
|
add r3, r4, r5 ! calculate element address
|
|
|
|
|
|
|
|
bclr ALWAYS, 0, 0
|