34 lines
848 B
ArmAsm
34 lines
848 B
ArmAsm
|
#
|
||
|
/*
|
||
|
* VideoCore IV support library for the ACK
|
||
|
* © 2013 David Given
|
||
|
* This file is redistributable under the terms of the 3-clause BSD license.
|
||
|
* See the file 'Copying' in the root of the distribution for the full text.
|
||
|
*/
|
||
|
|
||
|
#include "videocore.h"
|
||
|
|
||
|
.define .csb
|
||
|
.sect .data
|
||
|
.csb:
|
||
|
! on entry:
|
||
|
! r0 = un-fixed-up descriptor
|
||
|
! r1 = value
|
||
|
add r0, gp ! r0 = fixed up descriptor
|
||
|
|
||
|
adds8 r2, r0, #1 ! r2 = moving pointer
|
||
|
ld r3, 4 (r0) ! r3 = count
|
||
|
adds8 r3, r0, r3 ! r3 = end ptr
|
||
|
|
||
|
loop:
|
||
|
ld r4, (r2)++
|
||
|
b.eq r4, r1, matched ! r2 points at matching addr
|
||
|
addcmpb.le r2, #4, r3, loop
|
||
|
notmatched:
|
||
|
mov r2, r0 ! r2 points at default jump
|
||
|
matched:
|
||
|
ld r2, (r2) ! load destination address
|
||
|
add r2, gp ! fix up r2
|
||
|
b r2 ! ...and go
|
||
|
|