LEFT | RIGHT |
1 // Inferno utils/8c/txt.c | 1 // Inferno utils/8c/txt.c |
2 // http://code.google.com/p/inferno-os/source/browse/utils/8c/txt.c | 2 // http://code.google.com/p/inferno-os/source/browse/utils/8c/txt.c |
3 // | 3 // |
4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. | 4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. |
5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) | 5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) |
6 // Portions Copyright © 1997-1999 Vita Nuova Limited | 6 // Portions Copyright © 1997-1999 Vita Nuova Limited |
7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuov
a.com) | 7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuov
a.com) |
8 // Portions Copyright © 2004,2006 Bruce Ellis | 8 // Portions Copyright © 2004,2006 Bruce Ellis |
9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) | 9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) |
10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others | 10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 for(i=0; i<NHASH; i++) | 139 for(i=0; i<NHASH; i++) |
140 for(s = hash[i]; s != S; s = s->link) { | 140 for(s = hash[i]; s != S; s = s->link) { |
141 if(s->type == T) | 141 if(s->type == T) |
142 continue; | 142 continue; |
143 if(s->type->width == 0) | 143 if(s->type->width == 0) |
144 continue; | 144 continue; |
145 if(s->class != CGLOBL && s->class != CSTATIC) | 145 if(s->class != CGLOBL && s->class != CSTATIC) |
146 continue; | 146 continue; |
147 if(s->type == types[TENUM]) | 147 if(s->type == types[TENUM]) |
148 continue; | 148 continue; |
149 textflag = s->dataflag; | |
150 gpseudo(AGLOBL, s, nodconst(s->type->width)); | 149 gpseudo(AGLOBL, s, nodconst(s->type->width)); |
151 textflag = 0; | |
152 } | 150 } |
153 nextpc(); | 151 nextpc(); |
154 p->as = AEND; | 152 p->as = AEND; |
155 outcode(); | 153 outcode(); |
156 } | 154 } |
157 | 155 |
158 void | 156 void |
159 nextpc(void) | 157 nextpc(void) |
160 { | 158 { |
161 | 159 |
(...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1374 } | 1372 } |
1375 | 1373 |
1376 void | 1374 void |
1377 gpseudo(int a, Sym *s, Node *n) | 1375 gpseudo(int a, Sym *s, Node *n) |
1378 { | 1376 { |
1379 | 1377 |
1380 nextpc(); | 1378 nextpc(); |
1381 p->as = a; | 1379 p->as = a; |
1382 p->from.type = D_EXTERN; | 1380 p->from.type = D_EXTERN; |
1383 p->from.sym = s; | 1381 p->from.sym = s; |
1384 » p->from.scale = textflag; | 1382 |
1385 » textflag = 0; | 1383 » switch(a) { |
| 1384 » case ATEXT: |
| 1385 » » p->from.scale = textflag; |
| 1386 » » textflag = 0; |
| 1387 » » break; |
| 1388 » case AGLOBL: |
| 1389 » » p->from.scale = s->dataflag; |
| 1390 » » break; |
| 1391 » } |
1386 | 1392 |
1387 if(s->class == CSTATIC) | 1393 if(s->class == CSTATIC) |
1388 p->from.type = D_STATIC; | 1394 p->from.type = D_STATIC; |
1389 naddr(n, &p->to); | 1395 naddr(n, &p->to); |
1390 if(a == ADATA || a == AGLOBL) | 1396 if(a == ADATA || a == AGLOBL) |
1391 pc--; | 1397 pc--; |
1392 } | 1398 } |
1393 | 1399 |
1394 void | 1400 void |
1395 gprefetch(Node *n) | 1401 gprefetch(Node *n) |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1474 BFLOAT, /*[TFLOAT]*/ | 1480 BFLOAT, /*[TFLOAT]*/ |
1475 BDOUBLE, /*[TDOUBLE]*/ | 1481 BDOUBLE, /*[TDOUBLE]*/ |
1476 BLONG|BULONG|BIND, /*[TIND]*/ | 1482 BLONG|BULONG|BIND, /*[TIND]*/ |
1477 0, /*[TFUNC]*/ | 1483 0, /*[TFUNC]*/ |
1478 0, /*[TARRAY]*/ | 1484 0, /*[TARRAY]*/ |
1479 0, /*[TVOID]*/ | 1485 0, /*[TVOID]*/ |
1480 BSTRUCT, /*[TSTRUCT]*/ | 1486 BSTRUCT, /*[TSTRUCT]*/ |
1481 BUNION, /*[TUNION]*/ | 1487 BUNION, /*[TUNION]*/ |
1482 0, /*[TENUM]*/ | 1488 0, /*[TENUM]*/ |
1483 }; | 1489 }; |
LEFT | RIGHT |