Специальный блок памяти будет периодически обновляться задачей DMA. Когда другая Задача пыталась часто искать данные в этом блоке, существует MCE (Machine Check Exception) о проверке четности кэша данных L1.
Могу ли я сделать недействительным кэш данных L1 для этого блока памяти полностью или только после обновления DMA?
В libogc есть интересный API, такой как:
void DCInvalidateRange(void *startaddress,u32 len);
.globl DCInvalidateRange
DCInvalidateRange:
cmplwi r4, 0 # zero or negative size?
blelr
clrlwi. r5, r3, 27 # check for lower bits set in address
beq 1f
addi r4, r4, 0x20
1:
addi r4, r4, 0x1f
srwi r4, r4, 5
mtctr r4
2:
dcbi r0, r3
addi r3, r3, 0x20
bdnz 2b
blr
Я не знаком ни с ASM, ни с ASM на PowerPC. Будут ли люди рекомендовать ссылки или описания этой операции?