123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #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 */
|