mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-27 15:42:46 -04:00
216 lines
3.0 KiB
C
216 lines
3.0 KiB
C
#include "dolphin/OS/OSCache.h"
|
|
//Needs OSError stuff
|
|
asm void DCEnable(void){
|
|
nofralloc
|
|
sync
|
|
mfspr r3, 0x3f0
|
|
ori r3, r3, 0x4000
|
|
mtspr 0x3f0, r3
|
|
blr
|
|
}
|
|
asm void DCInvalidateRange(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- pi_r
|
|
addi len, len, 0x20
|
|
|
|
pi_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
inv_ran:
|
|
dcbi 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz inv_ran
|
|
|
|
blr
|
|
}
|
|
asm void DCFlushRange(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- pf_r
|
|
addi len, len, 0x20
|
|
|
|
pf_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
fls_ran:
|
|
dcbf 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz fls_ran
|
|
sc
|
|
blr
|
|
}
|
|
|
|
asm void DCStoreRange(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- ps_r
|
|
addi len, len, 0x20
|
|
|
|
ps_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
st_ran:
|
|
dcbst 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz st_ran
|
|
sc
|
|
blr
|
|
}
|
|
|
|
asm void DCFlushRangeNoSync(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- pfns_r
|
|
addi len, len, 0x20
|
|
|
|
pfns_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
fls_ranns:
|
|
dcbf 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz fls_ranns
|
|
blr
|
|
}
|
|
|
|
asm void DCStoreRangeNoSync(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- psns_r
|
|
addi len, len, 0x20
|
|
|
|
psns_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
st_ranns:
|
|
dcbst 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz st_ranns
|
|
sc
|
|
blr
|
|
}
|
|
|
|
asm void DCZeroRange(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- pzr_r
|
|
addi len, len, 0x20
|
|
|
|
pzr_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
z_ran:
|
|
dcbz 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz z_ran
|
|
blr
|
|
}
|
|
|
|
asm void DCTouchRange(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- ptor_r
|
|
addi len, len, 0x20
|
|
|
|
ptor_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
t_ran:
|
|
dcbt 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz t_ran
|
|
blr
|
|
}
|
|
|
|
asm void ICInvalidateRange(register void* buf, register u32 len){
|
|
nofralloc
|
|
cmplwi len, 0
|
|
blelr-
|
|
|
|
clrlwi. r5, buf, 0x1b
|
|
beq- pir_r
|
|
addi len, len, 0x20
|
|
|
|
pir_r:
|
|
addi len, len, 0x1f
|
|
srwi len, len, 5
|
|
mtctr len
|
|
|
|
i_ran:
|
|
icbi 0, buf
|
|
addi buf, buf, 0x20
|
|
bdnz i_ran
|
|
sync
|
|
isync
|
|
blr
|
|
}
|
|
asm void ICFlashInvalidate(void){
|
|
nofralloc
|
|
mfspr r3, 0x3f0
|
|
ori r3, r3, 0x800
|
|
mtspr 0x3f0, r3
|
|
blr
|
|
}
|
|
|
|
asm void ICEnable(void){
|
|
nofralloc
|
|
isync
|
|
mfspr r3, 0x3f0
|
|
ori r3, r3, 0x8000
|
|
mtspr 0x3f0, r3
|
|
blr
|
|
}
|
|
|
|
asm void LCDisable(void){
|
|
nofralloc
|
|
lis r3, 0xE000
|
|
li r4, 0x200
|
|
mtctr r4
|
|
dis:
|
|
dcbi 0, r3
|
|
addi r3, r3, 0x20
|
|
bdnz dis
|
|
mfspr r4, 0x398
|
|
rlwinm r4, r4, 0, 4, 2
|
|
mtspr 0x398, r4
|
|
blr
|
|
}
|
|
|
|
|