Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/m32c/m32c.abi @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 04ced10e8804 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 Target Definitions for R8C/M16C/M32C | |
2 Copyright (C) 2005, 2007 | |
3 Free Software Foundation, Inc. | |
4 Contributed by Red Hat. | |
5 | |
6 This file is part of GCC. | |
7 | |
8 GCC is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published | |
10 by the Free Software Foundation; either version 3, or (at your | |
11 option) any later version. | |
12 | |
13 GCC is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
16 License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GCC; see the file COPYING3. If not see | |
20 <http://www.gnu.org/licenses/>. | |
21 | |
22 | |
23 These are just some random notes I used during development of this | |
24 port. Please don't consider these to be "official" specifications, | |
25 just additional information to help make the code easier to | |
26 understand. | |
27 | |
28 | |
29 Frame | |
30 ===== | |
31 | |
32 +-------------------- | |
33 | incoming args | |
34 +-------------------- | |
35 | return Address | |
36 osp -> +-------------------- | |
37 | saved fp | |
38 fp -> +-------------------- | |
39 | local data | |
40 +-------------------- | |
41 | saved regs | |
42 +-------------------- | |
43 | outgoing args (opt) | |
44 sp -> +-------------------- | |
45 | |
46 Argument Passing | |
47 ================ | |
48 | |
49 r8c, m16c | |
50 --------- | |
51 | |
52 First arg may be passed in r1l or r1 if it (1) fits (QImode or | |
53 HImode), (2) is named, and (3) is an integer or pointer type (no | |
54 structs, floats, etc). Otherwise, it's passed on the stack. | |
55 | |
56 Second arg may be passed in r2, same restrictions (but not QImode), | |
57 even if the first arg is passed on the stack. | |
58 | |
59 Third and further args are passed on the stack. No padding is used, | |
60 stack "alignment" is 8 bits. | |
61 | |
62 m32cm, m32c | |
63 ----------- | |
64 First arg may be passed in r0l or r0, same restrictions as above. | |
65 | |
66 Second and further args are passed on the stack. Padding is used | |
67 after QImode parameters (i.e. lower-addressed byte is the value, | |
68 higher-addressed byte is the padding), stack "alignment" is 16 bits. | |
69 | |
70 | |
71 Return Value | |
72 ============ | |
73 | |
74 r8c, m16c | |
75 --------- | |
76 | |
77 QImode in r0l | |
78 HImode in r0 | |
79 near pointer in r0 | |
80 (desired) | |
81 SImode in r2r0 | |
82 far pointer in r2r0 | |
83 (actual) | |
84 Anything bigger than 16 bits is returned in memory, at mem0 (mem0 | |
85 through mem15 are provided by libgcc.a) | |
86 | |
87 Aggregate values (regardless of size) are returned by pushing a | |
88 pointer to a temporary area on the stack after the args are pushed. | |
89 The function fills in this area with the value. Note that this | |
90 pointer on the stack does not affect how register arguments, if any, | |
91 are configured. | |
92 | |
93 m32cm, m32c | |
94 ----------- | |
95 Same. | |
96 | |
97 | |
98 Registers Preserved Across Calls | |
99 ================================ | |
100 | |
101 r8c, m16c | |
102 --------- | |
103 sb, fb, sp (i.e. nearly all registers are call clobbered) | |
104 | |
105 m32cm, m32c | |
106 ----------- | |
107 r1, r2, r3, a0, a1, sb, fb, sp | |
108 (except when used for return values) | |
109 | |
110 | |
111 Interrupt Handlers | |
112 ================== | |
113 | |
114 The stack frame is slightly different for interrupt handlers, because | |
115 (1) we don't have a usable parent frame, and (2) we have to use | |
116 special instructions to return and thus must save/restore everything | |
117 differently. | |
118 | |
119 +-------------------- | |
120 | program state | |
121 osp -> +-------------------- | |
122 | return address | |
123 +-------------------- | |
124 | saved r0..fp (pushm) | |
125 fp -> +-------------------- | |
126 | local data | |
127 +-------------------- | |
128 | saved regs mem0..mem15 | |
129 +-------------------- | |
130 | outgoing args (opt) | |
131 sp -> +-------------------- | |
132 |