]> rtime.felk.cvut.cz Git - arc.git/blob - include/ppc/asm_ppc.h
54cb6747f94e61970e5c062927f2c7c9d966e085
[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 #if defined(_ASSEMBLER_)\r
79 /*\r
80  * PPC vs VLE assembler:\r
81  *   Most PPC assembler instructions can be pre-processed to VLE assembler.\r
82  *   I can't find any way to load a 32-bit immediate with just search/replace (number\r
83  *   of operators differ for addis and e_add2is )\r
84  *   Thats why there are different load macros below.\r
85  *\r
86  */\r
87 \r
88 #if defined(CFG_VLE)\r
89 #define LOAD_IND_32( reg, addr) \\r
90         e_lis    reg, addr@ha;     \\r
91     e_lwz    reg, addr@l(reg)\r
92 \r
93 #define LOAD_ADDR_32(reg, addr ) \\r
94     e_lis       reg, addr@ha; \\r
95     e_add16i    reg, reg, addr@l\r
96 \r
97 #else\r
98 #define LOAD_IND_32( reg, addr) \\r
99     lis    reg, addr@ha;     \\r
100       lwz    reg, addr@l(reg)\r
101 \r
102 #define LOAD_ADDR_32(reg, addr ) \\r
103         addis   reg, 0, addr@ha; \\r
104         addi    reg, reg, addr@l\r
105 \r
106 #endif\r
107 \r
108 \r
109 \r
110 /* GPRS */\r
111 #define sp          1\r
112 #define r0      0\r
113 #define r1      1\r
114 #define r2      2\r
115 #define r3      3\r
116 #define r4      4\r
117 #define r5      5\r
118 #define r6      6\r
119 #define r7      7\r
120 #define r8          8\r
121 #define r9          9\r
122 #define r10         10\r
123 #define r11     11\r
124 #define r12     12\r
125 #define r13     13\r
126 #define r14     14\r
127 #define r15     15\r
128 #define r16     16\r
129 #define r17     17\r
130 #define r18     18\r
131 #define r19     19\r
132 #define r20     20\r
133 #define r21     21\r
134 #define r22     22\r
135 #define r23     23\r
136 #define r24     24\r
137 #define r25     25\r
138 #define r26     26\r
139 #define r27     27\r
140 #define r28     28\r
141 #define r29     29\r
142 #define r30     30\r
143 #define r31     31\r
144 \r
145 \r
146 #if defined(CFG_VLE)\r
147 \r
148 #define lis             e_lis\r
149 #define li              e_li\r
150 #define lwz         e_lwz\r
151 #define lbz             e_lbz\r
152 #define lbzu    e_lbzu\r
153 #define stwu    e_stwu\r
154 #define stw             e_stw\r
155 #define stb             e_stb\r
156 #define stbu    e_stbu\r
157 #define b               e_b\r
158 #define bne             e_bne\r
159 //#define addi  e_addi          /* true ?*/\r
160 #define addi    e_add16i                /* true ?*/\r
161 //#define addis e_add16i\r
162 #define subi    e_subi          /* true ?*/\r
163 #define blr             se_blr\r
164 #define rfi             se_rfi\r
165 #define stb             e_stb\r
166 #define cmplwi  e_cmpl16i\r
167 #define cmpwi   se_cmpi\r
168 #define ori             e_ori\r
169 #define beq             e_beq\r
170 //#define bne-  e_bne-\r
171 #define bne             e_bne\r
172 #define bgt             e_bgt\r
173 #define extrwi  e_extrwi\r
174 #define blrl    se_blrl\r
175 #define stmw    e_stmw\r
176 #define bdnz    e_bdnz\r
177 #define bl              e_bl\r
178 #define bc              e_bc\r
179 #define mr              se_mr\r
180 #endif\r
181 \r
182 #endif /* _ASSEMBLER_ */\r
183 \r
184 #endif /*PPC_ASM_H_*/\r