diff --git a/src/backend/cc.h b/src/backend/cc.h index c94d99ac1131..152a88338c24 100644 --- a/src/backend/cc.h +++ b/src/backend/cc.h @@ -82,7 +82,7 @@ enum WM WM_badnumber = 24, WM_ccast = 25, WM_obsolete = 26, -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS WM_skip_attribute = 27, // skip GNUC attribute specification WM_warning_message = 28, // preprocessor warning message WM_bad_vastart = 29, // args for builtin va_start bad @@ -146,7 +146,7 @@ enum LANG #include "msgs2.h" #endif #include "ty.h" -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #include "../tk/mem.h" #else #include "mem.h" @@ -745,7 +745,7 @@ typedef struct FUNC_S #define Fnteh 0x08 // uses NT Structured EH #define Fdoinline 0x40 // do inline walk #define Foverridden 0x80 // ignore for overriding purposes -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define Fnowrite 0x100 // SCinline should never output definition #else #define Fjmonitor 0x100 // Jupiter synchronized function @@ -800,7 +800,7 @@ typedef struct FUNC_S // of SCftexpspec explicit specializations Funcsym *Fsurrogatesym; // Fsurrogate: surrogate cast function -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS char *Fredirect; // redirect function name to this name in object #endif TARGET_structFUNC_S @@ -1325,7 +1325,7 @@ struct Symbol #define SFLmutable 0x100000 // SCmember or SCfield is mutable #define SFLdyninit 0x200000 // symbol has dynamic initializer #define SFLtmp 0x400000 // symbol is a generated temporary -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define SFLthunk 0x40000 // symbol is temporary for thunk #endif @@ -1544,7 +1544,7 @@ enum FL FLallocatmp, // temp for built-in alloca() FLstack, // offset from ESP rather than EBP FLdsymbol, // it's a Dsymbol -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS // Change this, update debug.c too FLgot, // global offset table entry outside this object file FLgotoff, // global offset table entry inside this object file diff --git a/src/backend/cdef.h b/src/backend/cdef.h index 6290d2638d44..600b9f82eb89 100644 --- a/src/backend/cdef.h +++ b/src/backend/cdef.h @@ -194,7 +194,7 @@ One and only one of these macros must be set by the makefile: // This is the default #ifndef TARGET_WINDOS -#define TARGET_WINDOS (!(TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS)) +#define TARGET_WINDOS (!(TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS)) #endif #if __GNUC__ @@ -479,7 +479,7 @@ typedef unsigned targ_uns; #define DOUBLESIZE 8 #if TARGET_OSX #define LNGDBLSIZE 16 // 80 bit reals -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define LNGDBLSIZE 12 // 80 bit reals #else #define LNGDBLSIZE 10 // 80 bit reals @@ -530,7 +530,7 @@ typedef targ_uns targ_size_t; /* size_t for the target machine */ #define OMFOBJ TARGET_WINDOS #endif #ifndef ELFOBJ -#define ELFOBJ (TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS) +#define ELFOBJ (TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS) #endif #ifndef MACHOBJ #define MACHOBJ TARGET_OSX @@ -725,9 +725,12 @@ struct Config #define EX_FREEBSD64 0x80000 #define EX_SOLARIS 0x100000 #define EX_SOLARIS64 0x200000 +#define EX_OPENBSD 0x400000 +#define EX_OPENBSD64 0x800000 #define EX_flat (EX_OS2 | EX_NT | EX_LINUX | EX_WIN64 | EX_LINUX64 | \ EX_OSX | EX_OSX64 | EX_FREEBSD | EX_FREEBSD64 | \ + EX_OPENBSD | EX_OPENBSD64 | \ EX_SOLARIS | EX_SOLARIS64) #define EX_dos (EX_DOSX | EX_ZPM | EX_RATIONAL | EX_PHARLAP | \ EX_COM | EX_MZ /*| EX_WIN16*/) @@ -781,7 +784,7 @@ struct Config #define CFG3relax 0x200 // relaxed type checking (C only) #define CFG3cpp 0x400 // C++ compile #define CFG3igninc 0x800 // ignore standard include directory -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define CFG3mars 0x1000 // use mars libs and headers #define NO_FAR (TRUE) // always ignore __far and __huge keywords #else @@ -793,7 +796,7 @@ struct Config #define CFG3cppcomment 0x8000 // allow C++ style comments #define CFG3wkfloat 0x10000 // make floating point references weak externs #define CFG3digraphs 0x20000 // support ANSI C++ digraphs -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define CFG3semirelax 0x40000 // moderate relaxed type checking #endif #define CFG3pic 0x80000 // position independent code @@ -1003,7 +1006,7 @@ union eve #define SYMBOLZERO #endif -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define UNIXFIELDS (unsigned)-1,(unsigned)-1,0,0, #elif TARGET_OSX #define UNIXFIELDS (unsigned)-1,(unsigned)-1,0,0,0, diff --git a/src/backend/cgcod.c b/src/backend/cgcod.c index be94083e4092..d679ebb1dd06 100644 --- a/src/backend/cgcod.c +++ b/src/backend/cgcod.c @@ -129,7 +129,7 @@ void codgen() csmax = 64; csextab = (struct CSE *) util_calloc(sizeof(struct CSE),csmax); functy = tybasic(funcsym_p->ty()); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (0 && config.flags3 & CFG3pic) { ALLREGS = ALLREGS_INIT_PIC; @@ -1012,7 +1012,7 @@ STATIC void blcodgen(block *bl) #endif if (config.flags2 & CFG2seh) c = cat(c,nteh_unwind(0,toindex)); -#if MARS && (TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS) +#if MARS && (TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS) else if (toindex + 1 <= fromindex) { //c = cat(c, linux_unwind(0, toindex)); @@ -1104,7 +1104,7 @@ STATIC void blcodgen(block *bl) assert(!getregs(allregs)); assert(!e); assert(!bl->Bcode); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (config.flags3 & CFG3pic) { int nalign = 0; @@ -1581,7 +1581,7 @@ regm_t regmask(tym_t tym, tym_t tyf) return mST0; case TYcfloat: -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (I32 && tybasic(tyf) == TYnfunc) return mDX | mAX; #endif @@ -2544,7 +2544,7 @@ if (regcon.cse.mval & 1) elem_print(regcon.cse.value[i]); case OPrelconst: c = cdrelconst(e,pretregs); break; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case OPgot: c = cdgot(e,pretregs); break; diff --git a/src/backend/cgelem.c b/src/backend/cgelem.c index b0103ab7af39..0be595291326 100644 --- a/src/backend/cgelem.c +++ b/src/backend/cgelem.c @@ -831,7 +831,7 @@ STATIC elem * eladd(elem *e) e2 = e->E2; if (e2->Eoper == OPconst) { -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (e1->Eoper == OPrelconst && e1->EV.sp.Vsym->Sfl == FLgot) goto ret; #endif @@ -846,7 +846,7 @@ STATIC elem * eladd(elem *e) } else if (e1->Eoper == OPconst) { -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (e2->Eoper == OPrelconst && e2->EV.sp.Vsym->Sfl == FLgot) goto ret; #endif diff --git a/src/backend/cod1.c b/src/backend/cod1.c index f1d7eed55a66..7734ebad21cb 100644 --- a/src/backend/cod1.c +++ b/src/backend/cod1.c @@ -1354,7 +1354,7 @@ code *getlvalue(code *pcs,elem *e,regm_t keepmsk) case FLextern: if (s->Sident[0] == '_' && memcmp(s->Sident + 1,"tls_array",10) == 0) { -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS // Rewrite as GS:[0000], or FS:[0000] for 64 bit if (I64) { @@ -1383,7 +1383,7 @@ code *getlvalue(code *pcs,elem *e,regm_t keepmsk) case FLdata: case FLudata: case FLcsdata: -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case FLgot: case FLgotoff: case FLtlsdata: @@ -1417,7 +1417,7 @@ code *getlvalue(code *pcs,elem *e,regm_t keepmsk) { pcs->Iflags |= CFcs | CFoff; } -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (I64 && config.flags3 & CFG3pic && (fl == FLtlsdata || s->ty() & mTYthread)) { @@ -2048,12 +2048,12 @@ code *callclib(elem *e,unsigned clib,regm_t *pretregs,regm_t keepmask) { //printf("callclib(e = %p, clib = %d, *pretregs = %s, keepmask = %s\n", e, clib, regm_str(*pretregs), regm_str(keepmask)); //elem_print(e); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS static symbol lib[] = { /* Convert destroyed regs into saved regs */ #define Z(desregs) (~(desregs) & (mBP| mES | ALLREGS)) -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define N(name) "_" name #else #define N(name) name @@ -2274,7 +2274,7 @@ code *callclib(elem *e,unsigned clib,regm_t *pretregs,regm_t keepmask) {DOUBLEREGS_16,DOUBLEREGS_32,0,INFfloat,1,1}, // _INTDBL@ intdbl {mAX,mAX,0,INFfloat,1,1}, // _DBLUNS@ dbluns {DOUBLEREGS_16,DOUBLEREGS_32,0,INFfloat,1,1}, // _UNSDBL@ unsdbl -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS {mDX|mAX,mAX,0,INF32|INFfloat,0,1}, // _DBLULNG@ dblulng #else {mDX|mAX,mAX,0,INFfloat,1,1}, // _DBLULNG@ dblulng @@ -2287,7 +2287,7 @@ code *callclib(elem *e,unsigned clib,regm_t *pretregs,regm_t keepmask) {DOUBLEREGS_16,mDX|mAX,0,INFfloat,1,1}, // _DBLLLNG@ {DOUBLEREGS_16,DOUBLEREGS_32,0,INFfloat,1,1}, // _LLNGDBL@ -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS {DOUBLEREGS_16,mDX|mAX,0,INFfloat,2,2}, // _DBLULLNG@ #else {DOUBLEREGS_16,mDX|mAX,0,INFfloat,1,1}, // _DBLULLNG@ diff --git a/src/backend/cod2.c b/src/backend/cod2.c index c1f57b364ac5..15309877158a 100644 --- a/src/backend/cod2.c +++ b/src/backend/cod2.c @@ -151,7 +151,7 @@ code *cdorth(elem *e,regm_t *pretregs) ty1 = tybasic(e1->Ety); if (tyfloating(ty1)) -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS return orth87(e,pretregs); #else return opdouble(e,pretregs,(e->Eoper == OPadd) ? CLIBdadd @@ -826,7 +826,7 @@ code *cdmul(elem *e,regm_t *pretregs) unsigned grex = rex << 16; if (tyfloating(tyml)) -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS return orth87(e,pretregs); #else return opdouble(e,pretregs,(oper == OPmul) ? CLIBdmul : CLIBddiv); @@ -3826,7 +3826,7 @@ code *getoffset(elem *e,unsigned reg) goto L4; case FLtlsdata: -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS { L5: if (I64 && config.flags3 & CFG3pic) @@ -3918,13 +3918,13 @@ code *getoffset(elem *e,unsigned reg) goto L4; case FLextern: -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (e->EV.sp.Vsym->ty() & mTYthread) goto L5; #endif case FLdata: case FLudata: -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case FLgot: case FLgotoff: #endif @@ -4218,7 +4218,7 @@ code *cdpost(elem *e,regm_t *pretregs) if (tyfloating(tyml)) { -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS return post87(e,pretregs); #else if (config.inline8087) diff --git a/src/backend/cod3.c b/src/backend/cod3.c index 0517b8dc56ab..71c6ce3fcd74 100644 --- a/src/backend/cod3.c +++ b/src/backend/cod3.c @@ -290,7 +290,7 @@ void cod3_set64() DOUBLEREGS = DOUBLEREGS_64; STACKALIGN = 16; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS ALLREGS = mAX|mBX|mCX|mDX|mSI|mDI| mR8|mR9|mR10|mR11|mR12|mR13|mR14|mR15; BYTEREGS = ALLREGS; #endif @@ -544,7 +544,7 @@ void doswitch(block *b) genjmp(c,JNE,FLblock,list_block(b->Bsucc)); /* JNE default */ } ce = getregs(mCX|mDI); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (config.flags3 & CFG3pic) { // Add in GOT code *cx; @@ -624,7 +624,7 @@ void doswitch(block *b) mod = (disp > 127) ? 2 : 1; /* 1 or 2 byte displacement */ if (config.flags & CFGromable) gen1(ce,SEGCS); /* table is in code segment */ -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (config.flags3 & CFG3pic) { // ADD EDX,(ncases-1)*2[EDI] ct = genc1(CNIL,0x03,modregrm(mod,DX,7),FLconst,disp); @@ -1128,7 +1128,7 @@ code *cdgot(elem *e, regm_t *pretregs) gen1(c, 0x58 + reg); // L1: POP reg return cat(c,fixresult(e,retregs,pretregs)); -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS regm_t retregs; unsigned reg; code *c; @@ -1161,7 +1161,7 @@ code *cdgot(elem *e, regm_t *pretregs) #endif } -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS /***************************** * Returns: * # of bytes stored @@ -2277,7 +2277,7 @@ targ_size_t cod3_spoff() code *cod3_load_got() { -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS code *c; code *cgot; @@ -2465,7 +2465,7 @@ void cod3_thunk(symbol *sthunk,symbol *sfunc,unsigned p,tym_t thisty, sthunk->Soffset = thunkoffset; sthunk->Ssize = Coffset - thunkoffset; /* size of thunk */ sthunk->Sseg = cseg; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS objpubdef(cseg,sthunk,sthunk->Soffset); #endif searchfixlist(sthunk); /* resolve forward refs */ @@ -4497,7 +4497,7 @@ STATIC void do64bit(enum FL fl,union evc *uev,int flags) // un-named external with is the start of .rodata or .data case FLextern: /* external data symbol */ case FLtlsdata: -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case FLgot: case FLgotoff: #endif @@ -4590,7 +4590,7 @@ STATIC void do32bit(enum FL fl,union evc *uev,int flags, targ_size_t val) // un-named external with is the start of .rodata or .data case FLextern: /* external data symbol */ case FLtlsdata: -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case FLgot: case FLgotoff: #endif @@ -4823,7 +4823,7 @@ void searchfixlist(symbol *s) // resolve directly. if (s->Sseg == p->Lseg && (s->Sclass == SCstatic || -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS (!(config.flags3 & CFG3pic) && s->Sclass == SCglobal)) && #else s->Sclass == SCglobal) && diff --git a/src/backend/cod4.c b/src/backend/cod4.c index eac0f9e6f5b9..ad5edfd1d243 100644 --- a/src/backend/cod4.c +++ b/src/backend/cod4.c @@ -770,7 +770,7 @@ code *cdaddass(elem *e,regm_t *pretregs) byte = (sz == 1); // 1 for byte operation, else 0 if (tyfloating(tyml)) { -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (op == OPnegass) c = cdnegass87(e,pretregs); else @@ -1221,7 +1221,7 @@ code *cdmulass(elem *e,regm_t *pretregs) if (tyfloating(tyml)) -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS return opass87(e,pretregs); #else return opassdbl(e,pretregs,op); @@ -1714,7 +1714,7 @@ code *cdcmp(elem *e,regm_t *pretregs) unsigned rex = (I64 && sz == 8) ? REX_W : 0; unsigned grex = rex << 16; // 64 bit operands -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (tyfloating(tym)) /* if floating operation */ { retregs = mPSW; @@ -2534,7 +2534,7 @@ code *cdcnvt(elem *e, regm_t *pretregs) case OPd_s64: return cnvt87(e,pretregs); case OPd_u32: // use subroutine, not 8087 -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS retregs = mST0; #else retregs = DOUBLEREGS; diff --git a/src/backend/code.h b/src/backend/code.h index 4ce0bc200189..905a7293ed7e 100644 --- a/src/backend/code.h +++ b/src/backend/code.h @@ -110,7 +110,7 @@ struct Declaration; #define RMload (1 << 30) #define RMstore (1 << 31) -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS // To support positional independent code, // must be able to remove BX from available registers extern regm_t ALLREGS; @@ -691,7 +691,7 @@ void WRcodlst (code *c ); cd_t cdcomma; cd_t cdloglog; cd_t cdshift; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS cd_t cdindpic; #endif cd_t cdind; diff --git a/src/backend/debug.c b/src/backend/debug.c index f537ddc2cffc..5471f20efb24 100644 --- a/src/backend/debug.c +++ b/src/backend/debug.c @@ -298,7 +298,7 @@ void WRFL(enum FL fl) "ndp ","farda ","local ","csdat ","tlsdat", "bprel ","frameh","asm ","blocko","alloca", "stack ","dsym ", -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS "got ","gotoff", #endif #endif diff --git a/src/backend/el.c b/src/backend/el.c index 2fa6cf6445a2..a40a7746bbd8 100644 --- a/src/backend/el.c +++ b/src/backend/el.c @@ -1358,7 +1358,7 @@ elem *el_picvar(symbol *s) return e; } #endif -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS elem *el_picvar(symbol *s) { elem *e; @@ -1560,10 +1560,10 @@ elem * el_var(symbol *s) //printf("el_var(s = '%s')\n", s->Sident); //printf("%x\n", s->Stype->Tty); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS // OSX is currently always pic if (config.flags3 & CFG3pic && -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS (!(s->Stype->Tty & mTYthread) || I64) && #endif !tyfunc(s->ty())) @@ -1582,7 +1582,7 @@ elem * el_var(symbol *s) //printf("thread local %s\n", s->Sident); #if TARGET_OSX ; -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS /* For 32 bit: * Generate for var locals: * MOV reg,GS:[00000000] // add GS: override in back end @@ -1687,7 +1687,7 @@ elem * el_var(symbol *s) { elem *e; //printf("el_var(s = '%s')\n", s->Sident); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (config.flags3 & CFG3pic && !tyfunc(s->ty())) return el_picvar(s); #endif @@ -1784,7 +1784,7 @@ elem * el_ptr(symbol *s) return e; } #endif -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (config.flags3 & CFG3pic && tyfunc(s->ty())) e = el_picvar(s); else diff --git a/src/backend/elfobj.c b/src/backend/elfobj.c index 2ff3502ac894..4314d656be79 100644 --- a/src/backend/elfobj.c +++ b/src/backend/elfobj.c @@ -1883,7 +1883,7 @@ char *obj_mangle2(Symbol *s,char *dest) } break; case mTYman_std: -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (tyfunc(s->ty()) && !variadic(s->Stype)) #else if (!(config.flags4 & CFG4oldstdmangle) && diff --git a/src/backend/evalu8.c b/src/backend/evalu8.c index 1b6dc03f3980..a50108534ad6 100644 --- a/src/backend/evalu8.c +++ b/src/backend/evalu8.c @@ -514,7 +514,7 @@ elem *poptelem(elem *e) if (e2->Eoper == OPconst) { targ_int i = e2->EV.Vint; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (i && e1->EV.sp.Vsym->Sfl == FLgot) break; #endif diff --git a/src/backend/global.h b/src/backend/global.h index 2c414103393e..71226d423c3a 100644 --- a/src/backend/global.h +++ b/src/backend/global.h @@ -547,7 +547,7 @@ void dwarf_CFA_offset(int reg, int offset); void dwarf_CFA_args_size(size_t sz); #endif -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS void elfobj_gotref(symbol *s); symbol *elfobj_getGOTsym(); void elfobj_refGOTsym(); diff --git a/src/backend/machobj.c b/src/backend/machobj.c index df3d4aedbddd..57a126a65c71 100644 --- a/src/backend/machobj.c +++ b/src/backend/machobj.c @@ -1622,7 +1622,7 @@ char *obj_mangle2(Symbol *s,char *dest) strupr(dest); // to upper case break; case mTYman_std: -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (tyfunc(s->ty()) && !variadic(s->Stype)) #else if (!(config.flags4 & CFG4oldstdmangle) && diff --git a/src/backend/optabgen.c b/src/backend/optabgen.c index f9989a500da1..0f3e79b9c828 100644 --- a/src/backend/optabgen.c +++ b/src/backend/optabgen.c @@ -714,7 +714,7 @@ void fltables() case FLctor: segfl[i] = -1; break; case FLdtor: segfl[i] = -1; break; case FLdsymbol: segfl[i] = -1; break; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case FLgot: segfl[i] = -1; break; case FLgotoff: segfl[i] = -1; break; #endif @@ -1002,7 +1002,7 @@ void dotytab() case TYcldouble: #if TARGET_OSX sz = 16; -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS sz = 4; #elif TARGET_WINDOS sz = 2; diff --git a/src/backend/out.c b/src/backend/out.c index df9c60d469a5..4d9e968001f7 100644 --- a/src/backend/out.c +++ b/src/backend/out.c @@ -410,7 +410,7 @@ void outdata(symbol *s) flags |= CFoffset64; if (tybasic(dt->Dty) == TYcptr) reftocodseg(seg,offset,dt->DTabytes); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS else reftodatseg(seg,offset,dt->DTabytes,dt->DTseg,flags); #else diff --git a/src/backend/token.h b/src/backend/token.h index b6397706c855..466b3dbfb826 100644 --- a/src/backend/token.h +++ b/src/backend/token.h @@ -179,7 +179,7 @@ enum TK { TK_stdcall, TK_syscall, TK_try, -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS TK_attribute, TK_extension, TK_format, @@ -211,7 +211,7 @@ enum TK { TKandand,TKshl,TKshr,TKrcur,TKeq,TKaddass,TKminass,TKmulass,TKdivass, TKmodass,TKshrass,TKshlass,TKandass,TKxorass,TKorass,TKsemi, TKadd,TKellipsis, -#if !TX86 || TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if !TX86 || TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS TKdollar, #endif diff --git a/src/backend/ty.h b/src/backend/ty.h index 1b403c5e8160..0b3067d70bf5 100644 --- a/src/backend/ty.h +++ b/src/backend/ty.h @@ -306,7 +306,7 @@ extern const tym_t tytouns[]; /* Array to give the 'relaxed' type for relaxed type checking */ extern unsigned char _tyrelax[]; #define type_relax (config.flags3 & CFG3relax) // !=0 if relaxed type checking -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define type_semirelax (config.flags3 & CFG3semirelax) // !=0 if semi-relaxed type checking #else #define type_semirelax type_relax diff --git a/src/backend/type.h b/src/backend/type.h index 6673c2d4253a..6fac242b1937 100644 --- a/src/backend/type.h +++ b/src/backend/type.h @@ -54,7 +54,7 @@ struct TYPE unsigned short Tflags; // TFxxxxx #if TX86 -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define mTYnoret 0x010000 // function has no return #define mTYtransu 0x010000 // transparent union #else @@ -68,7 +68,7 @@ struct TYPE #define mTYsyscall 0x400000 #define mTYjava 0x800000 -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #define mTYTFF 0xFE0000 #else #define mTYTFF 0xFF0000 diff --git a/src/backend/var.c b/src/backend/var.c index 9de88d1fd163..312b9e1cc3e3 100644 --- a/src/backend/var.c +++ b/src/backend/var.c @@ -58,7 +58,7 @@ int linkage_spec = 0; /* using the default */ #if MEMMODELS == 1 tym_t functypetab[LINK_MAXDIM] = { -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS TYnfunc, TYnpfunc, TYnpfunc, diff --git a/src/constfold.c b/src/constfold.c index b2b2088c80a0..72da477e85d0 100644 --- a/src/constfold.c +++ b/src/constfold.c @@ -27,7 +27,7 @@ #include "declaration.h" #include "utf.h" -#if __FreeBSD__ +#if __FreeBSD__ || __OpenBSD__ #define fmodl fmod // hack for now, fix later #endif diff --git a/src/eh.c b/src/eh.c index 3a44ce44c5d6..3f441fa34888 100644 --- a/src/eh.c +++ b/src/eh.c @@ -33,7 +33,7 @@ static char __file__[] = __FILE__; /* for tassert.h */ /* If we do our own EH tables and stack walking scheme * (Otherwise use NT Structured Exception Handling) */ -#define OUREH (TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS) +#define OUREH (TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS) /**************************** * Generate and output scope table. diff --git a/src/glue.c b/src/glue.c index 60ab0d769faf..32af613de8ad 100644 --- a/src/glue.c +++ b/src/glue.c @@ -625,7 +625,7 @@ void FuncDeclaration::toObjFile(int multiobj) // Pull in RTL startup code if (func->isMain()) { objextdef("_main"); -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS obj_ehsections(); // initialize exception handling sections #endif #if TARGET_WINDOS @@ -1027,7 +1027,7 @@ void FuncDeclaration::toObjFile(int multiobj) s->toObjFile(0); } -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS // A hack to get a pointer to this function put in the .dtors segment if (ident && memcmp(ident->toChars(), "_STD", 4) == 0) obj_staticdtor(s); @@ -1073,7 +1073,7 @@ unsigned Type::totym() //case Tbit: t = TYuchar; break; case Tbool: t = TYbool; break; case Tchar: t = TYchar; break; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case Twchar: t = TYwchar_t; break; case Tdchar: t = TYdchar; break; #else @@ -1163,7 +1163,7 @@ unsigned TypeFunction::totym() case LINKc: tyf = TYnfunc; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS if (I32 && retStyle() == RETstack) tyf = TYhfunc; #endif diff --git a/src/mangle.c b/src/mangle.c index 8d69ea8c7c8e..c4baa871564b 100644 --- a/src/mangle.c +++ b/src/mangle.c @@ -24,7 +24,7 @@ #include "id.h" #include "module.h" -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS char *cpp_mangle(Dsymbol *s); #endif diff --git a/src/mars.c b/src/mars.c index fc534e0e0c81..6ae36bee7545 100644 --- a/src/mars.c +++ b/src/mars.c @@ -60,7 +60,7 @@ Global::Global() #if TARGET_WINDOS obj_ext = "obj"; -#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS obj_ext = "o"; #elif TARGET_NET #else @@ -69,7 +69,7 @@ Global::Global() #if TARGET_WINDOS lib_ext = "lib"; -#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS lib_ext = "a"; #elif TARGET_NET #else @@ -78,7 +78,7 @@ Global::Global() #if TARGET_WINDOS dll_ext = "dll"; -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS dll_ext = "so"; #elif TARGET_OSX dll_ext = "dylib"; @@ -365,7 +365,7 @@ int main(int argc, char *argv[]) #if TARGET_WINDOS global.params.defaultlibname = "phobos"; -#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS global.params.defaultlibname = "phobos2"; #elif TARGET_NET #else @@ -397,6 +397,10 @@ int main(int argc, char *argv[]) VersionCondition::addPredefinedGlobalIdent("Posix"); VersionCondition::addPredefinedGlobalIdent("FreeBSD"); global.params.isFreeBSD = 1; +#elif TARGET_OPENBSD + VersionCondition::addPredefinedGlobalIdent("Posix"); + VersionCondition::addPredefinedGlobalIdent("OpenBSD"); + global.params.isFreeBSD = 1; #elif TARGET_SOLARIS VersionCondition::addPredefinedGlobalIdent("Posix"); VersionCondition::addPredefinedGlobalIdent("Solaris"); @@ -439,7 +443,7 @@ int main(int argc, char *argv[]) global.params.link = 0; else if (strcmp(p + 1, "cov") == 0) global.params.cov = 1; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS else if (strcmp(p + 1, "fPIC") == 0) global.params.pic = 1; #endif diff --git a/src/mars.h b/src/mars.h index 5af50ffccb64..485dfced9b83 100644 --- a/src/mars.h +++ b/src/mars.h @@ -93,9 +93,9 @@ void unittests(); #define MODULEINFO_IS_STRUCT DMDV2 // if ModuleInfo is a struct rather than a class // Set if C++ mangling is done by the front end -#define CPP_MANGLE (DMDV2 && (TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS)) +#define CPP_MANGLE (DMDV2 && (TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS)) -/* Other targets are TARGET_LINUX, TARGET_OSX, TARGET_FREEBSD and +/* Other targets are TARGET_LINUX, TARGET_OSX, TARGET_FREEBSD, TARGET_OPENBSD and * TARGET_SOLARIS, which are * set on the command line via the compiler makefile. */ @@ -105,7 +105,7 @@ void unittests(); #define OMFOBJ 1 #endif -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS #ifndef ELFOBJ #define ELFOBJ 1 #endif diff --git a/src/msc.c b/src/msc.c index cb5e53f9d5e9..bf44059bbf3a 100644 --- a/src/msc.c +++ b/src/msc.c @@ -1,6 +1,6 @@ // Compiler implementation of the D programming language -// Copyright (c) 1999-2010 by Digital Mars +// Copyright (c) 1999-2011 by Digital Mars // All Rights Reserved // written by Walter Bright // http://www.digitalmars.com @@ -101,6 +101,16 @@ void out_config_init() if (params->pic) config.flags3 |= CFG3pic; #endif +#if TARGET_OPENBSD + if (params->isX86_64) + config.exe = EX_OPENBSD64; + else + config.exe = EX_OPENBSD; + config.flags |= CFGnoebp; + config.flags |= CFGalwaysframe; + if (params->pic) + config.flags3 |= CFG3pic; +#endif #if TARGET_SOLARIS if (params->isX86_64) config.exe = EX_SOLARIS64; @@ -260,7 +270,7 @@ void util_set64() tyalignsize[TYfptr + i] = 8; tyalignsize[TYvptr + i] = 8; tyalignsize[TYfref + i] = 8; -#if TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS tyalignsize[TYldouble + i] = 16; tyalignsize[TYildouble + i] = 16; tyalignsize[TYcldouble + i] = 16; diff --git a/src/mtype.c b/src/mtype.c index d1472ab01cbe..33160ce459c7 100644 --- a/src/mtype.c +++ b/src/mtype.c @@ -73,7 +73,7 @@ int PTRSIZE = 4; int REALSIZE = 16; int REALPAD = 6; int REALALIGNSIZE = 16; -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS int REALSIZE = 12; int REALPAD = 2; int REALALIGNSIZE = 4; @@ -286,7 +286,7 @@ void Type::init() #if TARGET_OSX REALSIZE = 16; REALPAD = 6; -#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS +#elif TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS REALSIZE = 12; REALPAD = 2; #else @@ -2505,7 +2505,7 @@ unsigned TypeBasic::alignsize() sz = REALALIGNSIZE; break; -#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS +#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS case Tint64: case Tuns64: sz = global.params.isX86_64 ? 8 : 4;