xref: /netbsd/external/bsd/pcc/dist/pcc/arch/sparc64/order.c (revision 3eb51a41)
1 /*
2  * Copyright (c) 2008 David Crawshaw <david@zentus.com>
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #include "pass2.h"
18 
19 /* is it legal to make an OREG or NAME entry which has an
20  * offset of off, (from a register of r), if the
21  * resulting thing had type t */
22 int
23 notoff(TWORD t, int r, CONSZ off, char *cp)
24 {
25 	return !SIMM13(off);
26 }
27 
28 /*
29  * Turn a UMUL-referenced node into OREG.
30  */
31 void
32 offstar(NODE *p, int shape)
33 {
34 	if (x2debug)
35 		printf("offstar(%p)\n", p);
36 
37 	if (p->n_op == PLUS || p->n_op == MINUS) {
38 		if (p->n_right->n_op == ICON && SIMM13(p->n_right->n_lval)) {
39 			if (isreg(p->n_left) == 0)
40 				(void)geninsn(p->n_left, INAREG);
41 			/* Converted in ormake() */
42 			return;
43 		}
44 	}
45 	(void)geninsn(p, INAREG);
46 }
47 
48 void
49 myormake(NODE *q)
50 {
51 }
52 
53 int
54 shumul(NODE *p, int shape)
55 {
56 	if (shape & SOREG)
57 		return SROREG;
58 	return SRNOPE;
59 }
60 
61 int
62 setbin(NODE *p)
63 {
64 	return 0;
65 }
66 
67 int
68 setasg(NODE *p, int cookie)
69 {
70 	return 0;
71 }
72 
73 int
74 setuni(NODE *p, int cookie)
75 {
76 	return 0;
77 }
78 
79 struct rspecial *
80 nspecial(struct optab *q)
81 {
82 	switch (q->op) {
83 	case STASG: {
84 		static struct rspecial s[] = {
85 			{ NEVER, O0 },
86 			{ NRIGHT, O1 },
87 			{ NEVER, O2 },
88 			{ 0 }
89 		};
90 		return s;
91 	}
92 	}
93 
94 	comperr("unknown nspecial %d: %s", q - table, q->cstring);
95 	return 0; /* XXX */
96 }
97 
98 int
99 setorder(NODE *p)
100 {
101 	return 0;
102 }
103 
104 int *
105 livecall(NODE *p)
106 {
107 	static int ret[] = { O0, O1, O2, O3, O4, O5, O6, O7, -1 };
108 	return ret;
109 }
110 
111 int
112 acceptable(struct optab *op)
113 {
114 	return 1;
115 }
116