.sect .text ! Get address of element of bounds-checked array. ! ! Stack: ( array-adr index descriptor-adr -- element-adr ) ! Sets r3 = size of element for .los4, .sts4 ! Preserves r10 for .lar4, .sar4 .define .aar4 .aar4: lwz r4, 0(sp) ! r4 = address of descriptor lwz r5, 4(sp) ! r5 = index lwz r6, 8(sp) ! r6 = address of array lwz r0, 0(r4) subf. r5, r0, r5 ! subtract lower bound from index blt .trap_earray ! check lower bound lwz r0, 4(r4) cmplw r5, r0 bgt .trap_earray ! check upper bound lwz r3, 8(r4) ! r3 = size of element mullw r5, r5, r3 ! scale index by size add r6, r6, r5 stw r6, 8(sp) ! push address of element addi sp, sp, 8 blr .trap_earray: li r3, 0 ! EARRAY = 0 in h/em_abs.h b .trp