27 lines
		
	
	
	
		
			542 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			27 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
 |