46 lines
779 B
ArmAsm
46 lines
779 B
ArmAsm
|
#
|
||
|
#include "powerpc.h"
|
||
|
|
||
|
.sect .text
|
||
|
|
||
|
! Store to bounds-checked array.
|
||
|
!
|
||
|
! On entry:
|
||
|
! r3 = ptr to descriptor
|
||
|
! r4 = index
|
||
|
! r5 = address of array
|
||
|
|
||
|
.define .sar4
|
||
|
.sar4:
|
||
|
mfspr r10, lr
|
||
|
bl .aar4
|
||
|
mtspr lr, r10
|
||
|
! r3 = ptr to element
|
||
|
! r0 = size of element
|
||
|
|
||
|
cmpi cr0, 0, r0, 1
|
||
|
bc IFFALSE, EQ, 1f
|
||
|
! Store 1 byte.
|
||
|
lwz r4, 0(sp)
|
||
|
addi sp, sp, 4
|
||
|
stb r4, 0(r3)
|
||
|
bclr ALWAYS, 0, 0
|
||
|
1:
|
||
|
cmpi cr0, 0, r0, 2
|
||
|
bc IFFALSE, EQ, 2f
|
||
|
! Store 2 bytes.
|
||
|
lwz r4, 0(sp)
|
||
|
addi sp, sp, 4
|
||
|
sth r4, 0(r3)
|
||
|
bclr ALWAYS, 0, 0
|
||
|
2:
|
||
|
! Store r0 bytes, where r0 must be a positive multiple of 4.
|
||
|
or r5, r0, r0 ! index r5 = length r0
|
||
|
3:
|
||
|
addic. r5, r5, -4 ! r5 -= 4
|
||
|
lwzx r4, r5, sp
|
||
|
stwx r4, r5, r3
|
||
|
bc IFTRUE, GT, 3b ! loop if r5 > 0
|
||
|
add sp, r0, sp ! move stack pointer up
|
||
|
bclr ALWAYS, 0, 0
|