#ifndef _ASM_SCORE_ASMMACRO_H #define _ASM_SCORE_ASMMACRO_H #include #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 */