mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
814 B
47 lines
814 B
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#include <asm/ppc_asm.h> |
|
#include <asm/asm-compat.h> |
|
|
|
/* unsigned long xmon_mfspr(sprn, default_value) */ |
|
_GLOBAL(xmon_mfspr) |
|
PPC_LL r5, .Lmfspr_table@got(r2) |
|
b xmon_mxspr |
|
|
|
/* void xmon_mtspr(sprn, new_value) */ |
|
_GLOBAL(xmon_mtspr) |
|
PPC_LL r5, .Lmtspr_table@got(r2) |
|
b xmon_mxspr |
|
|
|
/* |
|
* r3 = sprn |
|
* r4 = default or new value |
|
* r5 = table base |
|
*/ |
|
xmon_mxspr: |
|
/* |
|
* To index into the table of mxsprs we need: |
|
* i = (sprn & 0x3ff) * 8 |
|
* or using rwlinm: |
|
* i = (sprn << 3) & (0x3ff << 3) |
|
*/ |
|
rlwinm r3, r3, 3, 0x3ff << 3 |
|
add r5, r5, r3 |
|
mtctr r5 |
|
mr r3, r4 /* put default_value in r3 for mfspr */ |
|
bctr |
|
|
|
.Lmfspr_table: |
|
spr = 0 |
|
.rept 1024 |
|
mfspr r3, spr |
|
blr |
|
spr = spr + 1 |
|
.endr |
|
|
|
.Lmtspr_table: |
|
spr = 0 |
|
.rept 1024 |
|
mtspr spr, r4 |
|
blr |
|
spr = spr + 1 |
|
.endr
|
|
|