| #ifndef _ASM_SCORE_ASMMACRO_H | |
| #define _ASM_SCORE_ASMMACRO_H | |
| #include <asm/asm-offsets.h> | |
| #ifdef __ASSEMBLY__ | |
| .macro SAVE_ALL | |
| mfcr r30, cr0 | |
| mv r31, r0 | |
| nop | |
| /* if UMs == 1, change stack. */ | |
| slli.c r30, r30, 28 | |
| bpl 1f | |
| la r31, kernelsp | |
| lw r31, [r31] | |
| 1: | |
| mv r30, r0 | |
| addri r0, r31, -PT_SIZE | |
| sw r30, [r0, PT_R0] | |
| .set r1 | |
| sw r1, [r0, PT_R1] | |
| .set nor1 | |
| sw r2, [r0, PT_R2] | |
| sw r3, [r0, PT_R3] | |
| sw r4, [r0, PT_R4] | |
| sw r5, [r0, PT_R5] | |
| sw r6, [r0, PT_R6] | |
| sw r7, [r0, PT_R7] | |
| sw r8, [r0, PT_R8] | |
| sw r9, [r0, PT_R9] | |
| sw r10, [r0, PT_R10] | |
| sw r11, [r0, PT_R11] | |
| sw r12, [r0, PT_R12] | |
| sw r13, [r0, PT_R13] | |
| sw r14, [r0, PT_R14] | |
| sw r15, [r0, PT_R15] | |
| sw r16, [r0, PT_R16] | |
| sw r17, [r0, PT_R17] | |
| sw r18, [r0, PT_R18] | |
| sw r19, [r0, PT_R19] | |
| sw r20, [r0, PT_R20] | |
| sw r21, [r0, PT_R21] | |
| sw r22, [r0, PT_R22] | |
| sw r23, [r0, PT_R23] | |
| sw r24, [r0, PT_R24] | |
| sw r25, [r0, PT_R25] | |
| sw r25, [r0, PT_R25] | |
| sw r26, [r0, PT_R26] | |
| sw r27, [r0, PT_R27] | |
| sw r28, [r0, PT_R28] | |
| sw r29, [r0, PT_R29] | |
| orri r28, r0, 0x1fff | |
| li r31, 0x00001fff | |
| xor r28, r28, r31 | |
| mfcehl r30, r31 | |
| sw r30, [r0, PT_CEH] | |
| sw r31, [r0, PT_CEL] | |
| mfcr r31, cr0 | |
| sw r31, [r0, PT_PSR] | |
| mfcr r31, cr1 | |
| sw r31, [r0, PT_CONDITION] | |
| mfcr r31, cr2 | |
| sw r31, [r0, PT_ECR] | |
| mfcr r31, cr5 | |
| srli r31, r31, 1 | |
| slli r31, r31, 1 | |
| sw r31, [r0, PT_EPC] | |
| .endm | |
| .macro RESTORE_ALL_AND_RET | |
| mfcr r30, cr0 | |
| srli r30, r30, 1 | |
| slli r30, r30, 1 | |
| mtcr r30, cr0 | |
| nop | |
| nop | |
| nop | |
| nop | |
| nop | |
| .set r1 | |
| ldis r1, 0x00ff | |
| and r30, r30, r1 | |
| not r1, r1 | |
| lw r31, [r0, PT_PSR] | |
| and r31, r31, r1 | |
| .set nor1 | |
| or r31, r31, r30 | |
| mtcr r31, cr0 | |
| nop | |
| nop | |
| nop | |
| nop | |
| nop | |
| lw r30, [r0, PT_CONDITION] | |
| mtcr r30, cr1 | |
| nop | |
| nop | |
| nop | |
| nop | |
| nop | |
| lw r30, [r0, PT_CEH] | |
| lw r31, [r0, PT_CEL] | |
| mtcehl r30, r31 | |
| .set r1 | |
| lw r1, [r0, PT_R1] | |
| .set nor1 | |
| lw r2, [r0, PT_R2] | |
| lw r3, [r0, PT_R3] | |
| lw r4, [r0, PT_R4] | |
| lw r5, [r0, PT_R5] | |
| lw r6, [r0, PT_R6] | |
| lw r7, [r0, PT_R7] | |
| lw r8, [r0, PT_R8] | |
| lw r9, [r0, PT_R9] | |
| lw r10, [r0, PT_R10] | |
| lw r11, [r0, PT_R11] | |
| lw r12, [r0, PT_R12] | |
| lw r13, [r0, PT_R13] | |
| lw r14, [r0, PT_R14] | |
| lw r15, [r0, PT_R15] | |
| lw r16, [r0, PT_R16] | |
| lw r17, [r0, PT_R17] | |
| lw r18, [r0, PT_R18] | |
| lw r19, [r0, PT_R19] | |
| lw r20, [r0, PT_R20] | |
| lw r21, [r0, PT_R21] | |
| lw r22, [r0, PT_R22] | |
| lw r23, [r0, PT_R23] | |
| lw r24, [r0, PT_R24] | |
| lw r25, [r0, PT_R25] | |
| lw r26, [r0, PT_R26] | |
| lw r27, [r0, PT_R27] | |
| lw r28, [r0, PT_R28] | |
| lw r29, [r0, PT_R29] | |
| lw r30, [r0, PT_EPC] | |
| lw r0, [r0, PT_R0] | |
| mtcr r30, cr5 | |
| rte | |
| .endm | |
| #endif /* __ASSEMBLY__ */ | |
| #endif /* _ASM_SCORE_ASMMACRO_H */ |