3 static int resvreg[nelem(reg)];
14 exfregoffset = FREGEXT;
28 typeswitch = typechlv;
32 memmove(typechlpv, typechlp, sizeof(typechlpv));
33 typechlpv[TVLONG] = 1;
34 typechlpv[TUVLONG] = 1;
38 zprog.from.type = D_NONE;
39 zprog.from.index = D_NONE;
41 zprog.to = zprog.from;
43 lregnode.op = OREGISTER;
44 lregnode.class = CEXREG;
45 lregnode.reg = REGTMP;
47 lregnode.addable = 11;
48 lregnode.type = types[TLONG];
51 qregnode.type = types[TVLONG];
53 constnode.op = OCONST;
54 constnode.class = CXXX;
55 constnode.complex = 0;
56 constnode.addable = 20;
57 constnode.type = types[TLONG];
59 vconstnode = constnode;
60 vconstnode.type = types[TVLONG];
62 fconstnode.op = OCONST;
63 fconstnode.class = CXXX;
64 fconstnode.complex = 0;
65 fconstnode.addable = 20;
66 fconstnode.type = types[TDOUBLE];
68 nodsafe = new(ONAME, Z, Z);
69 nodsafe->sym = slookup(".safe");
70 nodsafe->type = types[TINT];
71 nodsafe->etype = types[TINT]->etype;
72 nodsafe->class = CAUTO;
75 t = typ(TARRAY, types[TCHAR]);
76 symrathole = slookup(".rathole");
77 symrathole->class = CGLOBL;
80 nodrat = new(ONAME, Z, Z);
81 nodrat->sym = symrathole;
82 nodrat->type = types[TIND];
83 nodrat->etype = TVOID;
84 nodrat->class = CGLOBL;
88 nodret = new(ONAME, Z, Z);
89 nodret->sym = slookup(".ret");
90 nodret->type = types[TIND];
92 nodret->class = CPARAM;
93 nodret = new(OIND, nodret, Z);
99 memset(reg, 0, sizeof(reg));
100 for(i=0; i<nelem(reg); i++) {
102 if(i >= D_AX && i <= D_R15 && i != D_SP)
104 if(i >= D_X0 && i <= D_X7)
107 /* keep two external registers */
110 memmove(resvreg, reg, sizeof(resvreg));
120 for(i=D_AX; i<=D_R15; i++)
121 if(reg[i] && !resvreg[i])
122 diag(Z, "reg %R left allocated", i);
123 for(i=D_X0; i<=D_X7; i++)
124 if(reg[i] && !resvreg[i])
125 diag(Z, "reg %R left allocated", i);
128 symstring->type->width = nstring;
129 symrathole->type->width = nrathole;
130 for(i=0; i<NHASH; i++)
131 for(s = hash[i]; s != S; s = s->link) {
134 if(s->type->width == 0)
136 if(s->class != CGLOBL && s->class != CSTATIC)
138 if(s->type == types[TENUM])
140 gpseudo(AGLOBL, s, nodconst(s->type->width));
151 p = alloc(sizeof(*p));
165 gargs(Node *n, Node *tn1, Node *tn2)
168 Node fnxargs[20], *fnxp;
173 garg1(n, tn1, tn2, 0, &fnxp); /* compile fns to temps */
177 garg1(n, tn1, tn2, 1, &fnxp); /* compile normal args and temps */
188 for(i=D_AX; i<=D_R15; i++)
189 if(reg[i] == 0 && !resvreg[i])
195 garg1(Node *n, Node *tn1, Node *tn2, int f, Node **fnxp)
202 garg1(n->left, tn1, tn2, f, fnxp);
203 garg1(n->right, tn1, tn2, f, fnxp);
207 if(n->complex >= FNX) {
219 if(typesu[n->type->etype]) {
221 if(n->complex >= FNX) {
222 sugen(*fnxp, tn2, n->type->width);
225 sugen(n, tn2, n->type->width);
228 if(REGARG && curarg == 0 && typechlpv[n->type->etype]) {
230 if(n->complex >= FNX) {
243 if(n->complex >= FNX) {
254 nodgconst(vlong v, Type *t)
257 return nodconst((long)v);
258 vconstnode.vconst = v;
265 constnode.vconst = v;
272 fconstnode.fconst = d;
277 isreg(Node *n, int r)
280 if(n->op == OREGISTER)
287 nodreg(Node *n, Node *nn, int r)
294 et = nn->type->etype;
295 if(!typefd[et] && nn->type->width <= SZ_LONG && 0)
296 n->type = typeu[et]? types[TUINT]: types[TINT];
299 //print("nodreg %s [%s]\n", tnames[et], tnames[n->type->etype]);
300 n->lineno = nn->lineno;
305 if(nn->op == OREGISTER)
313 regret(Node *n, Node *nn)
318 if(typefd[nn->type->etype])
325 regalloc(Node *n, Node *tn, Node *o)
329 switch(tn->type->etype) {
341 if(o != Z && o->op == OREGISTER) {
343 if(i >= D_AX && i <= D_R15)
346 for(i=D_AX; i<=D_R15; i++)
347 if(reg[i] == 0 && !resvreg[i])
349 diag(tn, "out of fixed registers");
354 if(o != Z && o->op == OREGISTER) {
356 if(i >= D_X0 && i <= D_X7)
359 for(i=D_X0; i<=D_X7; i++)
360 if(reg[i] == 0 && !resvreg[i])
362 diag(tn, "out of float registers");
365 diag(tn, "unknown type in regalloc: %T", tn->type);
375 regialloc(Node *n, Node *tn, Node *o)
380 nod.type = types[TIND];
381 regalloc(n, &nod, o);
390 if(n->op != OREGISTER && n->op != OINDREG)
393 if(i < 0 || i >= sizeof(reg))
400 diag(n, "error in regfree: %R", i);
404 regsalloc(Node *n, Node *nn)
406 cursafe = align(cursafe, nn->type, Aaut3);
407 maxargsafe = maxround(maxargsafe, cursafe+curarg);
409 n->xoffset = -(stkoff + cursafe);
411 n->etype = nn->type->etype;
412 n->lineno = nn->lineno;
416 regaalloc1(Node *n, Node *nn)
418 nodreg(n, nn, REGARG);
420 curarg = align(curarg, nn->type, Aarg1);
421 curarg = align(curarg, nn->type, Aarg2);
422 maxargsafe = maxround(maxargsafe, cursafe+curarg);
426 regaalloc(Node *n, Node *nn)
428 curarg = align(curarg, nn->type, Aarg1);
435 curarg = align(curarg, nn->type, Aarg2);
436 maxargsafe = maxround(maxargsafe, cursafe+curarg);
440 regind(Node *n, Node *nn)
443 if(n->op != OREGISTER) {
444 diag(n, "regind not OREGISTER");
452 naddr(Node *n, Adr *a)
462 diag(n, "bad in naddr: %O %D", n->op, a);
473 if(a->type >= D_AX && a->type <= D_R15)
476 if(a->type == D_CONST)
477 a->type = D_NONE+D_INDIR;
479 if(a->type == D_ADDR) {
488 if(n->left->op == OADDR || n->left->op == OCONST)
490 if(a->type >= D_AX && a->type <= D_R15)
493 if(a->type == D_CONST)
494 a->type = D_NONE+D_INDIR;
496 if(a->type == D_ADDR) {
503 a->offset += n->xoffset;
507 a->type = n->reg+D_INDIR;
509 a->offset = n->xoffset;
516 a->offset = n->xoffset;
517 if(n->class == CSTATIC)
519 if(n->class == CEXTERN || n->class == CGLOBL) {
523 if(n->class == CAUTO) {
527 if(n->class == CPARAM) {
534 if(typefd[n->type->etype]) {
541 if(typev[n->type->etype] || n->type->etype == TIND)
542 a->offset = n->vconst;
544 a->offset = convvtox(n->vconst, typeu[n->type->etype]? TULONG: TLONG);
549 if(a->type >= D_INDIR) {
553 if(a->type == D_EXTERN || a->type == D_STATIC ||
554 a->type == D_AUTO || a->type == D_PARAM)
555 if(a->index == D_NONE) {
563 if(n->right->op == OCONST) {
564 v = n->right->vconst;
567 if(n->left->op == OCONST) {
579 gcmp(int op, Node *n, vlong val)
583 cn = nodgconst(val, n->type);
585 regalloc(&nod, n, Z);
587 gopcode(op, n->type, n, &nod);
590 gopcode(op, n->type, n, cn);
593 #define CASE(a,b) ((a<<8)|(b<<0))
596 gmove(Node *f, Node *t)
599 Node nod, nod1, nod2, nod3;
604 t64 = tt == TVLONG || tt == TUVLONG || tt == TIND;
606 print("gop: %O %O[%s],%O[%s]\n", OAS,
607 f->op, tnames[ft], t->op, tnames[tt]);
608 if(typefd[ft] && f->op == OCONST) {
609 /* TO DO: pick up special constants, possibly preloaded */
610 if(f->fconst == 0.0){
611 regalloc(&nod, t, t);
612 gins(AXORPD, &nod, &nod);
621 if(f->op == ONAME || f->op == OINDREG ||
622 f->op == OIND || f->op == OINDEX)
647 regalloc(&nod, t, t);
665 a = AMOVLQZX; /* could probably use plain MOVL */
669 regalloc(&nod, t, t);
683 regalloc(&nod, f, t);
700 if(t->op == ONAME || t->op == OINDREG ||
701 t->op == OIND || t->op == OINDEX)
720 if(f->op == OCONST) {
725 regalloc(&nod, t, f);
742 switch(CASE(ft,tt)) {
749 case CASE( TCHAR, TCHAR):
750 case CASE( TUCHAR, TCHAR):
751 case CASE( TSHORT, TCHAR):
752 case CASE( TUSHORT,TCHAR):
753 case CASE( TINT, TCHAR):
754 case CASE( TUINT, TCHAR):
755 case CASE( TLONG, TCHAR):
756 case CASE( TULONG, TCHAR):
758 case CASE( TCHAR, TUCHAR):
759 case CASE( TUCHAR, TUCHAR):
760 case CASE( TSHORT, TUCHAR):
761 case CASE( TUSHORT,TUCHAR):
762 case CASE( TINT, TUCHAR):
763 case CASE( TUINT, TUCHAR):
764 case CASE( TLONG, TUCHAR):
765 case CASE( TULONG, TUCHAR):
767 case CASE( TSHORT, TSHORT):
768 case CASE( TUSHORT,TSHORT):
769 case CASE( TINT, TSHORT):
770 case CASE( TUINT, TSHORT):
771 case CASE( TLONG, TSHORT):
772 case CASE( TULONG, TSHORT):
774 case CASE( TSHORT, TUSHORT):
775 case CASE( TUSHORT,TUSHORT):
776 case CASE( TINT, TUSHORT):
777 case CASE( TUINT, TUSHORT):
778 case CASE( TLONG, TUSHORT):
779 case CASE( TULONG, TUSHORT):
781 case CASE( TINT, TINT):
782 case CASE( TUINT, TINT):
783 case CASE( TLONG, TINT):
784 case CASE( TULONG, TINT)::
786 case CASE( TINT, TUINT):
787 case CASE( TUINT, TUINT):
788 case CASE( TLONG, TUINT):
789 case CASE( TULONG, TUINT):
794 case CASE( TINT, TIND):
795 case CASE( TINT, TVLONG):
796 case CASE( TINT, TUVLONG):
797 case CASE( TLONG, TIND):
798 case CASE( TLONG, TVLONG):
799 case CASE( TLONG, TUVLONG):
801 if(f->op == OCONST) {
802 f->vconst &= (uvlong)0xffffffffU;
803 if(f->vconst & 0x80000000)
804 f->vconst |= (vlong)0xffffffff << 32;
809 case CASE( TUINT, TIND):
810 case CASE( TUINT, TVLONG):
811 case CASE( TUINT, TUVLONG):
812 case CASE( TULONG, TVLONG):
813 case CASE( TULONG, TUVLONG):
814 case CASE( TULONG, TIND):
816 if(f->op == OCONST) {
817 f->vconst &= (uvlong)0xffffffffU;
822 case CASE( TIND, TCHAR):
823 case CASE( TIND, TUCHAR):
824 case CASE( TIND, TSHORT):
825 case CASE( TIND, TUSHORT):
826 case CASE( TIND, TINT):
827 case CASE( TIND, TUINT):
828 case CASE( TIND, TLONG):
829 case CASE( TIND, TULONG):
830 case CASE( TVLONG, TCHAR):
831 case CASE( TVLONG, TUCHAR):
832 case CASE( TVLONG, TSHORT):
833 case CASE( TVLONG, TUSHORT):
834 case CASE( TVLONG, TINT):
835 case CASE( TVLONG, TUINT):
836 case CASE( TVLONG, TLONG):
837 case CASE( TVLONG, TULONG):
838 case CASE( TUVLONG, TCHAR):
839 case CASE( TUVLONG, TUCHAR):
840 case CASE( TUVLONG, TSHORT):
841 case CASE( TUVLONG, TUSHORT):
842 case CASE( TUVLONG, TINT):
843 case CASE( TUVLONG, TUINT):
844 case CASE( TUVLONG, TLONG):
845 case CASE( TUVLONG, TULONG):
847 if(f->op == OCONST) {
848 f->vconst &= 0xffffffffU;
853 case CASE( TIND, TIND):
854 case CASE( TIND, TVLONG):
855 case CASE( TIND, TUVLONG):
856 case CASE( TVLONG, TIND):
857 case CASE( TVLONG, TVLONG):
858 case CASE( TVLONG, TUVLONG):
859 case CASE( TUVLONG, TIND):
860 case CASE( TUVLONG, TVLONG):
861 case CASE( TUVLONG, TUVLONG):
865 case CASE( TSHORT, TINT):
866 case CASE( TSHORT, TUINT):
867 case CASE( TSHORT, TLONG):
868 case CASE( TSHORT, TULONG):
870 if(f->op == OCONST) {
872 if(f->vconst & 0x8000)
873 f->vconst |= 0xffff0000;
878 case CASE( TSHORT, TVLONG):
879 case CASE( TSHORT, TUVLONG):
880 case CASE( TSHORT, TIND):
882 if(f->op == OCONST) {
884 if(f->vconst & 0x8000){
885 f->vconst |= 0xffff0000;
886 f->vconst |= (vlong)~0 << 32;
892 case CASE( TUSHORT,TINT):
893 case CASE( TUSHORT,TUINT):
894 case CASE( TUSHORT,TLONG):
895 case CASE( TUSHORT,TULONG):
897 if(f->op == OCONST) {
903 case CASE( TUSHORT,TVLONG):
904 case CASE( TUSHORT,TUVLONG):
905 case CASE( TUSHORT,TIND):
907 if(f->op == OCONST) {
909 a = AMOVL; /* MOVL also zero-extends to 64 bits */
913 case CASE( TCHAR, TSHORT):
914 case CASE( TCHAR, TUSHORT):
915 case CASE( TCHAR, TINT):
916 case CASE( TCHAR, TUINT):
917 case CASE( TCHAR, TLONG):
918 case CASE( TCHAR, TULONG):
920 if(f->op == OCONST) {
923 f->vconst |= 0xffffff00;
928 case CASE( TCHAR, TVLONG):
929 case CASE( TCHAR, TUVLONG):
930 case CASE( TCHAR, TIND):
932 if(f->op == OCONST) {
934 if(f->vconst & 0x80){
935 f->vconst |= 0xffffff00;
936 f->vconst |= (vlong)~0 << 32;
942 case CASE( TUCHAR, TSHORT):
943 case CASE( TUCHAR, TUSHORT):
944 case CASE( TUCHAR, TINT):
945 case CASE( TUCHAR, TUINT):
946 case CASE( TUCHAR, TLONG):
947 case CASE( TUCHAR, TULONG):
949 if(f->op == OCONST) {
955 case CASE( TUCHAR, TVLONG):
956 case CASE( TUCHAR, TUVLONG):
957 case CASE( TUCHAR, TIND):
959 if(f->op == OCONST) {
961 a = AMOVL; /* zero-extends to 64-bits */
968 case CASE( TFLOAT, TCHAR):
969 case CASE( TFLOAT, TUCHAR):
970 case CASE( TFLOAT, TSHORT):
971 case CASE( TFLOAT, TUSHORT):
972 case CASE( TFLOAT, TINT):
973 case CASE( TFLOAT, TUINT):
974 case CASE( TFLOAT, TLONG):
975 case CASE( TFLOAT, TULONG):
976 case CASE( TFLOAT, TVLONG):
977 case CASE( TFLOAT, TUVLONG):
978 case CASE( TFLOAT, TIND):
980 case CASE( TDOUBLE,TCHAR):
981 case CASE( TDOUBLE,TUCHAR):
982 case CASE( TDOUBLE,TSHORT):
983 case CASE( TDOUBLE,TUSHORT):
984 case CASE( TDOUBLE,TINT):
985 case CASE( TDOUBLE,TUINT):
986 case CASE( TDOUBLE,TLONG):
987 case CASE( TDOUBLE,TULONG):
988 case CASE( TDOUBLE,TVLONG):
989 case CASE( TDOUBLE,TUVLONG):
990 case CASE( TDOUBLE,TIND):
991 regalloc(&nod, t, Z);
992 if(ewidth[tt] == SZ_VLONG || typeu[tt] && ewidth[tt] == SZ_INT){
1011 case CASE( TUVLONG, TDOUBLE):
1012 case CASE( TUVLONG, TFLOAT):
1016 regalloc(&nod, f, f);
1018 regalloc(&nod1, t, t);
1019 gins(ACMPQ, &nod, nodconst(0));
1022 gins(a, &nod, &nod1);
1026 regalloc(&nod2, f, Z);
1027 regalloc(&nod3, f, Z);
1029 gins(ASHRQ, nodconst(1), &nod2);
1031 gins(AANDL, nodconst(1), &nod3);
1032 gins(AORQ, &nod3, &nod2);
1033 gins(a, &nod2, &nod1);
1034 gins(tt == TDOUBLE? AADDSD: AADDSS, &nod1, &nod1);
1042 case CASE( TULONG, TDOUBLE):
1043 case CASE( TUINT, TDOUBLE):
1044 case CASE( TULONG, TFLOAT):
1045 case CASE( TUINT, TFLOAT):
1049 regalloc(&nod, f, f);
1050 gins(AMOVLQZX, f, &nod);
1051 regalloc(&nod1, t, t);
1052 gins(a, &nod, &nod1);
1061 case CASE( TCHAR, TFLOAT):
1062 case CASE( TUCHAR, TFLOAT):
1063 case CASE( TSHORT, TFLOAT):
1064 case CASE( TUSHORT,TFLOAT):
1065 case CASE( TINT, TFLOAT):
1066 case CASE( TLONG, TFLOAT):
1067 case CASE( TVLONG, TFLOAT):
1068 case CASE( TIND, TFLOAT):
1070 case CASE( TCHAR, TDOUBLE):
1071 case CASE( TUCHAR, TDOUBLE):
1072 case CASE( TSHORT, TDOUBLE):
1073 case CASE( TUSHORT,TDOUBLE):
1074 case CASE( TINT, TDOUBLE):
1075 case CASE( TLONG, TDOUBLE):
1076 case CASE( TVLONG, TDOUBLE):
1077 case CASE( TIND, TDOUBLE):
1078 regalloc(&nod, t, t);
1079 if(ewidth[ft] == SZ_VLONG){
1098 case CASE( TFLOAT, TFLOAT):
1101 case CASE( TDOUBLE,TFLOAT):
1104 case CASE( TFLOAT, TDOUBLE):
1107 case CASE( TDOUBLE,TDOUBLE):
1111 if(a == AMOVQ || a == AMOVSD || a == AMOVSS || a == AMOVL && ewidth[ft] == ewidth[tt]) /* TO DO: check AMOVL */
1126 if(n->left->complex >= FNX)
1127 print("botch in doindex\n");
1129 regalloc(&nod, &qregnode, Z);
1130 v = constnode.vconst;
1131 cgen(n->right, &nod);
1133 if(n->left->op == OCONST)
1135 else if(n->left->op == OREGISTER)
1136 idx.ptr = n->left->reg;
1137 else if(n->left->op != OADDR) {
1138 reg[D_BP]++; // cant be used as a base
1139 regalloc(&nod1, &qregnode, Z);
1140 cgen(n->left, &nod1);
1147 constnode.vconst = v;
1151 gins(int a, Node *f, Node *t)
1154 if(f != Z && f->op == OINDEX)
1156 if(t != Z && t->op == OINDEX)
1169 gopcode(int o, Type *ty, Node *f, Node *t)
1177 if(f != Z && f->type != T)
1178 print("gop: %O %O[%s],", o, f->op, tnames[et]);
1180 print("gop: %O Z,", o);
1181 if(t != Z && t->type != T)
1182 print("%O[%s]\n", t->op, tnames[t->type->etype]);
1190 if(et == TCHAR || et == TUCHAR)
1192 if(et == TSHORT || et == TUSHORT)
1194 if(et == TVLONG || et == TUVLONG || et == TIND)
1200 if(et == TCHAR || et == TUCHAR)
1202 if(et == TSHORT || et == TUSHORT)
1204 if(et == TVLONG || et == TUVLONG || et == TIND)
1215 if(et == TCHAR || et == TUCHAR)
1217 if(et == TSHORT || et == TUSHORT)
1219 if(et == TVLONG || et == TUVLONG || et == TIND)
1230 if(et == TCHAR || et == TUCHAR)
1232 if(et == TSHORT || et == TUSHORT)
1234 if(et == TVLONG || et == TUVLONG || et == TIND)
1245 if(et == TCHAR || et == TUCHAR)
1247 if(et == TSHORT || et == TUSHORT)
1249 if(et == TVLONG || et == TUVLONG || et == TIND)
1256 if(et == TCHAR || et == TUCHAR)
1258 if(et == TSHORT || et == TUSHORT)
1260 if(et == TVLONG || et == TUVLONG || et == TIND)
1267 if(et == TCHAR || et == TUCHAR)
1269 if(et == TSHORT || et == TUSHORT)
1271 if(et == TVLONG || et == TUVLONG || et == TIND)
1278 if(et == TCHAR || et == TUCHAR)
1280 if(et == TSHORT || et == TUSHORT)
1282 if(et == TVLONG || et == TUVLONG || et == TIND)
1289 if(et == TCHAR || et == TUCHAR)
1291 if(et == TSHORT || et == TUSHORT)
1293 if(et == TVLONG || et == TUVLONG || et == TIND)
1300 if(et == TCHAR || et == TUCHAR)
1302 if(et == TSHORT || et == TUSHORT)
1304 if(et == TVLONG || et == TUVLONG || et == TIND)
1310 if(et == TCHAR || et == TUCHAR)
1312 if(et == TSHORT || et == TUSHORT)
1314 if(et == TVLONG || et == TUVLONG || et == TIND)
1324 if(f->op == OREGISTER && t != Z && isreg(t, D_AX) && reg[D_DX] == 0)
1327 if(et == TVLONG || et == TUVLONG || et == TIND)
1340 if(et == TVLONG || et == TUVLONG || et == TIND)
1351 if(et == TVLONG || et == TUVLONG || et == TIND)
1360 if(et == TVLONG || et == TUVLONG || et == TIND)
1375 if(et == TCHAR || et == TUCHAR)
1377 if(et == TSHORT || et == TUSHORT)
1379 if(et == TVLONG || et == TUVLONG || et == TIND)
1387 case OEQ: a = AJEQ; break;
1388 case ONE: a = AJNE; break;
1389 case OLT: a = AJLT; break;
1390 case OLE: a = AJLE; break;
1391 case OGE: a = AJGE; break;
1392 case OGT: a = AJGT; break;
1393 case OLO: a = AJCS; break;
1394 case OLS: a = AJLS; break;
1395 case OHS: a = AJCC; break;
1396 case OHI: a = AJHI; break;
1402 diag(Z, "bad in gopcode %O", o);
1407 samaddr(Node *f, Node *t)
1409 return f->op == OREGISTER && t->op == OREGISTER && f->reg == t->reg;
1428 diag(Z, "bad in gbranch %O", o);
1435 patch(Prog *op, long pc)
1439 op->to.type = D_BRANCH;
1443 gpseudo(int a, Sym *s, Node *n)
1448 p->from.type = D_EXTERN;
1450 p->from.scale = (profileflg ? 0 : NOPROF);
1451 if(s->class == CSTATIC)
1452 p->from.type = D_STATIC;
1454 if(a == ADATA || a == AGLOBL)
1463 if(n->op == OCONST && !typefd[n->type->etype]) {
1465 if(v >= -32766L && v < 32766L)
1476 if(typechlpv[t->etype]) {
1477 if(exregoffset <= REGEXT-4)
1486 schar ewidth[NTYPE] =
1489 SZ_CHAR, /*[TCHAR]*/
1490 SZ_CHAR, /*[TUCHAR]*/
1491 SZ_SHORT, /*[TSHORT]*/
1492 SZ_SHORT, /*[TUSHORT]*/
1495 SZ_LONG, /*[TLONG]*/
1496 SZ_LONG, /*[TULONG]*/
1497 SZ_VLONG, /*[TVLONG]*/
1498 SZ_VLONG, /*[TUVLONG]*/
1499 SZ_FLOAT, /*[TFLOAT]*/
1500 SZ_DOUBLE, /*[TDOUBLE]*/
1512 BCHAR|BUCHAR, /*[TCHAR]*/
1513 BCHAR|BUCHAR, /*[TUCHAR]*/
1514 BSHORT|BUSHORT, /*[TSHORT]*/
1515 BSHORT|BUSHORT, /*[TUSHORT]*/
1516 BINT|BUINT|BLONG|BULONG, /*[TINT]*/
1517 BINT|BUINT|BLONG|BULONG, /*[TUINT]*/
1518 BINT|BUINT|BLONG|BULONG, /*[TLONG]*/
1519 BINT|BUINT|BLONG|BULONG, /*[TULONG]*/
1520 BVLONG|BUVLONG|BIND, /*[TVLONG]*/
1521 BVLONG|BUVLONG|BIND, /*[TUVLONG]*/
1522 BFLOAT, /*[TFLOAT]*/
1523 BDOUBLE, /*[TDOUBLE]*/
1524 BVLONG|BUVLONG|BIND, /*[TIND]*/
1528 BSTRUCT, /*[TSTRUCT]*/
1529 BUNION, /*[TUNION]*/