]> rtime.felk.cvut.cz Git - arc.git/blob - include/ppc/asm_ppc.h
PPC: Sleep mode and wakeup pin now working
[arc.git] / include / ppc / asm_ppc.h
1 /* -------------------------------- Arctic Core ------------------------------\r
2  * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
3  *\r
4  * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
5  *\r
6  * This source code is free software; you can redistribute it and/or modify it\r
7  * under the terms of the GNU General Public License version 2 as published by the\r
8  * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
9  *\r
10  * This program is distributed in the hope that it will be useful, but\r
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
13  * for more details.\r
14  * -------------------------------- Arctic Core ------------------------------*/\r
15 \r
16 \r
17 \r
18 \r
19 \r
20 \r
21 \r
22 \r
23 #ifndef PPC_ASM_H_\r
24 #define PPC_ASM_H\r
25 \r
26 /* Context\r
27  * =================================================\r
28  * We have two context's large and small. Large is saved on\r
29  * interrupt and small is saved for everything else.\r
30  *\r
31  * Layout:\r
32  *\r
33  * offset\r
34  * -------------------------------\r
35  *   0--1    : context indicator, 0xde - small, 0xad - large\r
36  *   4       : lr\r
37  *   8       : cr\r
38  *  12       : sp\r
39  *\r
40  * small layout\r
41  *   16--    : General regs r14--r31\r
42  *\r
43  *  large layout\r
44  *   16--    : General regs r0--r31\r
45  *\r
46  */\r
47 \r
48 #define SPR_SRR0                26\r
49 #define SPR_SRR1                27\r
50 \r
51 #define SPR_CSRR0               58\r
52 #define SPR_CSRR1               59\r
53 \r
54 #define SPR_SPRG0_RW_S  272\r
55 #define SPR_SPRG1_RW_S  273\r
56 \r
57 #define SPR_DEAR                61\r
58 #define SPR_ESR         62\r
59 #define SPR_TSR         336\r
60 #define SPR_SPEFSCR             512\r
61 #define SPR_MCSR                572\r
62 \r
63 #define SPR_MAS0      624\r
64 #define SPR_MAS1      625\r
65 #define SPR_MAS2      626\r
66 #define SPR_MAS3      627\r
67 #define SPR_MAS4      628\r
68 #define SPR_MAS6      630\r
69 \r
70 \r
71 #define ESR_PTR         (1<<(38-32))\r
72 \r
73 #define SPR_XER         1\r
74 #define SPR_CTR         9\r
75 \r
76 #define INTC_SSCIR7 0xFFF48027\r
77 \r
78 /* MAS bits */\r
79 #define MAS1_TSIZE_4K                   (1<<8)\r
80 #define MAS1_TSIZE_16K                  (2<<8)\r
81 #define MAS1_TSIZE_64K                  (3<<8)\r
82 #define MAS1_TSIZE_256K                 (4<<8)\r
83 #define MAS1_TSIZE_1M                   (5<<8)\r
84 #define MAS1_TSIZE_4M                   (6<<8)\r
85 #define MAS1_TSIZE_16M                  (7<<8)\r
86 #define MAS1_TSIZE_64M                  (8<<8)\r
87 #define MAS1_TSIZE_256M                 (8<<9)\r
88 \r
89 #define MAS2_VLE        (1<<5)\r
90 #define MAS2_W          (1<<4)\r
91 #define MAS2_I          (1<<3)\r
92 #define MAS2_M          (1<<2)\r
93 #define MAS2_G          (1<<1)\r
94 #define MAS2_E          (1<<0)\r
95 \r
96 #define MAS3_UX         (1<<5)\r
97 #define MAS3_SX         (1<<4)\r
98 #define MAS3_UW         (1<<3)\r
99 #define MAS3_SW         (1<<2)\r
100 #define MAS3_UR         (1<<1)\r
101 #define MAS3_SR         (1<<0)\r
102 \r
103 #define MAS3_FULL_ACCESS (MAS3_UX+MAS3_UW+MAS3_UR+MAS3_SX+MAS3_SW+MAS3_SR)\r
104 \r
105 \r
106 #if defined(_ASSEMBLER_)\r
107 /*\r
108  * PPC vs VLE assembler:\r
109  *   Most PPC assembler instructions can be pre-processed to VLE assembler.\r
110  *   I can't find any way to load a 32-bit immediate with just search/replace (number\r
111  *   of operators differ for addis and e_add2is )\r
112  *   Thats why there are different load macros below.\r
113  *\r
114  */\r
115 \r
116 #if defined(CFG_VLE)\r
117 #define LOAD_IND_32( reg, addr) \\r
118         e_lis    reg, addr@ha;     \\r
119     e_lwz    reg, addr@l(reg)\r
120 \r
121 #define LOAD_ADDR_32(reg, addr ) \\r
122     e_lis       reg, addr@ha; \\r
123     e_add16i    reg, reg, addr@l\r
124 \r
125 #else\r
126 #define LOAD_IND_32( reg, addr) \\r
127     lis    reg, addr@ha;     \\r
128       lwz    reg, addr@l(reg)\r
129 \r
130 #define LOAD_ADDR_32(reg, addr ) \\r
131         addis   reg, 0, addr@ha; \\r
132         addi    reg, reg, addr@l\r
133 \r
134 #endif\r
135 \r
136 \r
137 \r
138 /* GPRS */\r
139 #define sp          1\r
140 #define r0      0\r
141 #define r1      1\r
142 #define r2      2\r
143 #define r3      3\r
144 #define r4      4\r
145 #define r5      5\r
146 #define r6      6\r
147 #define r7      7\r
148 #define r8          8\r
149 #define r9          9\r
150 #define r10         10\r
151 #define r11     11\r
152 #define r12     12\r
153 #define r13     13\r
154 #define r14     14\r
155 #define r15     15\r
156 #define r16     16\r
157 #define r17     17\r
158 #define r18     18\r
159 #define r19     19\r
160 #define r20     20\r
161 #define r21     21\r
162 #define r22     22\r
163 #define r23     23\r
164 #define r24     24\r
165 #define r25     25\r
166 #define r26     26\r
167 #define r27     27\r
168 #define r28     28\r
169 #define r29     29\r
170 #define r30     30\r
171 #define r31     31\r
172 \r
173 \r
174 #if defined(CFG_VLE)\r
175 \r
176 #define lis             e_lis\r
177 #define li              e_li\r
178 #define lwz         e_lwz\r
179 #define lbz             e_lbz\r
180 #define lbzu    e_lbzu\r
181 #define stwu    e_stwu\r
182 #define stw             e_stw\r
183 #define stb             e_stb\r
184 #define stbu    e_stbu\r
185 #define b               e_b\r
186 #define bne             e_bne\r
187 //#define addi  e_addi          /* true ?*/\r
188 #define addi    e_add16i                /* true ?*/\r
189 //#define addis e_add16i\r
190 #define subi    e_subi          /* true ?*/\r
191 #define blr             se_blr\r
192 #define rfi             se_rfi\r
193 #define stb             e_stb\r
194 #define cmplwi  e_cmpl16i\r
195 #define cmpwi   se_cmpi\r
196 #define ori             e_ori\r
197 #define beq             e_beq\r
198 //#define bne-  e_bne-\r
199 #define bne             e_bne\r
200 #define bgt             e_bgt\r
201 #define extrwi  e_extrwi\r
202 #define blrl    se_blrl\r
203 #define stmw    e_stmw\r
204 #define bdnz    e_bdnz\r
205 #define bl              e_bl\r
206 #define bc              e_bc\r
207 #define mr              se_mr\r
208 #endif\r
209 \r
210 #endif /* _ASSEMBLER_ */\r
211 \r
212 #endif /*PPC_ASM_H_*/\r