forked from Minki/linux
6bc9a3966f
This is the complete set of new arch Score's files for linux. Score instruction set support 16bits, 32bits and 64bits instruction, Score SOC had been used in game machine and LCD TV. Signed-off-by: Chen Liqin <liqin.chen@sunplusct.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
162 lines
2.4 KiB
C
162 lines
2.4 KiB
C
#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 */
|