|
|
1.1 ! root 1: /*ident "@(#)ctrans:src/size.c 1.1.4.3" */ ! 2: /********************************************************************* ! 3: ! 4: C++ source for cfront, the C++ compiler front-end ! 5: written in the computer science research center of Bell Labs ! 6: ! 7: Copyright (c) 1984 AT&T, Inc. All rigths Reserved ! 8: THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T, INC. ! 9: ! 10: size.c: ! 11: ! 12: initialize alignment and sizeof "constants" ! 13: ! 14: **********************************************************************/ ! 15: ! 16: #include "cfront.h" ! 17: #include "size.h" ! 18: ! 19: // default sizes: ! 20: // Note: #if doesn't work on all systems ! 21: #ifdef u3b ! 22: #define Abbb ! 23: #endif ! 24: #ifdef u3b2 ! 25: #define Abbb ! 26: #endif ! 27: #ifdef u3b5 ! 28: #define Abbb ! 29: #endif ! 30: #ifdef u3b15 ! 31: #define Abbb ! 32: #endif ! 33: #ifdef pyr ! 34: #define Abbb ! 35: #endif ! 36: ! 37: ! 38: #ifdef alliant ! 39: #define Am68 ! 40: #endif ! 41: #ifdef apollo ! 42: #define Am68 ! 43: #endif ! 44: #if defined(sun2) || defined(mc68010) ! 45: #define Am68 ! 46: #endif ! 47: #if defined(sun3) || defined(mc68020) ! 48: #define Am68 ! 49: #endif ! 50: #if defined(mc68k) || defined(hp9000s200) || defined(hp9000s300) ! 51: #define Am68 ! 52: #endif ! 53: ! 54: #ifdef iAPX286 ! 55: #ifdef LARGE ! 56: #define Ai286l ! 57: #endif ! 58: #endif ! 59: ! 60: #ifdef Abbb ! 61: /* AT&T 3Bs */ ! 62: #define DBI_IN_WORD 32 ! 63: #define DBI_IN_BYTE 8 ! 64: #define DSZ_CHAR 1 ! 65: #define DAL_CHAR 1 ! 66: #define DSZ_SHORT 2 ! 67: #define DAL_SHORT 2 ! 68: #define DSZ_INT 4 ! 69: #define DAL_INT 4 ! 70: #define DSZ_LONG 4 ! 71: #define DAL_LONG 4 ! 72: #define DSZ_FLOAT 4 ! 73: #define DAL_FLOAT 4 ! 74: #define DSZ_DOUBLE 8 ! 75: #define DAL_DOUBLE 4 ! 76: #define DSZ_LDOUBLE 8 ! 77: #define DAL_LDOUBLE 4 ! 78: #define DSZ_STRUCT 4 ! 79: #define DAL_STRUCT 4 ! 80: //#define DSZ_FRAME 4 ! 81: //#define DAL_FRAME 4 ! 82: #define DSZ_WORD 4 ! 83: #define DSZ_WPTR 4 ! 84: #define DAL_WPTR 4 ! 85: #define DSZ_BPTR 4 ! 86: #define DAL_BPTR 4 ! 87: //#define DSZ_TOP 0 ! 88: //#define DSZ_BOTTOM 0 ! 89: #define DLARGEST_INT "2147483647" /* 2**31 - 1 */ ! 90: #define DF_SENSITIVE 0 ! 91: #define DF_OPTIMIZED 1 ! 92: #else ! 93: #ifdef Am68 ! 94: /* most M68K boxes */ ! 95: #if defined(hp9000s200) || defined(hp9000s300) || defined(sun) ! 96: #define DBI_IN_WORD 32 ! 97: #else ! 98: #define DBI_IN_WORD 16 ! 99: #endif ! 100: ! 101: #define DBI_IN_BYTE 8 ! 102: #define DSZ_CHAR 1 ! 103: #define DAL_CHAR 1 ! 104: #define DSZ_SHORT 2 ! 105: #define DAL_SHORT 2 ! 106: #define DSZ_INT 4 ! 107: #define DAL_INT 2 ! 108: #define DSZ_LONG 4 ! 109: #define DAL_LONG 2 ! 110: #define DSZ_FLOAT 4 ! 111: #define DAL_FLOAT 2 ! 112: #define DSZ_DOUBLE 8 ! 113: #define DAL_DOUBLE 2 ! 114: #define DSZ_LDOUBLE 8 ! 115: #define DAL_LDOUBLE 2 ! 116: #define DSZ_STRUCT 2 ! 117: #define DAL_STRUCT 2 ! 118: //#define DSZ_FRAME 4 ! 119: //#define DAL_FRAME 4 ! 120: #ifdef sun ! 121: #define DSZ_WORD 4 ! 122: #define DZB_BOUNDARY 2 ! 123: #else ! 124: #define DSZ_WORD 2 ! 125: #define DZB_BOUNDARY 2 ! 126: #endif ! 127: #define DSZ_WPTR 4 ! 128: #define DAL_WPTR 2 ! 129: #define DSZ_BPTR 4 ! 130: #define DAL_BPTR 2 ! 131: //#define DSZ_TOP 0 ! 132: //#define DSZ_BOTTOM 0 ! 133: #define DLARGEST_INT "2147483647" /* 2**31 - 1 */ ! 134: #define DF_SENSITIVE 0 ! 135: #define DF_OPTIMIZED 1 ! 136: #else ! 137: #ifdef Ai286l ! 138: /* Intel 80286 large model */ ! 139: #define DBI_IN_WORD 16 ! 140: #define DBI_IN_BYTE 8 ! 141: #define DSZ_CHAR 1 ! 142: #define DAL_CHAR 1 ! 143: #define DSZ_SHORT 2 ! 144: #define DAL_SHORT 2 ! 145: #define DSZ_INT 2 ! 146: #define DAL_INT 2 ! 147: #define DSZ_LONG 4 ! 148: #define DAL_LONG 2 ! 149: #define DSZ_FLOAT 4 ! 150: #define DAL_FLOAT 2 ! 151: #define DSZ_DOUBLE 8 ! 152: #define DAL_DOUBLE 2 ! 153: #define DSZ_LDOUBLE 8 ! 154: #define DAL_LDOUBLE 2 ! 155: #define DSZ_STRUCT 2 ! 156: #define DAL_STRUCT 2 ! 157: //#define DSZ_FRAME 4 ! 158: //#define DAL_FRAME 4 ! 159: #define DSZ_WORD 2 ! 160: #define DSZ_WPTR 4 ! 161: #define DAL_WPTR 2 ! 162: #define DSZ_BPTR 4 ! 163: #define DAL_BPTR 2 ! 164: //#define DSZ_TOP 0 ! 165: //#define DSZ_BOTTOM 0 ! 166: #define DLARGEST_INT "32767" /* 2**15 - 1 */ ! 167: #define DF_SENSITIVE 0 ! 168: #define DF_OPTIMIZED 1 ! 169: #else ! 170: #if defined(uts) || defined(hp9000s800) || defined(sun4) || defined(sparc) ! 171: /* Amdahl running UTS, HP RISC */ ! 172: #define DBI_IN_WORD 32 ! 173: #define DBI_IN_BYTE 8 ! 174: #define DSZ_CHAR 1 ! 175: #define DAL_CHAR 1 ! 176: #define DSZ_SHORT 2 ! 177: #define DAL_SHORT 2 ! 178: #define DSZ_INT 4 ! 179: #define DAL_INT 4 ! 180: #define DSZ_LONG 4 ! 181: #define DAL_LONG 4 ! 182: #define DSZ_FLOAT 4 ! 183: #define DAL_FLOAT 4 ! 184: #define DSZ_DOUBLE 8 ! 185: #define DAL_DOUBLE 8 ! 186: #define DSZ_LDOUBLE 8 ! 187: #define DAL_LDOUBLE 8 ! 188: #define DSZ_STRUCT 1 ! 189: #define DAL_STRUCT 1 ! 190: #define DSZ_WORD 4 ! 191: #define DSZ_WPTR 4 ! 192: #define DAL_WPTR 4 ! 193: #define DSZ_BPTR 4 ! 194: #define DAL_BPTR 4 ! 195: #define DLARGEST_INT "2147483647" /* 2**31 - 1 */ ! 196: #define DF_SENSITIVE 0 ! 197: #define DF_OPTIMIZED 1 ! 198: #else ! 199: #ifdef hpux ! 200: /* hp */ ! 201: #define DBI_IN_WORD 32 ! 202: #define DBI_IN_BYTE 8 ! 203: #define DSZ_CHAR 1 ! 204: #define DAL_CHAR 1 ! 205: #define DSZ_SHORT 2 ! 206: #define DAL_SHORT 2 ! 207: #define DSZ_INT 4 ! 208: #define DAL_INT 4 ! 209: #define DSZ_LONG 4 ! 210: #define DAL_LONG 4 ! 211: #define DSZ_FLOAT 4 ! 212: #define DAL_FLOAT 4 ! 213: #define DSZ_DOUBLE 8 ! 214: #define DAL_DOUBLE 8 ! 215: #define DSZ_LDOUBLE 8 ! 216: #define DAL_LDOUBLE 8 ! 217: #define DSZ_STRUCT 1 ! 218: #define DAL_STRUCT 1 ! 219: #define DSZ_WORD 4 ! 220: #define DSZ_WPTR 4 ! 221: #define DAL_WPTR 4 ! 222: #define DSZ_BPTR 4 ! 223: #define DAL_BPTR 4 ! 224: #define DLARGEST_INT "2147483647" /* 2**31 - 1 */ ! 225: #define DF_SENSITIVE 1 ! 226: #define DF_OPTIMIZED 1 ! 227: #else ! 228: #if defined(vax) || defined(ibm032) || defined(i386) ! 229: /* VAX, IBM 32, Intel 386 */ ! 230: #define DBI_IN_WORD 32 ! 231: #define DBI_IN_BYTE 8 ! 232: #define DSZ_CHAR 1 ! 233: #define DAL_CHAR 1 ! 234: #define DSZ_SHORT 2 ! 235: #define DAL_SHORT 2 ! 236: #define DSZ_INT 4 ! 237: #define DAL_INT 4 ! 238: #define DSZ_LONG 4 ! 239: #define DAL_LONG 4 ! 240: #define DSZ_FLOAT 4 ! 241: #define DAL_FLOAT 4 ! 242: #define DSZ_DOUBLE 8 ! 243: #define DAL_DOUBLE 4 ! 244: #define DSZ_LDOUBLE 8 ! 245: #define DAL_LDOUBLE 4 ! 246: #define DSZ_STRUCT 1 ! 247: #define DAL_STRUCT 1 ! 248: //#define DSZ_FRAME 4 ! 249: //#define DAL_FRAME 4 ! 250: #define DSZ_WORD 4 ! 251: #define DSZ_WPTR 4 ! 252: #define DAL_WPTR 4 ! 253: #define DSZ_BPTR 4 ! 254: #define DAL_BPTR 4 ! 255: //#define DSZ_TOP 0 ! 256: //#define DSZ_BOTTOM 0 ! 257: #define DLARGEST_INT "2147483647" /* 2**31 - 1 */ ! 258: #define DF_SENSITIVE 0 ! 259: #define DF_OPTIMIZED 1 ! 260: #else ! 261: #ifdef mc300 ! 262: #define DBI_IN_WORD 32 ! 263: #define DBI_IN_BYTE 8 ! 264: #define DSZ_CHAR 1 ! 265: #define DAL_CHAR 1 ! 266: #define DSZ_SHORT 2 ! 267: #define DAL_SHORT 2 ! 268: #define DSZ_INT 4 ! 269: #define DAL_INT 4 ! 270: #define DSZ_LONG 4 ! 271: #define DAL_LONG 4 ! 272: #define DSZ_FLOAT 4 ! 273: #define DAL_FLOAT 4 ! 274: #define DSZ_DOUBLE 8 ! 275: #define DAL_DOUBLE 4 ! 276: #define DSZ_LDOUBLE 8 ! 277: #define DAL_LDOUBLE 4 ! 278: #define DSZ_STRUCT 2 ! 279: #define DAL_STRUCT 2 ! 280: //#define DSZ_FRAME 4 ! 281: //#define DAL_FRAME 4 ! 282: #define DSZ_WORD 4 ! 283: #define DSZ_WPTR 4 ! 284: #define DAL_WPTR 4 ! 285: #define DSZ_BPTR 4 ! 286: #define DAL_BPTR 4 ! 287: //#define DSZ_TOP 0 ! 288: //#define DSZ_BOTTOM 0 ! 289: #define DLARGEST_INT "2147483647" /* 2**31 - 1 */ ! 290: #define DF_SENSITIVE 0 ! 291: #define DF_OPTIMIZED 1 ! 292: #else ! 293: /* defaults: 0 => error */ ! 294: #define DBI_IN_WORD 0 ! 295: #define DBI_IN_BYTE 0 ! 296: #define DSZ_CHAR 1 ! 297: #define DAL_CHAR 1 ! 298: #define DSZ_SHORT 0 ! 299: #define DAL_SHORT 0 ! 300: #define DSZ_INT 0 ! 301: #define DAL_INT 0 ! 302: #define DSZ_LONG 0 ! 303: #define DAL_LONG 0 ! 304: #define DSZ_FLOAT 0 ! 305: #define DAL_FLOAT 0 ! 306: #define DSZ_DOUBLE 0 ! 307: #define DAL_DOUBLE 0 ! 308: #define DSZ_LDOUBLE 0 ! 309: #define DAL_LDOUBLE 0 ! 310: #define DSZ_STRUCT 0 ! 311: #define DAL_STRUCT 0 ! 312: #define DSZ_WORD 0 ! 313: #define DSZ_WPTR 0 ! 314: #define DAL_WPTR 0 ! 315: #define DSZ_BPTR 0 ! 316: #define DAL_BPTR 0 ! 317: #define DLARGEST_INT "0" ! 318: #define DF_SENSITIVE 0 ! 319: #define DF_OPTIMIZED 0 ! 320: #endif ! 321: #endif ! 322: #endif ! 323: #endif ! 324: #endif ! 325: #endif ! 326: #endif ! 327: ! 328: #ifndef DZB_BOUNDARY ! 329: // #define ZB_BOUNDARY DSZ_WORD ! 330: #define DZB_BOUNDARY DSZ_WORD ! 331: #endif ! 332: ! 333: int BI_IN_WORD = DBI_IN_WORD; ! 334: int BI_IN_BYTE = DBI_IN_BYTE; ! 335: int SZ_CHAR = DSZ_CHAR; ! 336: int AL_CHAR = DAL_CHAR; ! 337: int SZ_SHORT = DSZ_SHORT; ! 338: int AL_SHORT = DAL_SHORT; ! 339: int SZ_INT = DSZ_INT; ! 340: int AL_INT = DAL_INT; ! 341: int SZ_LONG = DSZ_LONG; ! 342: int AL_LONG = DAL_LONG; ! 343: int SZ_FLOAT = DSZ_FLOAT; ! 344: int AL_FLOAT = DAL_FLOAT; ! 345: int SZ_DOUBLE = DSZ_DOUBLE; ! 346: int AL_DOUBLE = DAL_DOUBLE; ! 347: int SZ_LDOUBLE = DSZ_LDOUBLE; ! 348: int AL_LDOUBLE = DAL_LDOUBLE; ! 349: int SZ_STRUCT = DSZ_STRUCT; ! 350: int AL_STRUCT = DAL_STRUCT; ! 351: //int SZ_FRAME = DSZ_FRAME; ! 352: //int AL_FRAME = DAL_FRAME; ! 353: int SZ_WORD = DSZ_WORD; ! 354: int ZB_BOUNDARY = DZB_BOUNDARY; ! 355: int SZ_WPTR = DSZ_WPTR; ! 356: int AL_WPTR = DAL_WPTR; ! 357: int SZ_BPTR = DSZ_BPTR; ! 358: int AL_BPTR = DAL_BPTR; ! 359: //int SZ_TOP = DSZ_TOP; ! 360: //int SZ_BOTTOM = DSZ_BOTTOM; ! 361: char* LARGEST_INT = DLARGEST_INT; ! 362: int F_SENSITIVE = DF_SENSITIVE; ! 363: int F_OPTIMIZED = DF_OPTIMIZED; ! 364: ! 365: int arg1 = 0; ! 366: int arg2 = 0; ! 367: ! 368: int get_line(FILE* fp) ! 369: { ! 370: char s[32]; ! 371: ! 372: if (fscanf(fp," %s %d %d",s,&arg1,&arg2) == EOF) return 0; ! 373: // fprintf(stderr,"xxx %s %d %d",s,arg1,arg2); ! 374: if (strcmp("char",s) == 0) { ! 375: SZ_CHAR = arg1; ! 376: AL_CHAR = arg2; ! 377: return 1; ! 378: } ! 379: if (strcmp("short",s) == 0) { ! 380: SZ_SHORT = arg1; ! 381: AL_SHORT = arg2; ! 382: return 1; ! 383: } ! 384: if (strcmp("int",s) == 0) { ! 385: SZ_INT = arg1; ! 386: AL_INT = arg2; ! 387: if (fscanf(fp," %s",s) == EOF) return 0; ! 388: LARGEST_INT = new char[strlen(s)+1]; ! 389: strcpy(LARGEST_INT,s); ! 390: return 1; ! 391: } ! 392: if (strcmp("long",s) == 0) { ! 393: SZ_LONG = arg1; ! 394: AL_LONG = arg2; ! 395: return 1; ! 396: } ! 397: if (strcmp("float",s) == 0) { ! 398: SZ_FLOAT = arg1; ! 399: AL_FLOAT = arg2; ! 400: return 1; ! 401: } ! 402: if (strcmp("double",s) == 0) { ! 403: SZ_DOUBLE = arg1; ! 404: AL_DOUBLE = arg2; ! 405: return 1; ! 406: } ! 407: if (strcmp("ldouble",s) == 0) { ! 408: SZ_LDOUBLE = arg1; ! 409: AL_LDOUBLE = arg2; ! 410: return 1; ! 411: } ! 412: if (strcmp("bit",s) == 0) { ! 413: BI_IN_BYTE = arg1; ! 414: BI_IN_WORD = arg2; ! 415: return 1; ! 416: } ! 417: if (strcmp("struct",s) == 0) { ! 418: SZ_STRUCT = arg1; ! 419: AL_STRUCT = arg2; ! 420: return 1; ! 421: } ! 422: if (strcmp("struct2",s) == 0) { ! 423: F_SENSITIVE = arg1; ! 424: F_OPTIMIZED = arg2; ! 425: return 1; ! 426: } ! 427: if (strcmp("frame",s) == 0) { ! 428: // SZ_FRAME = arg1; ! 429: // AL_FRAME = arg2; ! 430: return 1; ! 431: } ! 432: if (strcmp("word",s) == 0) { ! 433: SZ_WORD = arg1; ! 434: return 1; ! 435: } ! 436: if (strcmp("zero_bitfield_boundary",s) == 0) { ! 437: ZB_BOUNDARY = arg1; ! 438: return 1; ! 439: } ! 440: if (strcmp("wptr",s) == 0) { ! 441: SZ_WPTR = arg1; ! 442: AL_WPTR = arg2; ! 443: return 1; ! 444: } ! 445: if (strcmp("bptr",s) == 0) { ! 446: SZ_BPTR = arg1; ! 447: AL_BPTR = arg2; ! 448: return 1; ! 449: } ! 450: if (strcmp("top",s) == 0) { ! 451: // SZ_TOP = arg1; ! 452: // SZ_BOTTOM = arg2; ! 453: return 1; ! 454: } ! 455: return 0; ! 456: } ! 457: ! 458: int read_align(char* f) ! 459: { ! 460: char* p = f; ! 461: if (*p == 0) { ! 462: fprintf(stderr,"size/align file missing\n"); ! 463: ext(1); ! 464: } ! 465: FILE* fp = fopen(f,"r"); ! 466: if (fp == 0) return 1; ! 467: while (get_line(fp)) ; ! 468: return 0; ! 469: } ! 470: /* ! 471: print_align(char* s) ! 472: { ! 473: fprintf(stderr,"%s sizes and alignments\n\n",s); ! 474: ! 475: fprintf(stderr," size align largest\n"); ! 476: fprintf(stderr,"char %d %d\n",SZ_CHAR,AL_CHAR); ! 477: fprintf(stderr,"short %d %d\n",SZ_SHORT,AL_SHORT); ! 478: fprintf(stderr,"int %d %d %s\n",SZ_INT,AL_INT,LARGEST_INT); ! 479: fprintf(stderr,"long %d %d\n",SZ_LONG,AL_LONG); ! 480: fprintf(stderr,"float %d %d\n",SZ_FLOAT,AL_FLOAT); ! 481: fprintf(stderr,"double %d %d\n",SZ_DOUBLE,AL_DOUBLE); ! 482: fprintf(stderr,"ldouble %d %d\n",SZ_LDOUBLE,AL_LDOUBLE); ! 483: fprintf(stderr,"bptr %d %d\n",SZ_BPTR,AL_BPTR); ! 484: fprintf(stderr,"wptr %d %d\n",SZ_WPTR,AL_WPTR); ! 485: fprintf(stderr,"struct %d %d\n",SZ_STRUCT,AL_STRUCT); ! 486: fprintf(stderr,"struct2 %d %d\n",F_SENSITIVE,F_OPTIMIZED); ! 487: // fprintf(stderr,"frame %d %d\n",SZ_FRAME,AL_FRAME); ! 488: ! 489: fprintf(stderr,"%d bits in a byte, %d bits in a word, %d bytes in a word zero bitfield aligned to %d bytes\n", ! 490: BI_IN_BYTE, BI_IN_WORD, SZ_WORD, ZB_BOUNDARY); ! 491: return 1; ! 492: } ! 493: */ ! 494: ! 495: int c_strlen(const char* s) ! 496: /* ! 497: return sizeof(s) with escapes processed ! 498: sizeof("") == 1 the terminating 0 ! 499: sizeof("a") == 2 ! 500: sizeof("\0x") == 3 0 x 0 ! 501: sizeof("\012") == 2 '\012' ! 502: sizeof("\01") '\001' ! 503: sizeof("\x") == 2 \ ignored ! 504: ! 505: */ ! 506: { ! 507: int i = 1; ! 508: for (const char* p = s; *p; i++,p++) { ! 509: if (*p == '\\') { // '\? ! 510: switch (*++p) { ! 511: case '0': ! 512: switch (p[1]) { // '\01' or '\012' ! 513: case '0': case '1': case '2': case '3': ! 514: case '4': case '5': case '6': case '7': ! 515: break; ! 516: default: ! 517: continue; // '\0' ! 518: } ! 519: /* no break */ ! 520: case '1': case '2': case '3': ! 521: case '4': case '5': case '6': case '7': // '\123' ! 522: switch (*++p) { ! 523: case '0': case '1': case '2': case '3': ! 524: case '4': case '5': case '6': case '7': ! 525: switch (*++p) { ! 526: case '0': case '1': case '2': case '3': ! 527: case '4': case '5': case '6': case '7': ! 528: break; ! 529: default: ! 530: --p; ! 531: } ! 532: break; ! 533: default: ! 534: --p; ! 535: } ! 536: } ! 537: } ! 538: } ! 539: return i; ! 540: } ! 541: /* ODI notes -- ! 542: ! 543: * move all the initialization #ifdef's into here so they ! 544: * can be changed without recompiling the whole compiler. ! 545: * Add ZB_BOUNDARY to represent the start of a bitfield 32 bit ! 546: * throw as distinct from the "word", which is 32 bits on a sun. ! 547: * ! 548: ! 549: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.