Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:ragge:20140603201950

Diff

Diff from 1.6 to:

Annotations

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

Annotated File View

ragge
1.6
1 /*      $Id: order.c,v 1.6 2014/06/03 20:19:50 ragge 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 "pass2.h"
31
32 #include <string.h>
33
34 int canaddr(NODE *);
35
36 /* is it legal to make an OREG or NAME entry which has an
37  * offset of off, (from a register of r), if the
38  * resulting thing had type t */
39 int
40 notoff(TWORD tint rCONSZ offchar *cp)
41 {
ragge
1.6
42         if (r != 4 && r != 5)
ragge
1.1
43                 return 1/* can only index ac2 and ac3 */
ragge
1.6
44 #if 0
ragge
1.1
45         if (t == CHAR || t == UCHAR) {
46                 if (off < -256 || off > 254)
47                         return 1;
ragge
1.6
48         } else
49 #endif
50         if (off < -128 || off > 127)
ragge
1.1
51                 return 1;
52         return(0);  /* YES */
53 }
54
55 /*
56  * Turn a UMUL-referenced node into OREG.
57  * Be careful about register classes, this is a place where classes change.
58  */
59 void
60 offstar(NODE *pint shape)
61 {
62         NODE *r;
63
64         if (x2debug)
65                 printf("offstar(%p)\n"p);
66
ragge
1.6
67         if (regno(p) == 4 || regno(p) == 5)
ragge
1.1
68                 return/* Is already OREG */
69
70         r = p->n_right;
ragge
1.6
71         if ((p->n_op == PLUS || p->n_op == MINUS) && r->n_op == ICON) {
72                 if (!isreg(p->n_left) ||
73                     (regno(p->n_left) != 4 && regno(p->n_left) != 5))
74                         (void)geninsn(p->n_leftINBREG);
75                 return;
ragge
1.1
76         }
77         (void)geninsn(pINBREG);
78 }
79
80 /*
81  * Do the actual conversion of offstar-found OREGs into real OREGs.
82  */
83 void
84 myormake(NODE *q)
85 {
86         if (x2debug)
87                 printf("myormake(%p)\n"q);
88 }
89
90 /*
91  * Shape matches for UMUL.  Cooperates with offstar().
92  */
93 int
ragge
1.5
94 shumul(NODE *pint shape)
ragge
1.1
95 {
96
97         if (x2debug)
98                 printf("shumul(%p)\n"p);
99
100         /* Turns currently anything into OREG on x86 */
ragge
1.4
101         if (shape & SOREG)
102                 return SROREG;
103         return SRNOPE;
ragge
1.1
104 }
105
106 /*
107  * Rewrite operations on binary operators (like +, -, etc...).
108  * Called as a result of table lookup.
109  */
110 int
111 setbin(NODE *p)
112 {
113
114         if (x2debug)
115                 printf("setbin(%p)\n"p);
116         return 0;
117
118 }
119
120 /* setup for assignment operator */
121 int
122 setasg(NODE *pint cookie)
123 {
124         if (x2debug)
125                 printf("setasg(%p)\n"p);
126         return(0);
127 }
128
129 /* setup for unary operator */
130 int
131 setuni(NODE *pint cookie)
132 {
133         return 0;
134 }
135
136 /*
137  * Special handling of some instruction register allocation.
138  */
139 struct rspecial *
140 nspecial(struct optab *q)
141 {
142         comperr("nspecial entry %d"q - table);
143         return 0/* XXX gcc */
144 }
145
146 /*
147  * Set evaluation order of a binary node if it differs from default.
148  */
149 int
150 setorder(NODE *p)
151 {
152         return 0;
153 }
ragge
1.2
154 /*
155  * Set registers "live" at function calls (like arguments in registers).
156  * This is for liveness analysis of registers.
157  */
158 int *
159 livecall(NODE *p)
160 {
161         static int r[1] = { -1 }; /* Terminate with -1 */
162
163         return &r[0];
164 }
165
gmcgarry
1.3
166 /*
167  * Signal whether the instruction is acceptable for this target.
168  */
169 int
170 acceptable(struct optab *op)
171 {
172         return 1;
173 }
FishEye: Open Source License registered to PCC.
Your maintenance has expired. You can renew your license at http://www.atlassian.com/fisheye/renew
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-10-31 07:15 +0100