checked in for karels; u.u_exdata no longer exists
[unix-history] / usr / src / sys / vax / inline / langpats.c
CommitLineData
2a48bcf5 1#ifndef lint
5f9171ac 2static char sccsid[] = "@(#)langpats.c 1.4 (Berkeley) %G%";
2a48bcf5
SL
3#endif
4
5/*
6 * In-line assembly code expander for
3845fbd6 7 * the kernel. This code is based on
2a48bcf5
SL
8 * pc2 and the old asm.sed script.
9 */
10#include <stdio.h>
11#include <ctype.h>
12
13/*
14 * The hash table must be at least twice as big as the number
15 * of patterns, preferably bigger. It must also be a prime number
16 */
17#define HSHSIZ 139
18
19/*
20 * Pattern table.
21 */
22struct pats {
23 char *name;
24 char *replace;
25} ptab[] = {
3845fbd6 26 { "_spl0\n",
2a48bcf5
SL
27" mfpr $18,r0\n\
28 mtpr $0,$18\n" },
29
3845fbd6 30 { "_spl1\n",
2a48bcf5
SL
31" mfpr $18,r0\n\
32 mtpr $1,$18\n" },
33
3845fbd6 34 { "_splsoftclock\n",
2a48bcf5
SL
35" mfpr $18,r0\n\
36 mtpr $0x8,$18\n" },
37
3845fbd6 38 { "_splnet\n",
2a48bcf5
SL
39" mfpr $18,r0\n\
40 mtpr $0xc,$18\n" },
41
3845fbd6 42 { "_splimp\n",
2a48bcf5
SL
43" mfpr $18,r0\n\
44 mtpr $0x16,$18\n" },
45
3845fbd6 46 { "_spl4\n",
2a48bcf5
SL
47" mfpr $18,r0\n\
48 mtpr $0x14,$18\n" },
49
3845fbd6 50 { "_splbio\n",
2a48bcf5
SL
51" mfpr $18,r0\n\
52 mtpr $0x15,$18\n" },
53
3845fbd6 54 { "_spltty\n",
2a48bcf5
SL
55" mfpr $18,r0\n\
56 mtpr $0x15,$18\n" },
2a48bcf5 57
3845fbd6 58 { "_spl5\n",
2a48bcf5
SL
59" mfpr $18,r0\n\
60 mtpr $0x15,$18\n" },
61
3845fbd6 62 { "_splclock\n",
2a48bcf5
SL
63" mfpr $18,r0\n\
64 mtpr $0x18,$18\n" },
65
3845fbd6 66 { "_spl6\n",
2a48bcf5
SL
67" mfpr $18,r0\n\
68 mtpr $0x18,$18\n" },
69
3845fbd6 70 { "_spl7\n",
2a48bcf5
SL
71" mfpr $18,r0\n\
72 mtpr $0x1f,$18\n" },
73
6a1722ed
MK
74 { "_splhigh\n",
75" mfpr $18,r0\n\
76 mtpr $0x1f,$18\n" },
77
3845fbd6 78 { "_splx\n",
2a48bcf5
SL
79" mfpr $18,r0\n\
80 mtpr (sp)+,$18\n" },
81
3845fbd6 82 { "_mfpr\n",
2a48bcf5
SL
83" mfpr (sp)+,r0\n" },
84
3845fbd6 85 { "_mtpr\n",
2a48bcf5
SL
86" mtpr 4(sp),(sp)\n\
87 addl2 $8,sp\n" },
88
3845fbd6 89 { "_setsoftclock\n",
2a48bcf5
SL
90" mtpr $0x8,$0x14\n" },
91
3845fbd6 92 { "_resume\n",
2a48bcf5
SL
93" ashl $9,(sp)+,r0 \n\
94 movpsl -(sp) \n\
95 jsb _Resume\n" },
96
3845fbd6 97 { "_bcopy\n",
2a48bcf5
SL
98" movc3 8(sp),*(sp),*4(sp)\n\
99 addl2 $12,sp\n" },
100
3845fbd6 101 { "_ovbcopy\n",
2a48bcf5
SL
102" movc3 8(sp),*(sp),*4(sp)\n\
103 addl2 $12,sp\n" },
104
3845fbd6 105 { "_bzero\n",
2a48bcf5
SL
106" movc5 $0,(r0),$0,4(sp),*(sp)\n\
107 addl2 $8,sp\n" },
108
3845fbd6 109 { "_bcmp\n",
2a48bcf5
SL
110" popr $0x7\n\
111 cmpc3 r2,(r0),(r1)\n" },
112
3845fbd6 113 { "_strncmp\n",
2a48bcf5
SL
114" cmpc3 8(sp),*(sp),*4(sp)\n\
115 addl2 $12,sp\n" },
116
3845fbd6 117 { "_blkclr\n",
2a48bcf5
SL
118" movl (sp)+,r3\n\
119 jbr 2f\n\
1201:\n\
121 subl2 r0,(sp)\n\
122 movc5 $0,(r3),$0,r0,(r3)\n\
1232:\n\
124 movzwl $65535,r0\n\
125 cmpl (sp),r0\n\
126 jgtr 1b\n\
127 movl (sp)+,r0\n\
128 movc5 $0,(r3),$0,r0,(r3)\n" },
129
3845fbd6 130 { "_strlen\n",
2a48bcf5
SL
131" movl (sp),r1\n\
1321:\n\
133 locc $0,$65535,(r1)\n\
134 jeql 1b\n\
135 subl3 (sp)+,r1,r0\n" },
136
3845fbd6 137 { "_scanc\n",
2a48bcf5
SL
138" popr $0xf\n\
139 scanc r0,(r1),(r2),r3\n" },
140
5f9171ac
KM
141 { "_skpc\n",
142" popr $0x7\n\
143 skpc r0,r1,(r2)\n" },
144
3845fbd6 145 { "_copyin\n",
2a48bcf5
SL
146" jsb _Copyin\n\
147 addl2 $12,sp\n" },
148
3845fbd6 149 { "_copyout\n",
2a48bcf5
SL
150" jsb _Copyout\n\
151 addl2 $12,sp\n" },
152
3845fbd6 153 { "_fubyte\n",
2a48bcf5
SL
154" movl (sp)+,r0\n\
155 jsb _Fubyte\n" },
156
3845fbd6 157 { "_fuibyte\n",
2a48bcf5
SL
158" movl (sp)+,r0\n\
159 jsb _Fubyte\n" },
160
3845fbd6 161 { "_fuword\n",
2a48bcf5
SL
162" movl (sp)+,r0\n\
163 jsb _Fuword\n" },
164
3845fbd6 165 { "_fuiword\n",
2a48bcf5
SL
166" movl (sp)+,r0\n\
167 jsb _Fuword\n" },
168
3845fbd6 169 { "_subyte\n",
2a48bcf5
SL
170" movl (sp)+,r0\n\
171 movl (sp)+,r1\n\
172 jsb _Subyte\n" },
173
3845fbd6 174 { "_suibyte\n",
2a48bcf5
SL
175" movl (sp)+,r0\n\
176 movl (sp)+,r1\n\
177 jsb _Subyte\n" },
178
3845fbd6 179 { "_suword\n",
2a48bcf5
SL
180" movl (sp)+,r0\n\
181 movl (sp)+,r1\n\
182 jsb _Suword\n" },
183
3845fbd6 184 { "_suiword\n",
2a48bcf5
SL
185" movl (sp)+,r0\n\
186 movl (sp)+,r1\n\
187 jsb _Suword\n" },
188
3845fbd6 189 { "_setrq\n",
2a48bcf5
SL
190" movl (sp)+,r0 \n\
191 jsb _Setrq\n" },
192
3845fbd6 193 { "_remrq\n",
2a48bcf5
SL
194" movl (sp)+,r0 \n\
195 jsb _Remrq\n" },
196
3845fbd6 197 { "_swtch\n",
2a48bcf5
SL
198" movpsl -(sp)\n\
199 jsb _Swtch\n" },
200
3845fbd6 201 { "_setjmp\n",
2a48bcf5
SL
202" movl (sp)+,r0 \n\
203 jsb _Setjmp\n" },
204
3845fbd6 205 { "_longjmp\n",
2a48bcf5
SL
206" movl (sp)+,r0 \n\
207 jsb _Longjmp\n" },
208
3845fbd6 209 { "_ffs\n",
2a48bcf5
SL
210" movl (sp)+,r1\n\
211 ffs $0,$32,r1,r0 \n\
212 bneq 1f \n\
213 mnegl $1,r0 \n\
2141: \n\
215 incl r0\n" },
216
3845fbd6 217 { "_htons\n",
2a48bcf5
SL
218" rotl $8,(sp),r0\n\
219 movb 1(sp),r0\n\
220 movzwl r0,r0\n\
221 addl2 $4,sp\n" },
222
3845fbd6 223 { "_ntohs\n",
2a48bcf5
SL
224" rotl $8,(sp),r0\n\
225 movb 1(sp),r0\n\
226 movzwl r0,r0\n\
227 addl2 $4,sp\n" },
228
3845fbd6 229 { "_htonl\n",
2a48bcf5
SL
230" rotl $-8,(sp),r0\n\
231 insv r0,$16,$8,r0\n\
232 movb 3(sp),r0\n\
233 addl2 $4,sp\n" },
234
3845fbd6 235 { "_ntohl\n",
2a48bcf5
SL
236" rotl $-8,(sp),r0\n\
237 insv r0,$16,$8,r0\n\
238 movb 3(sp),r0\n\
239 addl2 $4,sp\n" },
240
3845fbd6 241 { "__insque\n",
2a48bcf5
SL
242" insque *(sp)+,*(sp)+\n" },
243
3845fbd6 244 { "__remque\n",
2a48bcf5
SL
245" remque *(sp)+,r0\n" },
246
3845fbd6 247 { "__queue\n",
2a48bcf5
SL
248" movl (sp)+,r0\n\
249 movl (sp)+,r1\n\
250 insque r1,*4(r0)\n" },
251
3845fbd6 252 { "__dequeue\n",
2a48bcf5
SL
253" movl (sp)+,r0\n\
254 remque *(r0),r0\n" },
255};
256struct pats *htbl[HSHSIZ];
257
258#define HASH(cp, hp) {\
259 hash = 0; rehash = 1; ccp = cp; \
260 do { \
261 hash *= (int)*ccp++; \
262 } while (*ccp && *ccp != '\n'); \
263 hash >>= 7; hash %= HSHSIZ; hp = &htbl[hash]; size = ccp - cp + 1; \
264}
265
266#define REHASH(hp) {\
267 hp += rehash; rehash += 2; \
268 if (hp >= &htbl[HSHSIZ]) \
269 hp -= HSHSIZ; \
270}
271
272main(argc, argv)
273 char *argv[];
274{
275 register struct pats *pp, **hp;
276 register char *cp, *ccp, *lp;
277 register int hash, rehash, size;
278 char line[BUFSIZ];
279 extern char *index();
280
281 if (argc > 1)
282 freopen(argv[1], "r", stdin);
283 if (argc > 2)
284 freopen(argv[2], "w", stdout);
285 /*
286 * Set up the hash table.
287 */
288 for (pp = ptab; pp < &ptab[sizeof (ptab)/sizeof (ptab[0])]; pp++) {
289 HASH(pp->name, hp);
290 while (*hp)
291 REHASH(hp);
292 *hp = pp;
293 }
294 /*
295 * Check each line and replace as appropriate.
296 */
297 while (fgets(line, BUFSIZ, stdin)) {
298 lp = index(line, ':');
299 for (cp = (lp != NULL) ? ++lp : line; *cp == '\t'; )
300 cp++;
301#define CALLS "calls\t"
302 if (strncmp(cp, CALLS, sizeof (CALLS) - 1) != 0) {
303 fputs(line, stdout);
304 continue;
305 }
3845fbd6
SL
306 for (cp += sizeof (CALLS) - 1; *cp && *cp != ','; cp++)
307 ;
308 if (*cp != ',') {
309 fputs(line, stdout);
310 continue;
311 }
312 cp++;
2a48bcf5
SL
313 HASH(cp, hp);
314 while (*hp) {
315 if (strncmp((*hp)->name, cp, size) == NULL) {
316 if (lp != NULL) {
317 *lp++ = '\n';
318 *lp = '\0';
319 fputs(line, stdout);
320 }
321 fputs((*hp)->replace, stdout);
322 goto nextline;
323 }
324 REHASH(hp);
325 }
326 fputs(line, stdout);
327nextline:
328 ;
329 }
330 exit(0);
331}