Changeset 552
- Timestamp:
- 06/21/10 05:05:31 (2 years ago)
- Files:
-
- branches/dmd-1.x/src/backend/cdef.h (modified) (3 diffs)
- branches/dmd-1.x/src/backend/cg87.c (modified) (5 diffs)
- branches/dmd-1.x/src/backend/cgcod.c (modified) (5 diffs)
- branches/dmd-1.x/src/backend/cgen.c (modified) (8 diffs)
- branches/dmd-1.x/src/backend/cgsched.c (modified) (3 diffs)
- branches/dmd-1.x/src/backend/cod1.c (modified) (4 diffs)
- branches/dmd-1.x/src/backend/cod2.c (modified) (11 diffs)
- branches/dmd-1.x/src/backend/cod3.c (modified) (2 diffs)
- branches/dmd-1.x/src/backend/cod4.c (modified) (3 diffs)
- branches/dmd-1.x/src/backend/code.h (modified) (6 diffs)
- branches/dmd-1.x/src/backend/elfobj.c (modified) (2 diffs)
- branches/dmd-1.x/src/backend/global.h (modified) (3 diffs)
- branches/dmd-1.x/src/backend/nteh.c (modified) (15 diffs)
- branches/dmd-1.x/src/backend/var.c (modified) (3 diffs)
- trunk/src/backend/cdef.h (modified) (3 diffs)
- trunk/src/backend/cg87.c (modified) (5 diffs)
- trunk/src/backend/cgcod.c (modified) (5 diffs)
- trunk/src/backend/cgen.c (modified) (8 diffs)
- trunk/src/backend/cgsched.c (modified) (3 diffs)
- trunk/src/backend/cod1.c (modified) (4 diffs)
- trunk/src/backend/cod2.c (modified) (11 diffs)
- trunk/src/backend/cod3.c (modified) (2 diffs)
- trunk/src/backend/cod4.c (modified) (3 diffs)
- trunk/src/backend/code.h (modified) (6 diffs)
- trunk/src/backend/elfobj.c (modified) (2 diffs)
- trunk/src/backend/global.h (modified) (3 diffs)
- trunk/src/backend/nteh.c (modified) (15 diffs)
- trunk/src/backend/var.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/backend/cdef.h
r501 r552 478 478 #define REGMASK 0xFFFF 479 479 480 #if TARGET_LINUX 481 typedef targ_llong targ_ptrdiff_t; /* ptrdiff_t for target machine */ 482 typedef targ_ullong targ_size_t; /* size_t for the target machine */ 483 #else 480 484 typedef targ_int targ_ptrdiff_t; /* ptrdiff_t for target machine */ 481 485 typedef targ_uns targ_size_t; /* size_t for the target machine */ 486 #endif 482 487 483 488 /* Enable/disable various features … … 561 566 #endif 562 567 563 #define REGMAX 1 0// registers are numbered 0..10568 #define REGMAX 17 // registers are numbered 0..10 564 569 565 570 typedef unsigned long tym_t; // data type big enough for type masks … … 860 865 struct elem; 861 866 862 typedef unsigned short regm_t;// Register mask type867 typedef unsigned regm_t; // Register mask type 863 868 struct immed_t 864 869 { targ_int value[REGMAX]; // immediate values in registers branches/dmd-1.x/src/backend/cg87.c
r428 r552 1531 1531 else 1532 1532 cs.Iflags = 0; 1533 cs.I jty= 0;1533 cs.Irex = 0; 1534 1534 opr = oprev[op + 1]; 1535 1535 ty = tybasic(e->Ety); … … 1888 1888 c2 = loadea(e->E1,&cs,op1,op2,0,0,0); 1889 1889 #else 1890 cs.I jty= 0;1890 cs.Irex = 0; 1891 1891 cs.Iflags = 0; 1892 1892 cs.Iop = op1; … … 1968 1968 assert(e->Eoper == OPeq); 1969 1969 cs.Iflags = ADDFWAIT() ? CFwait : 0; 1970 cs.I jty= 0;1970 cs.Irex = 0; 1971 1971 retregs = mST01 | (*pretregs & mPSW); 1972 1972 c1 = codelem(e->E2,&retregs,FALSE); … … 2005 2005 { 2006 2006 cs.Iflags = 0; 2007 cs.I jty= 0;2007 cs.Irex = 0; 2008 2008 cs.Iop = op1; 2009 2009 c2 = getlvalue(&cs, e->E1, 0); … … 3180 3180 cs.Iop = 0xD9; 3181 3181 cs.Iflags = CFoff; 3182 cs.I jty= 0;3182 cs.Irex = 0; 3183 3183 cs.IEVsym1 = rnddir; 3184 3184 cs.IFL1 = rnddir->Sfl; branches/dmd-1.x/src/backend/cgcod.c
r493 r552 1532 1532 case TYllong: 1533 1533 case TYullong: 1534 return I 32 ? mDX | mAX : DOUBLEREGS;1534 return I64 ? mAX : (I32 ? mDX | mAX : DOUBLEREGS); 1535 1535 case TYldouble: 1536 1536 case TYildouble: … … 1607 1607 1608 1608 void freenode(elem *e) 1609 { registerunsigned i;1609 { unsigned i; 1610 1610 1611 1611 elem_debug(e); … … 1946 1946 1947 1947 STATIC code * cse_save(regm_t ms) 1948 { registerunsigned reg,i,op;1948 { unsigned reg,i,op; 1949 1949 code *c = NULL; 1950 1950 regm_t regm; … … 2669 2669 { 2670 2670 #define NUM 4 2671 #define SMAX 302671 #define SMAX 64 2672 2672 static char str[NUM][SMAX + 1]; 2673 2673 static int i; … … 2689 2689 s = p; 2690 2690 *p = 0; 2691 for (j = 0; j < 16; j++)2691 for (j = 0; j < 23; j++) 2692 2692 { 2693 2693 if (mask[j] & rm) branches/dmd-1.x/src/backend/cgen.c
r487 r552 274 274 cs.Iop = op; 275 275 cs.Iflags = 0; 276 cs.I jty= 0;276 cs.Irex = 0; 277 277 if (op != JMP) /* if not already long branch */ 278 278 cs.Iflags = CFjmp16; /* assume long branch for op = 0x7x */ … … 317 317 cs.Irm = rm; 318 318 cs.Iflags = 0; 319 cs.I jty= 0;319 cs.Irex = 0; 320 320 cs.IFL2 = FL2; 321 321 cs.IEVsym2 = s; … … 336 336 cs.Irm = rm; 337 337 cs.Iflags = CFoff; 338 cs.I jty= 0;338 cs.Irex = 0; 339 339 cs.IFL2 = FLconst; 340 340 cs.IEV2.Vuns = EV2; … … 355 355 cs.Isib = rm >> 8; 356 356 cs.Iflags = CFoff; 357 cs.I jty= 0;357 cs.Irex = 0; 358 358 cs.IFL1 = FL1; 359 359 cs.IEV1.Vuns = EV1; … … 374 374 cs.Isib = rm >> 8; 375 375 cs.Iflags = CFoff; 376 cs.I jty= 0;376 cs.Irex = 0; 377 377 cs.IFL1 = FL1; 378 378 cs.IEV1.Vuns = EV1; … … 399 399 cs.Iop = LEA; 400 400 cs.Iflags = 0; 401 cs.I jty= 0;401 cs.Irex = 0; 402 402 buildEA(&cs,r2,r2,4,0); 403 403 cs.Irm |= modregrm(0,r1,0); … … 428 428 cs.Iop2 = ESClinnum; 429 429 cs.Iflags = 0; 430 cs.I jty= 0;430 cs.Irex = 0; 431 431 cs.IFL1 = 0; 432 432 cs.IFL2 = 0; … … 466 466 cs.Iop2 = ESCadjesp; 467 467 cs.Iflags = 0; 468 cs.I jty= 0;468 cs.Irex = 0; 469 469 cs.IEV2.Vint = offset; 470 470 return gen(c,&cs); branches/dmd-1.x/src/backend/cgsched.c
r487 r552 91 91 if (config.target_scheduler >= TARGET_80486) 92 92 { 93 *pc = peephole(*pc,0); 93 if (!I64) 94 *pc = peephole(*pc,0); 94 95 if (I32) // forget about 16 bit code 95 96 { … … 154 155 155 156 #define F mPSW // flags 156 #define EA 0x10000 157 #define R 0x20000 // register (reg of modregrm field)158 #define N 0x40000 // other things modified, not swappable159 #define B 0x80000 // it's a byte operation160 #define C 0x100000 // floating point flags157 #define EA 0x100000 158 #define R 0x200000 // register (reg of modregrm field) 159 #define N 0x400000 // other things modified, not swappable 160 #define B 0x800000 // it's a byte operation 161 #define C 0x1000000 // floating point flags 161 162 #define S mST0 // floating point stack 162 163 … … 1875 1876 1876 1877 // If referring to distinct types, then no dependency 1877 if (c1->I jty && c2->Ijty && c1->Ijty != c2->Ijty)1878 if (c1->Irex && c2->Irex && c1->Irex != c2->Irex) 1878 1879 goto Lswap; 1879 1880 branches/dmd-1.x/src/backend/cod1.c
r493 r552 536 536 assert(e); 537 537 cs->Iflags = 0; 538 cs->I jty= 0;538 cs->Irex = 0; 539 539 cs->Iop = op; 540 540 if (I32 && op >= 0x100) /* if 2 byte opcode */ … … 724 724 pcs->IFL1 = fl; 725 725 pcs->Iflags = CFoff; /* only want offsets */ 726 pcs->I jty= 0;726 pcs->Irex = 0; 727 727 pcs->IEVoffset1 = 0; 728 728 ty = e->Ety; … … 2707 2707 c = CNIL; 2708 2708 cs.Iflags = 0; 2709 cs.I jty= 0;2709 cs.Irex = 0; 2710 2710 switch (e->Eoper) 2711 2711 { … … 3301 3301 sz = tysize[tym]; 3302 3302 cs.Iflags = 0; 3303 cs.I jty= 0;3303 cs.Irex = 0; 3304 3304 if (*pretregs == mPSW) 3305 3305 { branches/dmd-1.x/src/backend/cod2.c
r428 r552 149 149 word = (I32 && sz == SHORTSIZE) ? CFopsize : 0; 150 150 cs.Iflags = 0; 151 cs.I jty= 0;151 cs.Irex = 0; 152 152 test = FALSE; /* assume we destroyed lvalue */ 153 153 cr = CNIL; /* initialize */ … … 383 383 cs.Isib = modregrm(ss,reg1,reg2); 384 384 cs.Iflags = CFoff; 385 cs.I jty= 0;385 cs.Irex = 0; 386 386 cs.IFL1 = FLconst; 387 387 cs.IEV1.Vuns = edisp->EV.Vuns; … … 740 740 keepregs = 0; 741 741 cs.Iflags = 0; 742 cs.I jty= 0;742 cs.Irex = 0; 743 743 c = cg = cr = CNIL; // initialize 744 744 e2 = e->E2; … … 1653 1653 cs.Iop2 = ESCmark2; 1654 1654 cs.Iflags = 0; 1655 cs.I jty= 0;1655 cs.Irex = 0; 1656 1656 c1 = cat(gen(CNIL,&cs),c1); 1657 1657 cs.Iop2 = ESCrelease2; … … 3629 3629 3630 3630 cs.Iflags = 0; 3631 cs.I jty= 0;3631 cs.Irex = 0; 3632 3632 assert(e->Eoper == OPvar || e->Eoper == OPrelconst); 3633 3633 fl = el_fl(e); … … 3667 3667 css.Irm = modregrm(0, reg, BPRM); 3668 3668 css.Iflags = CFgs; 3669 css.I jty= 0;3669 css.Irex = 0; 3670 3670 css.IFL1 = FLconst; 3671 3671 css.IEV1.Vuns = 0; … … 3677 3677 cs.Irm = modregrm(3,0,reg); 3678 3678 cs.Iflags = CFoff; 3679 css.I jty= 0;3679 css.Irex = 0; 3680 3680 cs.IFL2 = fl; 3681 3681 cs.IEVsym2 = e->EV.sp.Vsym; … … 3687 3687 cs.Irm = modregrm(0,reg,BPRM); 3688 3688 cs.Iflags = CFoff; 3689 css.I jty= 0;3689 css.Irex = 0; 3690 3690 cs.IFL1 = fl; 3691 3691 cs.IEVsym1 = e->EV.sp.Vsym; … … 4376 4376 cs.Iop2 = ESCmark; 4377 4377 cs.Iflags = 0; 4378 cs.I jty= 0;4378 cs.Irex = 0; 4379 4379 c = gen(CNIL,&cs); 4380 4380 c = cat(c,codelem(e->E2,pretregs,FALSE)); … … 4414 4414 cs.Iop2 = ESCctor; 4415 4415 cs.Iflags = 0; 4416 cs.I jty= 0;4416 cs.Irex = 0; 4417 4417 cs.IFL1 = FLctor; 4418 4418 cs.IEV1.Vtor = e; … … 4446 4446 cs.Iop2 = ESCdtor; 4447 4447 cs.Iflags = 0; 4448 cs.I jty= 0;4448 cs.Irex = 0; 4449 4449 cs.IFL1 = FLdtor; 4450 4450 cs.IEV1.Vtor = e; branches/dmd-1.x/src/backend/cod3.c
r487 r552 1032 1032 cs.Iop2 = ESCframeptr; 1033 1033 cs.Iflags = 0; 1034 cs.I jty= 0;1034 cs.Irex = 0; 1035 1035 cs.Irm = reg; 1036 1036 c1 = gen(cg,&cs); … … 3950 3950 { 3951 3951 case FLconst: 3952 assert(sizeof(targ_size_t) == 4 );3952 assert(sizeof(targ_size_t) == 4 || sizeof(targ_size_t) == 8); 3953 3953 ad = * (targ_size_t *) uev; 3954 3954 L1: branches/dmd-1.x/src/backend/cod4.c
r487 r552 1685 1685 ce = CNIL; 1686 1686 cs.Iflags = (I32 && sz == SHORTSIZE) ? CFopsize : 0; 1687 cs.I jty= 0;1687 cs.Irex = 0; 1688 1688 if (sz > REGSIZE) 1689 1689 ce = gennop(ce); … … 2095 2095 2096 2096 cs.Iflags = 0; 2097 cs.I jty= 0;2097 cs.Irex = 0; 2098 2098 2099 2099 ce = gennop(CNIL); … … 2830 2830 cs.Irm = modregrm(3,0,reg); 2831 2831 cs.Iflags = 0; 2832 cs.I jty= 0;2832 cs.Irex = 0; 2833 2833 cs.IFL2 = FLconst; 2834 2834 cs.IEV2.Vuns = 16; branches/dmd-1.x/src/backend/code.h
r487 r552 33 33 #define DI 7 34 34 35 #define ES 9 36 #define PSW 10 37 #define STACK 11 // top of stack 38 #define MEM 12 // memory 39 #define OTHER 13 // other things 40 #define ST0 14 // 8087 top of stack register 41 #define ST01 15 // top two 8087 registers; for complex types 35 #define R8 8 36 #define R9 9 37 #define R10 10 38 #define R11 11 39 #define R12 12 40 #define R13 13 41 #define R14 14 42 #define R15 15 43 44 #define ES 16 45 #define PSW 17 46 #define STACK 18 // top of stack 47 #define MEM 19 // memory 48 #define OTHER 20 // other things 49 #define ST0 21 // 8087 top of stack register 50 #define ST01 22 // top two 8087 registers; for complex types 42 51 43 52 #define NOREG 100 // no register … … 60 69 #define mSI 0x40 61 70 #define mDI 0x80 62 #define mES (1 << ES) // 0x200 63 #define mPSW (1 << PSW) // 0x400 64 65 #define mSTACK (1 << STACK) // 0x800 66 #define mMEM (1 << MEM) // 0x1000 67 #define mOTHER (1 << OTHER) // 0x2000 68 69 #define mST0 (1 << ST0) // 0x4000 70 #define mST01 (1 << ST01) // 0x8000 71 #define mR8 (1 << R8) 72 #define mR9 (1 << R9) 73 #define mR10 (1 << R10) 74 #define mR11 (1 << R11) 75 #define mR12 (1 << R12) 76 #define mR13 (1 << R13) 77 #define mR14 (1 << R14) 78 #define mR15 (1 << R15) 79 80 #define mES (1 << ES) // 0x10000 81 #define mPSW (1 << PSW) // 0x20000 82 83 #define mSTACK (1 << STACK) // 0x40000 84 #define mMEM (1 << MEM) // 0x80000 85 #define mOTHER (1 << OTHER) // 0x100000 86 87 #define mST0 (1 << ST0) // 0x200000 88 #define mST01 (1 << ST01) // 0x400000 71 89 72 90 // Flags for getlvalue (must fit in regm_t) … … 213 231 #define NEWREG(x,r) ((x)=((x)&~(7<<3))|((r)<<3)) 214 232 #define genorreg(c,t,f) genregs((c),0x09,(f),(t)) 233 234 #define REX 0x40 // REX prefix byte, OR'd with the following bits: 235 #define REX_W 8 // 0 = default operand size, 1 = 64 bit operand size 236 #define REX_R 4 // high bit of reg field of modregrm 237 #define REX_X 2 // high bit of sib index reg 238 #define REX_B 1 // high bit of rm field, sib base reg, or opcode reg 215 239 216 240 /********************** … … 302 326 #endif 303 327 struct 304 { unsignedlen;328 { size_t len; 305 329 char *bytes; 306 330 } as; // asm node (FLasm) … … 336 360 #define CFSEG (CFes | CFss | CFds | CFcs | CFfs | CFgs) 337 361 338 unsigned char I jty; // type of operand, 0 if unknown362 unsigned char Irex; // REX prefix 339 363 340 364 unsigned char Iop; … … 365 389 void print(); // pretty-printer 366 390 367 code() { I jty= 0; Isib = 0; } // constructor391 code() { Irex = 0; Isib = 0; } // constructor 368 392 }; 369 393 branches/dmd-1.x/src/backend/elfobj.c
r428 r552 1821 1821 */ 1822 1822 1823 int elf_data_start(Symbol *sdata, int datasize,int seg)1823 int elf_data_start(Symbol *sdata, targ_size_t datasize, int seg) 1824 1824 { 1825 1825 targ_size_t alignbytes; … … 1973 1973 IDXSTR namidx; 1974 1974 int symtype,sectype; 1975 int size;1975 targ_size_t size; 1976 1976 1977 1977 //dbg_printf("objextern('%s') %x\n",s->Sident,s->Svalue); branches/dmd-1.x/src/backend/global.h
r457 r552 52 52 */ 53 53 54 CEXTERN const unsigned mask[ 16];54 CEXTERN const unsigned mask[32]; 55 55 CEXTERN const unsigned long maskl[32]; 56 56 … … 448 448 449 449 /* debug.c */ 450 CEXTERN const char __near*regstring[];450 CEXTERN const char *regstring[]; 451 451 452 452 void WRclass(enum SC c); … … 537 537 #endif 538 538 void elf_func_start(Symbol *sfunc); 539 int elf_data_start(Symbol *sdata, int datasize,int seg);539 int elf_data_start(Symbol *sdata, targ_size_t datasize, int seg); 540 540 void elf_func_term(Symbol *sfunc); 541 541 unsigned elf_addstr(Outbuffer *strtab, const char *); branches/dmd-1.x/src/backend/nteh.c
r428 r552 419 419 cs.Iop = 0x68; 420 420 cs.Iflags = 0; 421 cs.I jty= 0;421 cs.Irex = 0; 422 422 cs.IFL2 = FLconst; 423 423 cs.IEV2.Vint = -2; … … 440 440 cs.Iop = 0x68; 441 441 cs.Iflags = 0; 442 cs.I jty= 0;442 cs.Irex = 0; 443 443 cs.IFL2 = FLconst; 444 444 cs.IEV2.Vint = -1; … … 475 475 cs.Irm = modregrm(0,6,BPRM); 476 476 cs.Iflags = CFfs; 477 cs.I jty= 0;477 cs.Irex = 0; 478 478 cs.IFL1 = FLextern; 479 479 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 485 485 cs.Irm = modregrm(0,DX,BPRM); 486 486 cs.Iflags = CFfs; 487 cs.I jty= 0;487 cs.Irex = 0; 488 488 cs.IFL1 = FLextern; 489 489 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 530 530 cs.Irm = modregrm(2,reg,BPRM); 531 531 cs.Iflags = 0; 532 cs.I jty= 0;532 cs.Irex = 0; 533 533 cs.IFL1 = FLconst; 534 534 // EBP offset of __context.prev … … 555 555 cs.Irm = modregrm(2,SP,BPRM); 556 556 cs.Iflags = 0; 557 cs.I jty= 0;557 cs.Irex = 0; 558 558 cs.IFL1 = FLconst; 559 559 // EBP offset of __context.esp … … 586 586 cs.Irm = modregrm(2,AX,BPRM); 587 587 cs.Iflags = 0; 588 cs.I jty= 0;588 cs.Irex = 0; 589 589 cs.IFL1 = FLconst; 590 590 // EBP offset of __context.info … … 693 693 cs.Iop = 0x68; 694 694 cs.Iflags = CFoff; 695 cs.I jty= 0;695 cs.Irex = 0; 696 696 cs.IFL2 = FLextern; 697 697 cs.IEVsym2 = rtlsym[RTLSYM_CPP_LONGJMP]; … … 724 724 cs.Irm = modregrm(2,6,BPRM); 725 725 cs.Iflags = 0; 726 cs.I jty= 0;726 cs.Irex = 0; 727 727 cs.IFL1 = FLbprel; 728 728 cs.IEVsym1 = nteh_contextsym(); … … 734 734 cs.Iop = 0x68; 735 735 cs.Iflags = CFoff; 736 cs.I jty= 0;736 cs.Irex = 0; 737 737 cs.IFL2 = FLextern; 738 738 cs.IEVsym2 = rtlsym[RTLSYM_LONGJMP]; … … 756 756 cs.Iop = 0x68; 757 757 cs.Iflags = 0; 758 cs.I jty= 0;758 cs.Irex = 0; 759 759 cs.IFL2 = FLconst; 760 760 cs.IEV2.Vint = flag; … … 811 811 cs.Irm = modregrm(2,reg,BPRM); 812 812 cs.Iflags = 0; 813 cs.I jty= 0;813 cs.Irex = 0; 814 814 cs.IFL1 = FLconst; 815 815 // EBP offset of __context.prev … … 935 935 cs.Irm = modregrm(0,6,BPRM); 936 936 cs.Iflags = CFfs; 937 cs.I jty= 0;937 cs.Irex = 0; 938 938 cs.IFL1 = FLextern; 939 939 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 945 945 cs.Irm = modregrm(0,DX,BPRM); 946 946 cs.Iflags = CFfs; 947 cs.I jty= 0;947 cs.Irex = 0; 948 948 cs.IFL1 = FLextern; 949 949 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 1004 1004 cs.Irm = modregrm(0,0,BPRM); 1005 1005 cs.Iflags = CFfs; 1006 cs.I jty= 0;1006 cs.Irex = 0; 1007 1007 cs.IFL1 = FLextern; 1008 1008 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; branches/dmd-1.x/src/backend/var.c
r428 r552 1 1 // Copyright (C) 1985-1998 by Symantec 2 // Copyright (C) 2000-20 09by Digital Mars2 // Copyright (C) 2000-2010 by Digital Mars 3 3 // All Rights Reserved 4 4 // http://www.digitalmars.com … … 174 174 */ 175 175 176 const unsigned mask[16] = 177 {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,0x8000}; 176 const unsigned mask[32] = 177 {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,0x8000, 178 0x10000,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x800000, 179 0x1000000,0x2000000,0x4000000,0x8000000, 180 0x10000000,0x20000000,0x40000000,0x80000000}; 178 181 179 182 #if 0 … … 233 236 /* From debug.c */ 234 237 #if DEBUG 235 const char *regstring[16] = {"AX","CX","DX","BX","SP","BP","SI","DI", 236 "8","ES","PSW","STACK","MEM","OTHER", 238 const char *regstring[23] = {"AX","CX","DX","BX","SP","BP","SI","DI", 239 "R8","R9","R10","R11","R12","R13","R14","R15", 240 "ES","PSW","STACK","MEM","OTHER", 237 241 "ST0", "ST01"}; 238 242 #endif trunk/src/backend/cdef.h
r501 r552 478 478 #define REGMASK 0xFFFF 479 479 480 #if TARGET_LINUX 481 typedef targ_llong targ_ptrdiff_t; /* ptrdiff_t for target machine */ 482 typedef targ_ullong targ_size_t; /* size_t for the target machine */ 483 #else 480 484 typedef targ_int targ_ptrdiff_t; /* ptrdiff_t for target machine */ 481 485 typedef targ_uns targ_size_t; /* size_t for the target machine */ 486 #endif 482 487 483 488 /* Enable/disable various features … … 561 566 #endif 562 567 563 #define REGMAX 1 0// registers are numbered 0..10568 #define REGMAX 17 // registers are numbered 0..10 564 569 565 570 typedef unsigned long tym_t; // data type big enough for type masks … … 860 865 struct elem; 861 866 862 typedef unsigned short regm_t;// Register mask type867 typedef unsigned regm_t; // Register mask type 863 868 struct immed_t 864 869 { targ_int value[REGMAX]; // immediate values in registers trunk/src/backend/cg87.c
r428 r552 1531 1531 else 1532 1532 cs.Iflags = 0; 1533 cs.I jty= 0;1533 cs.Irex = 0; 1534 1534 opr = oprev[op + 1]; 1535 1535 ty = tybasic(e->Ety); … … 1888 1888 c2 = loadea(e->E1,&cs,op1,op2,0,0,0); 1889 1889 #else 1890 cs.I jty= 0;1890 cs.Irex = 0; 1891 1891 cs.Iflags = 0; 1892 1892 cs.Iop = op1; … … 1968 1968 assert(e->Eoper == OPeq); 1969 1969 cs.Iflags = ADDFWAIT() ? CFwait : 0; 1970 cs.I jty= 0;1970 cs.Irex = 0; 1971 1971 retregs = mST01 | (*pretregs & mPSW); 1972 1972 c1 = codelem(e->E2,&retregs,FALSE); … … 2005 2005 { 2006 2006 cs.Iflags = 0; 2007 cs.I jty= 0;2007 cs.Irex = 0; 2008 2008 cs.Iop = op1; 2009 2009 c2 = getlvalue(&cs, e->E1, 0); … … 3180 3180 cs.Iop = 0xD9; 3181 3181 cs.Iflags = CFoff; 3182 cs.I jty= 0;3182 cs.Irex = 0; 3183 3183 cs.IEVsym1 = rnddir; 3184 3184 cs.IFL1 = rnddir->Sfl; trunk/src/backend/cgcod.c
r490 r552 1532 1532 case TYllong: 1533 1533 case TYullong: 1534 return I 32 ? mDX | mAX : DOUBLEREGS;1534 return I64 ? mAX : (I32 ? mDX | mAX : DOUBLEREGS); 1535 1535 case TYldouble: 1536 1536 case TYildouble: … … 1607 1607 1608 1608 void freenode(elem *e) 1609 { registerunsigned i;1609 { unsigned i; 1610 1610 1611 1611 elem_debug(e); … … 1946 1946 1947 1947 STATIC code * cse_save(regm_t ms) 1948 { registerunsigned reg,i,op;1948 { unsigned reg,i,op; 1949 1949 code *c = NULL; 1950 1950 regm_t regm; … … 2669 2669 { 2670 2670 #define NUM 4 2671 #define SMAX 302671 #define SMAX 64 2672 2672 static char str[NUM][SMAX + 1]; 2673 2673 static int i; … … 2689 2689 s = p; 2690 2690 *p = 0; 2691 for (j = 0; j < 16; j++)2691 for (j = 0; j < 23; j++) 2692 2692 { 2693 2693 if (mask[j] & rm) trunk/src/backend/cgen.c
r487 r552 274 274 cs.Iop = op; 275 275 cs.Iflags = 0; 276 cs.I jty= 0;276 cs.Irex = 0; 277 277 if (op != JMP) /* if not already long branch */ 278 278 cs.Iflags = CFjmp16; /* assume long branch for op = 0x7x */ … … 317 317 cs.Irm = rm; 318 318 cs.Iflags = 0; 319 cs.I jty= 0;319 cs.Irex = 0; 320 320 cs.IFL2 = FL2; 321 321 cs.IEVsym2 = s; … … 336 336 cs.Irm = rm; 337 337 cs.Iflags = CFoff; 338 cs.I jty= 0;338 cs.Irex = 0; 339 339 cs.IFL2 = FLconst; 340 340 cs.IEV2.Vuns = EV2; … … 355 355 cs.Isib = rm >> 8; 356 356 cs.Iflags = CFoff; 357 cs.I jty= 0;357 cs.Irex = 0; 358 358 cs.IFL1 = FL1; 359 359 cs.IEV1.Vuns = EV1; … … 374 374 cs.Isib = rm >> 8; 375 375 cs.Iflags = CFoff; 376 cs.I jty= 0;376 cs.Irex = 0; 377 377 cs.IFL1 = FL1; 378 378 cs.IEV1.Vuns = EV1; … … 399 399 cs.Iop = LEA; 400 400 cs.Iflags = 0; 401 cs.I jty= 0;401 cs.Irex = 0; 402 402 buildEA(&cs,r2,r2,4,0); 403 403 cs.Irm |= modregrm(0,r1,0); … … 428 428 cs.Iop2 = ESClinnum; 429 429 cs.Iflags = 0; 430 cs.I jty= 0;430 cs.Irex = 0; 431 431 cs.IFL1 = 0; 432 432 cs.IFL2 = 0; … … 466 466 cs.Iop2 = ESCadjesp; 467 467 cs.Iflags = 0; 468 cs.I jty= 0;468 cs.Irex = 0; 469 469 cs.IEV2.Vint = offset; 470 470 return gen(c,&cs); trunk/src/backend/cgsched.c
r487 r552 91 91 if (config.target_scheduler >= TARGET_80486) 92 92 { 93 *pc = peephole(*pc,0); 93 if (!I64) 94 *pc = peephole(*pc,0); 94 95 if (I32) // forget about 16 bit code 95 96 { … … 154 155 155 156 #define F mPSW // flags 156 #define EA 0x10000 157 #define R 0x20000 // register (reg of modregrm field)158 #define N 0x40000 // other things modified, not swappable159 #define B 0x80000 // it's a byte operation160 #define C 0x100000 // floating point flags157 #define EA 0x100000 158 #define R 0x200000 // register (reg of modregrm field) 159 #define N 0x400000 // other things modified, not swappable 160 #define B 0x800000 // it's a byte operation 161 #define C 0x1000000 // floating point flags 161 162 #define S mST0 // floating point stack 162 163 … … 1875 1876 1876 1877 // If referring to distinct types, then no dependency 1877 if (c1->I jty && c2->Ijty && c1->Ijty != c2->Ijty)1878 if (c1->Irex && c2->Irex && c1->Irex != c2->Irex) 1878 1879 goto Lswap; 1879 1880 trunk/src/backend/cod1.c
r490 r552 536 536 assert(e); 537 537 cs->Iflags = 0; 538 cs->I jty= 0;538 cs->Irex = 0; 539 539 cs->Iop = op; 540 540 if (I32 && op >= 0x100) /* if 2 byte opcode */ … … 724 724 pcs->IFL1 = fl; 725 725 pcs->Iflags = CFoff; /* only want offsets */ 726 pcs->I jty= 0;726 pcs->Irex = 0; 727 727 pcs->IEVoffset1 = 0; 728 728 ty = e->Ety; … … 2707 2707 c = CNIL; 2708 2708 cs.Iflags = 0; 2709 cs.I jty= 0;2709 cs.Irex = 0; 2710 2710 switch (e->Eoper) 2711 2711 { … … 3301 3301 sz = tysize[tym]; 3302 3302 cs.Iflags = 0; 3303 cs.I jty= 0;3303 cs.Irex = 0; 3304 3304 if (*pretregs == mPSW) 3305 3305 { trunk/src/backend/cod2.c
r428 r552 149 149 word = (I32 && sz == SHORTSIZE) ? CFopsize : 0; 150 150 cs.Iflags = 0; 151 cs.I jty= 0;151 cs.Irex = 0; 152 152 test = FALSE; /* assume we destroyed lvalue */ 153 153 cr = CNIL; /* initialize */ … … 383 383 cs.Isib = modregrm(ss,reg1,reg2); 384 384 cs.Iflags = CFoff; 385 cs.I jty= 0;385 cs.Irex = 0; 386 386 cs.IFL1 = FLconst; 387 387 cs.IEV1.Vuns = edisp->EV.Vuns; … … 740 740 keepregs = 0; 741 741 cs.Iflags = 0; 742 cs.I jty= 0;742 cs.Irex = 0; 743 743 c = cg = cr = CNIL; // initialize 744 744 e2 = e->E2; … … 1653 1653 cs.Iop2 = ESCmark2; 1654 1654 cs.Iflags = 0; 1655 cs.I jty= 0;1655 cs.Irex = 0; 1656 1656 c1 = cat(gen(CNIL,&cs),c1); 1657 1657 cs.Iop2 = ESCrelease2; … … 3629 3629 3630 3630 cs.Iflags = 0; 3631 cs.I jty= 0;3631 cs.Irex = 0; 3632 3632 assert(e->Eoper == OPvar || e->Eoper == OPrelconst); 3633 3633 fl = el_fl(e); … … 3667 3667 css.Irm = modregrm(0, reg, BPRM); 3668 3668 css.Iflags = CFgs; 3669 css.I jty= 0;3669 css.Irex = 0; 3670 3670 css.IFL1 = FLconst; 3671 3671 css.IEV1.Vuns = 0; … … 3677 3677 cs.Irm = modregrm(3,0,reg); 3678 3678 cs.Iflags = CFoff; 3679 css.I jty= 0;3679 css.Irex = 0; 3680 3680 cs.IFL2 = fl; 3681 3681 cs.IEVsym2 = e->EV.sp.Vsym; … … 3687 3687 cs.Irm = modregrm(0,reg,BPRM); 3688 3688 cs.Iflags = CFoff; 3689 css.I jty= 0;3689 css.Irex = 0; 3690 3690 cs.IFL1 = fl; 3691 3691 cs.IEVsym1 = e->EV.sp.Vsym; … … 4376 4376 cs.Iop2 = ESCmark; 4377 4377 cs.Iflags = 0; 4378 cs.I jty= 0;4378 cs.Irex = 0; 4379 4379 c = gen(CNIL,&cs); 4380 4380 c = cat(c,codelem(e->E2,pretregs,FALSE)); … … 4414 4414 cs.Iop2 = ESCctor; 4415 4415 cs.Iflags = 0; 4416 cs.I jty= 0;4416 cs.Irex = 0; 4417 4417 cs.IFL1 = FLctor; 4418 4418 cs.IEV1.Vtor = e; … … 4446 4446 cs.Iop2 = ESCdtor; 4447 4447 cs.Iflags = 0; 4448 cs.I jty= 0;4448 cs.Irex = 0; 4449 4449 cs.IFL1 = FLdtor; 4450 4450 cs.IEV1.Vtor = e; trunk/src/backend/cod3.c
r487 r552 1032 1032 cs.Iop2 = ESCframeptr; 1033 1033 cs.Iflags = 0; 1034 cs.I jty= 0;1034 cs.Irex = 0; 1035 1035 cs.Irm = reg; 1036 1036 c1 = gen(cg,&cs); … … 3950 3950 { 3951 3951 case FLconst: 3952 assert(sizeof(targ_size_t) == 4 );3952 assert(sizeof(targ_size_t) == 4 || sizeof(targ_size_t) == 8); 3953 3953 ad = * (targ_size_t *) uev; 3954 3954 L1: trunk/src/backend/cod4.c
r487 r552 1685 1685 ce = CNIL; 1686 1686 cs.Iflags = (I32 && sz == SHORTSIZE) ? CFopsize : 0; 1687 cs.I jty= 0;1687 cs.Irex = 0; 1688 1688 if (sz > REGSIZE) 1689 1689 ce = gennop(ce); … … 2095 2095 2096 2096 cs.Iflags = 0; 2097 cs.I jty= 0;2097 cs.Irex = 0; 2098 2098 2099 2099 ce = gennop(CNIL); … … 2830 2830 cs.Irm = modregrm(3,0,reg); 2831 2831 cs.Iflags = 0; 2832 cs.I jty= 0;2832 cs.Irex = 0; 2833 2833 cs.IFL2 = FLconst; 2834 2834 cs.IEV2.Vuns = 16; trunk/src/backend/code.h
r487 r552 33 33 #define DI 7 34 34 35 #define ES 9 36 #define PSW 10 37 #define STACK 11 // top of stack 38 #define MEM 12 // memory 39 #define OTHER 13 // other things 40 #define ST0 14 // 8087 top of stack register 41 #define ST01 15 // top two 8087 registers; for complex types 35 #define R8 8 36 #define R9 9 37 #define R10 10 38 #define R11 11 39 #define R12 12 40 #define R13 13 41 #define R14 14 42 #define R15 15 43 44 #define ES 16 45 #define PSW 17 46 #define STACK 18 // top of stack 47 #define MEM 19 // memory 48 #define OTHER 20 // other things 49 #define ST0 21 // 8087 top of stack register 50 #define ST01 22 // top two 8087 registers; for complex types 42 51 43 52 #define NOREG 100 // no register … … 60 69 #define mSI 0x40 61 70 #define mDI 0x80 62 #define mES (1 << ES) // 0x200 63 #define mPSW (1 << PSW) // 0x400 64 65 #define mSTACK (1 << STACK) // 0x800 66 #define mMEM (1 << MEM) // 0x1000 67 #define mOTHER (1 << OTHER) // 0x2000 68 69 #define mST0 (1 << ST0) // 0x4000 70 #define mST01 (1 << ST01) // 0x8000 71 #define mR8 (1 << R8) 72 #define mR9 (1 << R9) 73 #define mR10 (1 << R10) 74 #define mR11 (1 << R11) 75 #define mR12 (1 << R12) 76 #define mR13 (1 << R13) 77 #define mR14 (1 << R14) 78 #define mR15 (1 << R15) 79 80 #define mES (1 << ES) // 0x10000 81 #define mPSW (1 << PSW) // 0x20000 82 83 #define mSTACK (1 << STACK) // 0x40000 84 #define mMEM (1 << MEM) // 0x80000 85 #define mOTHER (1 << OTHER) // 0x100000 86 87 #define mST0 (1 << ST0) // 0x200000 88 #define mST01 (1 << ST01) // 0x400000 71 89 72 90 // Flags for getlvalue (must fit in regm_t) … … 213 231 #define NEWREG(x,r) ((x)=((x)&~(7<<3))|((r)<<3)) 214 232 #define genorreg(c,t,f) genregs((c),0x09,(f),(t)) 233 234 #define REX 0x40 // REX prefix byte, OR'd with the following bits: 235 #define REX_W 8 // 0 = default operand size, 1 = 64 bit operand size 236 #define REX_R 4 // high bit of reg field of modregrm 237 #define REX_X 2 // high bit of sib index reg 238 #define REX_B 1 // high bit of rm field, sib base reg, or opcode reg 215 239 216 240 /********************** … … 302 326 #endif 303 327 struct 304 { unsignedlen;328 { size_t len; 305 329 char *bytes; 306 330 } as; // asm node (FLasm) … … 336 360 #define CFSEG (CFes | CFss | CFds | CFcs | CFfs | CFgs) 337 361 338 unsigned char I jty; // type of operand, 0 if unknown362 unsigned char Irex; // REX prefix 339 363 340 364 unsigned char Iop; … … 365 389 void print(); // pretty-printer 366 390 367 code() { I jty= 0; Isib = 0; } // constructor391 code() { Irex = 0; Isib = 0; } // constructor 368 392 }; 369 393 trunk/src/backend/elfobj.c
r428 r552 1821 1821 */ 1822 1822 1823 int elf_data_start(Symbol *sdata, int datasize,int seg)1823 int elf_data_start(Symbol *sdata, targ_size_t datasize, int seg) 1824 1824 { 1825 1825 targ_size_t alignbytes; … … 1973 1973 IDXSTR namidx; 1974 1974 int symtype,sectype; 1975 int size;1975 targ_size_t size; 1976 1976 1977 1977 //dbg_printf("objextern('%s') %x\n",s->Sident,s->Svalue); trunk/src/backend/global.h
r454 r552 52 52 */ 53 53 54 CEXTERN const unsigned mask[ 16];54 CEXTERN const unsigned mask[32]; 55 55 CEXTERN const unsigned long maskl[32]; 56 56 … … 448 448 449 449 /* debug.c */ 450 CEXTERN const char __near*regstring[];450 CEXTERN const char *regstring[]; 451 451 452 452 void WRclass(enum SC c); … … 537 537 #endif 538 538 void elf_func_start(Symbol *sfunc); 539 int elf_data_start(Symbol *sdata, int datasize,int seg);539 int elf_data_start(Symbol *sdata, targ_size_t datasize, int seg); 540 540 void elf_func_term(Symbol *sfunc); 541 541 unsigned elf_addstr(Outbuffer *strtab, const char *); trunk/src/backend/nteh.c
r428 r552 419 419 cs.Iop = 0x68; 420 420 cs.Iflags = 0; 421 cs.I jty= 0;421 cs.Irex = 0; 422 422 cs.IFL2 = FLconst; 423 423 cs.IEV2.Vint = -2; … … 440 440 cs.Iop = 0x68; 441 441 cs.Iflags = 0; 442 cs.I jty= 0;442 cs.Irex = 0; 443 443 cs.IFL2 = FLconst; 444 444 cs.IEV2.Vint = -1; … … 475 475 cs.Irm = modregrm(0,6,BPRM); 476 476 cs.Iflags = CFfs; 477 cs.I jty= 0;477 cs.Irex = 0; 478 478 cs.IFL1 = FLextern; 479 479 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 485 485 cs.Irm = modregrm(0,DX,BPRM); 486 486 cs.Iflags = CFfs; 487 cs.I jty= 0;487 cs.Irex = 0; 488 488 cs.IFL1 = FLextern; 489 489 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 530 530 cs.Irm = modregrm(2,reg,BPRM); 531 531 cs.Iflags = 0; 532 cs.I jty= 0;532 cs.Irex = 0; 533 533 cs.IFL1 = FLconst; 534 534 // EBP offset of __context.prev … … 555 555 cs.Irm = modregrm(2,SP,BPRM); 556 556 cs.Iflags = 0; 557 cs.I jty= 0;557 cs.Irex = 0; 558 558 cs.IFL1 = FLconst; 559 559 // EBP offset of __context.esp … … 586 586 cs.Irm = modregrm(2,AX,BPRM); 587 587 cs.Iflags = 0; 588 cs.I jty= 0;588 cs.Irex = 0; 589 589 cs.IFL1 = FLconst; 590 590 // EBP offset of __context.info … … 693 693 cs.Iop = 0x68; 694 694 cs.Iflags = CFoff; 695 cs.I jty= 0;695 cs.Irex = 0; 696 696 cs.IFL2 = FLextern; 697 697 cs.IEVsym2 = rtlsym[RTLSYM_CPP_LONGJMP]; … … 724 724 cs.Irm = modregrm(2,6,BPRM); 725 725 cs.Iflags = 0; 726 cs.I jty= 0;726 cs.Irex = 0; 727 727 cs.IFL1 = FLbprel; 728 728 cs.IEVsym1 = nteh_contextsym(); … … 734 734 cs.Iop = 0x68; 735 735 cs.Iflags = CFoff; 736 cs.I jty= 0;736 cs.Irex = 0; 737 737 cs.IFL2 = FLextern; 738 738 cs.IEVsym2 = rtlsym[RTLSYM_LONGJMP]; … … 756 756 cs.Iop = 0x68; 757 757 cs.Iflags = 0; 758 cs.I jty= 0;758 cs.Irex = 0; 759 759 cs.IFL2 = FLconst; 760 760 cs.IEV2.Vint = flag; … … 811 811 cs.Irm = modregrm(2,reg,BPRM); 812 812 cs.Iflags = 0; 813 cs.I jty= 0;813 cs.Irex = 0; 814 814 cs.IFL1 = FLconst; 815 815 // EBP offset of __context.prev … … 935 935 cs.Irm = modregrm(0,6,BPRM); 936 936 cs.Iflags = CFfs; 937 cs.I jty= 0;937 cs.Irex = 0; 938 938 cs.IFL1 = FLextern; 939 939 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 945 945 cs.Irm = modregrm(0,DX,BPRM); 946 946 cs.Iflags = CFfs; 947 cs.I jty= 0;947 cs.Irex = 0; 948 948 cs.IFL1 = FLextern; 949 949 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; … … 1004 1004 cs.Irm = modregrm(0,0,BPRM); 1005 1005 cs.Iflags = CFfs; 1006 cs.I jty= 0;1006 cs.Irex = 0; 1007 1007 cs.IFL1 = FLextern; 1008 1008 cs.IEVsym1 = rtlsym[RTLSYM_EXCEPT_LIST]; trunk/src/backend/var.c
r428 r552 1 1 // Copyright (C) 1985-1998 by Symantec 2 // Copyright (C) 2000-20 09by Digital Mars2 // Copyright (C) 2000-2010 by Digital Mars 3 3 // All Rights Reserved 4 4 // http://www.digitalmars.com … … 174 174 */ 175 175 176 const unsigned mask[16] = 177 {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,0x8000}; 176 const unsigned mask[32] = 177 {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,0x8000, 178 0x10000,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x800000, 179 0x1000000,0x2000000,0x4000000,0x8000000, 180 0x10000000,0x20000000,0x40000000,0x80000000}; 178 181 179 182 #if 0 … … 233 236 /* From debug.c */ 234 237 #if DEBUG 235 const char *regstring[16] = {"AX","CX","DX","BX","SP","BP","SI","DI", 236 "8","ES","PSW","STACK","MEM","OTHER", 238 const char *regstring[23] = {"AX","CX","DX","BX","SP","BP","SI","DI", 239 "R8","R9","R10","R11","R12","R13","R14","R15", 240 "ES","PSW","STACK","MEM","OTHER", 237 241 "ST0", "ST01"}; 238 242 #endif
