.set r0,0; .set r1,1; .set r2,2; .set r3,3; .set r4,4; .set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9; .set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14; .set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19; .set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24; .set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29; .set r30,30; .set r31,31; #include "hw.h" .global __temp_abe __temp_abe: mfspr r3,rHID0 ori r4,r3,HID0_ABE #HID0[ABE] mtspr rHID0,r4 isync sync mtspr rHID0,r3 rfi .global DCFlashInvalidate DCFlashInvalidate: nop mfspr r3,rHID0 ori r3,r3,HID0_DCFI #HID0[DCFI] mtspr rHID0,r3 blr .global DCacheEnable DCacheEnable: sync mfspr r3,rHID0 ori r3,r3,HID0_DCE #HID0[DCE] mtspr rHID0,r3 blr .global DCBlockInvalidate DCBlockInvalidate: cmplwi r4,0 blelr clrlwi. r5,r3,27 beq- 0f addi r4,r4,0x20 0: addi r4,r4,0x1F rlwinm r4,r4,27,5,31 mtctr r4 1: dcbi r0,r3 addi r3,r3,0x20 bdnz+ 1b blr DCBlockFlushSc: cmplwi r4,0 blelr clrlwi. r5,r3,27 beq- 0f addi r4,r4,0x20 0: addi r4,r4,0x1F rlwinm r4,r4,27,5,31 mtctr r4 1: dcbf r0,r3 addi r3,r3,0x20 bdnz+ 1b sc blr DCBlockFlush: cmplwi r4,0 blelr clrlwi. r5,r3,27 beq- 0f addi r4,r4,0x20 0: addi r4,r4,0x1F rlwinm r4,r4,27,5,31 mtctr r4 1: dcbf r0,r3 addi r3,r3,0x20 bdnz+ 1b blr .global ICInvalidateRange ICInvalidateRange: cmplwi r4,0 blelr clrlwi. r5,r3,27 beq- 0f addi r4,r4,0x20 0: addi r4,r4,0x1F rlwinm r4,r4,27,5,31 mtctr r4 1: icbi r0,r3 addi r3,r3,0x20 bdnz+ 1b sync isync blr ICFlashInvalidate: mfspr r3,rHID0 ori r3,r3,HID0_ICFI #HID0[ICFI] mtspr rHID0,r3 blr .global ICacheEnable ICacheEnable: isync mfspr r3,rHID0 ori r3,r3,HID0_ICE #HID0[ICE] mtspr rHID0,r3 blr ICacheDisable: isync mfspr r3,rHID0 rlwinm r3,r3,0,17,15 #HID0[ICE] mtspr rHID0,r3 blr ISync: isync blr .global L2_Init L2_Init: mflr r0 stw r0, 0x04(r1) stwu r1,-0x10(r1) stw r31,0x0C(r1) mfmsr r3 mr r31,r3 sync li r3,MSR_IR|MSR_DR #MSR[IR|DR] mtmsr r3 sync bl L2_Disable bl L2_Invalidate mr r3,r31 mtmsr r3 lwz r0, 0x14(r1) lwz r31,0x0C(r1) mtlr r0 blr .global L2_Enable L2_Enable: mfl2cr r3 oris r0,r3,0x8000 #L2CR[L2E] rlwinm r3,r0,0,11,9 #L2CR[L2I] mtl2cr r3 blr L2_Disable: sync mfl2cr r3 clrlwi r3,r3,1 #L2CR[L2E] mtl2cr r3 sync blr L2_Invalidate: mflr r0 stw r0, 0x04(r1) stwu r1,-0x08(r1) bl L2_Disable mfl2cr r3 oris r3,r3,0x200 #L2CR[L2I] mtl2cr r3 0: mfl2cr r3 clrlwi r0,r3,31 #L2CR[L2IP] cmplwi r0,0 bne+ 0b mfl2cr r3 rlwinm r3,r3,0,11,9 #L2CR[L2I] mtl2cr r3 1: mfl2cr r3 clrlwi r0,r3,31 #L2CR[L2IP] cmplwi r0,0 bne+ 1b lwz r0,0x0C(r1) addi r1,r1,0x08 mtlr r0 blr