Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
asmmacro.h
Go to the documentation of this file.
1 #ifndef _ASM_SCORE_ASMMACRO_H
2 #define _ASM_SCORE_ASMMACRO_H
3 
4 #include <asm/asm-offsets.h>
5 
6 #ifdef __ASSEMBLY__
7 
8 .macro SAVE_ALL
9  mfcr r30, cr0
10  mv r31, r0
11  nop
12  /* if UMs == 1, change stack. */
13  slli.c r30, r30, 28
14  bpl 1f
15  la r31, kernelsp
16  lw r31, [r31]
17 1:
18  mv r30, r0
19  addri r0, r31, -PT_SIZE
20 
21  sw r30, [r0, PT_R0]
22  .set r1
23  sw r1, [r0, PT_R1]
24  .set nor1
25  sw r2, [r0, PT_R2]
26  sw r3, [r0, PT_R3]
27  sw r4, [r0, PT_R4]
28  sw r5, [r0, PT_R5]
29  sw r6, [r0, PT_R6]
30  sw r7, [r0, PT_R7]
31 
32  sw r8, [r0, PT_R8]
33  sw r9, [r0, PT_R9]
34  sw r10, [r0, PT_R10]
35  sw r11, [r0, PT_R11]
36  sw r12, [r0, PT_R12]
37  sw r13, [r0, PT_R13]
38  sw r14, [r0, PT_R14]
39  sw r15, [r0, PT_R15]
40 
41  sw r16, [r0, PT_R16]
42  sw r17, [r0, PT_R17]
43  sw r18, [r0, PT_R18]
44  sw r19, [r0, PT_R19]
45  sw r20, [r0, PT_R20]
46  sw r21, [r0, PT_R21]
47  sw r22, [r0, PT_R22]
48  sw r23, [r0, PT_R23]
49 
50  sw r24, [r0, PT_R24]
51  sw r25, [r0, PT_R25]
52  sw r25, [r0, PT_R25]
53  sw r26, [r0, PT_R26]
54  sw r27, [r0, PT_R27]
55 
56  sw r28, [r0, PT_R28]
57  sw r29, [r0, PT_R29]
58  orri r28, r0, 0x1fff
59  li r31, 0x00001fff
60  xor r28, r28, r31
61 
62  mfcehl r30, r31
63  sw r30, [r0, PT_CEH]
64  sw r31, [r0, PT_CEL]
65 
66  mfcr r31, cr0
67  sw r31, [r0, PT_PSR]
68 
69  mfcr r31, cr1
70  sw r31, [r0, PT_CONDITION]
71 
72  mfcr r31, cr2
73  sw r31, [r0, PT_ECR]
74 
75  mfcr r31, cr5
76  srli r31, r31, 1
77  slli r31, r31, 1
78  sw r31, [r0, PT_EPC]
79 .endm
80 
81 .macro RESTORE_ALL_AND_RET
82  mfcr r30, cr0
83  srli r30, r30, 1
84  slli r30, r30, 1
85  mtcr r30, cr0
86  nop
87  nop
88  nop
89  nop
90  nop
91 
92  .set r1
93  ldis r1, 0x00ff
94  and r30, r30, r1
95  not r1, r1
96  lw r31, [r0, PT_PSR]
97  and r31, r31, r1
98  .set nor1
99  or r31, r31, r30
100  mtcr r31, cr0
101  nop
102  nop
103  nop
104  nop
105  nop
106 
107  lw r30, [r0, PT_CONDITION]
108  mtcr r30, cr1
109  nop
110  nop
111  nop
112  nop
113  nop
114 
115  lw r30, [r0, PT_CEH]
116  lw r31, [r0, PT_CEL]
117  mtcehl r30, r31
118 
119  .set r1
120  lw r1, [r0, PT_R1]
121  .set nor1
122  lw r2, [r0, PT_R2]
123  lw r3, [r0, PT_R3]
124  lw r4, [r0, PT_R4]
125  lw r5, [r0, PT_R5]
126  lw r6, [r0, PT_R6]
127  lw r7, [r0, PT_R7]
128 
129  lw r8, [r0, PT_R8]
130  lw r9, [r0, PT_R9]
131  lw r10, [r0, PT_R10]
132  lw r11, [r0, PT_R11]
133  lw r12, [r0, PT_R12]
134  lw r13, [r0, PT_R13]
135  lw r14, [r0, PT_R14]
136  lw r15, [r0, PT_R15]
137 
138  lw r16, [r0, PT_R16]
139  lw r17, [r0, PT_R17]
140  lw r18, [r0, PT_R18]
141  lw r19, [r0, PT_R19]
142  lw r20, [r0, PT_R20]
143  lw r21, [r0, PT_R21]
144  lw r22, [r0, PT_R22]
145  lw r23, [r0, PT_R23]
146 
147  lw r24, [r0, PT_R24]
148  lw r25, [r0, PT_R25]
149  lw r26, [r0, PT_R26]
150  lw r27, [r0, PT_R27]
151  lw r28, [r0, PT_R28]
152  lw r29, [r0, PT_R29]
153 
154  lw r30, [r0, PT_EPC]
155  lw r0, [r0, PT_R0]
156  mtcr r30, cr5
157  rte
158 .endm
159 
160 #endif /* __ASSEMBLY__ */
161 #endif /* _ASM_SCORE_ASMMACRO_H */