Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:stefan:20071126201403

Diff

Diff from 1.4 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/pcc/pcc/arch/nova/code.c

Annotated File View

stefan
1.4
1 /*      $Id: code.c,v 1.4 2007/11/26 20:14:03 stefan Exp $      */
ragge
1.1
2 /*
3  * Copyright (c) 2006 Anders Magnusson (ragge@ludd.luth.se).
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. The name of the author may not be used to endorse or promote products
15  *    derived from this software without specific prior written permission
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29
30 # include "pass1.h"
31
32 /*
33  * cause the alignment to become a multiple of n
34  * never called for text segment.
35  */
36 void
37 defalign(int n)
38 {
39         /* alignment are always correct */
40 }
41
42 /*
43  * define the current location as the name p->sname
44  * never called for text segment.
45  */
46 void
47 defnam(struct symtab *p)
48 {
49         char *c = p->sname;
50
51 #ifdef GCC_COMPAT
52         c = gcc_findname(p);
53 #endif
54         if (p->sclass == EXTDEF)
55                 printf("        .globl %s\n"c);
56         printf("%s:\n"c);
57 }
58
59
60 /*
61  * code for the end of a function
62  * deals with struct return here
63  */
64 void
65 efcode()
66 {
67         NODE *p, *q;
68         int sz;
69
70         if (cftnsp->stype != STRTY+FTN && cftnsp->stype != UNIONTY+FTN)
71                 return;
72 cerror("efcode");
73         /* address of return struct is in eax */
74         /* create a call to memcpy() */
75         /* will get the result in eax */
76         p = block(REGNILNILCHAR+PTR0MKSUE(CHAR+PTR));
77 //      p->n_rval = EAX;
78         q = block(OREGNILNILCHAR+PTR0MKSUE(CHAR+PTR));
79 //      q->n_rval = EBP;
80         q->n_lval = 8/* return buffer offset */
81         p = block(CMqpINT0MKSUE(INT));
82         sz = (tsize(STRTYcftnsp->sdfcftnsp->ssue)+SZCHAR-1)/SZCHAR;
83         p = block(CMpbcon(sz), INT0MKSUE(INT));
84         p->n_right->n_name = "";
85         p = block(CALLbcon(0), pCHAR+PTR0MKSUE(CHAR+PTR));
86         p->n_left->n_name = "memcpy";
87         p = clocal(p);
88         send_passt(IP_NODEp);
89 }
90
91 /*
92  * code for the beginning of a function; a is an array of
93  * indices in symtab for the arguments; n is the number
94  */
95 void
96 bfcode(struct symtab **aint n)
97 {
98         int i;
99
100         if (cftnsp->stype != STRTY+FTN && cftnsp->stype != UNIONTY+FTN)
101                 return;
102 cerror("bfcode");
103         /* Function returns struct, adjust arg offset */
104         for (i = 0i < ni++)
105                 a[i]->soffset += SZPOINT(INT);
106 }
107
108
109 /*
110  * by now, the automatics and register variables are allocated
111  */
112 void
113 bccode()
114 {
115         SETOFF(autooffSZINT);
116 }
117
118 /* called just before final exit */
119 /* flag is 1 if errors, 0 if none */
120 void
121 ejobcode(int flag )
122 {
123 }
124
125 void
126 bjobcode()
127 {
128 }
129
130 /*
131  * Print character t at position i in one string, until t == -1.
132  * Locctr & label is already defined.
133  */
134 void
135 bycode(int tint i)
136 {
137         static  int     lastoctal = 0;
138
139         /* put byte i+1 in a string */
140
141         if (t < 0) {
142                 if (i != 0)
143                         puts("\"");
144         } else {
145                 if (i == 0)
146                         printf("\t.ascii \"");
147                 if (t == '\\' || t == '"') {
148                         lastoctal = 0;
149                         putchar('\\');
150                         putchar(t);
151                 } else if (t < 040 || t >= 0177) {
152                         lastoctal++;
153                         printf("\\%o",t);
154                 } else if (lastoctal && '0' <= t && t <= '9') {
155                         lastoctal = 0;
156                         printf("\"\n\t.ascii \"%c"t);
157                 } else {        
158                         lastoctal = 0;
159                         putchar(t);
160                 }
161         }
162 }
163
164 /*
165  * return the alignment of field of type t
166  */
167 int
168 fldal(unsigned int t)
169 {
170         uerror("illegal field type");
171         return(ALINT);
172 }
173
174 /* fix up type of field p */
175 void
176 fldty(struct symtab *p)
177 {
178 }
179
stefan
1.3
180 /*
ragge
1.1
181  * XXX - fix genswitch.
182  */
stefan
1.3
183 int
184 mygenswitch(int numTWORD typestruct swents **pint n)
ragge
1.1
185 {
stefan
1.3
186         return 0;
ragge
1.1
187 }
ragge
1.2
188 /*
189  * Called with a function call with arguments as argument.
190  * This is done early in buildtree() and only done once.
191  */
192 NODE *
193 funcode(NODE *p)
194 {
195         return p;
196 }
FishEye: Open Source License registered to PCC.
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-12-20 20:28 +0100