#
! $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

.define .aar4
.aar4:
	addis r0, r0, <.trap_earray
	ori r0, r0, >.trap_earray
	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
