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