28 lines
542 B
ArmAsm
28 lines
542 B
ArmAsm
.sect .text
|
|
|
|
! Bounds check. Traps if the value is out of range.
|
|
! Stack: ( value descriptor -- value )
|
|
!
|
|
! This ".rck" only works with 4-byte integers. The name is ".rck" and
|
|
! not ".rck4" because many back ends only do rck with the word size.
|
|
|
|
.define .rck
|
|
.rck:
|
|
lwz r3, 0 (sp)
|
|
lwz r4, 4 (sp)
|
|
addi sp, sp, 4 ! leave value on stack
|
|
|
|
lwz r5, 0 (r3)
|
|
cmpw r4, r5
|
|
blt .trap_erange
|
|
|
|
lwz r5, 4 (r3)
|
|
cmpw r4, r5
|
|
bgt .trap_erange
|
|
|
|
blr
|
|
|
|
.trap_erange:
|
|
li r3, 1 ! ERANGE = 1 in h/em_abs.h
|
|
b .trp
|