33 lines
904 B
ArmAsm
33 lines
904 B
ArmAsm
|
/*
|
||
|
This little bit of code is executed in-place by one CPU, but copied to a different memory region
|
||
|
by the other CPU. Make sure it stays position-independent.
|
||
|
*/
|
||
|
.text
|
||
|
.align 4
|
||
|
.global test_fastbus_cp
|
||
|
.type test_fastbus_cp,@function
|
||
|
//Args:
|
||
|
//a2 - fifo addr
|
||
|
//a3 - buf addr
|
||
|
//a4 - len
|
||
|
//a5 - ptr to int to use
|
||
|
test_fastbus_cp:
|
||
|
entry a1,64
|
||
|
back:
|
||
|
beqi a4, 0, out //check if loop done
|
||
|
s32i a4, a5, 0 //store value, for shits and/or giggles
|
||
|
memw //make sure write happens
|
||
|
l32i a4, a5, 0 //load value again, to thwart any prediction in the pipeline
|
||
|
bbsi a4, 0, pred //Random jump to check predictive reads. Both branches should do the same.
|
||
|
l32i a6, a2, 0 //read from fifo 1
|
||
|
j predout
|
||
|
pred:
|
||
|
l32i a6, a2, 0 //read from fifo 2
|
||
|
predout:
|
||
|
s8i a6, a3, 0 //store result
|
||
|
addi a3, a3, 1 //inc ptr
|
||
|
addi a4, a4, -1 //next
|
||
|
j back //loop again
|
||
|
out:
|
||
|
retw //and we are done
|