Created
December 25, 2013 13:24
-
-
Save yebblies/8123194 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module target; | |
import defs, mars, mtype; | |
struct Target | |
{ | |
extern(C++) static __gshared int ptrsize; | |
extern(C++) static __gshared int realsize; | |
extern(C++) static __gshared int realpad; | |
extern(C++) static __gshared int realalignsize; | |
extern(C++) static void _init() | |
{ | |
mixin(dmd_trace_code); | |
ptrsize = 4; | |
if (global.params.isLinux || global.params.isFreeBSD || global.params.isOpenBSD || global.params.isSolaris) | |
{ | |
realsize = 12; | |
realpad = 2; | |
realalignsize = 4; | |
} | |
else if (global.params.isOSX) | |
{ | |
realsize = 16; | |
realpad = 6; | |
realalignsize = 16; | |
} | |
else if (global.params.isWindows) | |
{ | |
realsize = 10; | |
realpad = 0; | |
realalignsize = 2; | |
} | |
else | |
assert(0); | |
if (global.params.is64bit) | |
{ | |
if (global.params.isLinux || global.params.isFreeBSD || global.params.isSolaris) | |
{ | |
realsize = 16; | |
realpad = 6; | |
realalignsize = 16; | |
} | |
} | |
if (global.params.isLP64) | |
ptrsize = 8; | |
} | |
extern(C++) static uint alignsize(Type type) | |
{ | |
mixin(dmd_trace_code); | |
assert(type.isTypeBasic()); | |
switch (type.ty) | |
{ | |
case Tfloat80: | |
case Timaginary80: | |
case Tcomplex80: | |
return Target.realalignsize; | |
case Tcomplex32: | |
if (global.params.isLinux || global.params.isOSX || global.params.isFreeBSD || global.params.isOpenBSD || global.params.isSolaris) | |
return 4; | |
break; | |
case Tint64: | |
case Tuns64: | |
case Tfloat64: | |
case Timaginary64: | |
case Tcomplex64: | |
if (global.params.isLinux || global.params.isOSX || global.params.isFreeBSD || global.params.isOpenBSD || global.params.isSolaris) | |
return global.params.is64bit ? 8 : 4; | |
break; | |
default: | |
break; | |
} | |
return cast(uint)type.size(Loc()); | |
} | |
extern(C++) static uint fieldalign(Type type) | |
{ | |
mixin(dmd_trace_code); | |
return type.alignsize(); | |
} | |
extern(C++) static uint critsecsize() | |
{ | |
mixin(dmd_trace_code); | |
if (global.params.isWindows) | |
{ | |
return global.params.isLP64 ? 40 : 24; | |
} | |
else if (global.params.isLinux) | |
{ | |
if (global.params.is64bit) | |
return global.params.isLP64 ? 40 : 32; | |
else | |
return global.params.isLP64 ? 40 : 24; | |
} | |
else if (global.params.isFreeBSD) | |
{ | |
return global.params.isLP64 ? 8 : 4; | |
} | |
else if (global.params.isOpenBSD) | |
{ | |
return global.params.isLP64 ? 8 : 4; | |
} | |
else if (global.params.isOSX) | |
{ | |
return global.params.isLP64 ? 64 : 44; | |
} | |
else if (global.params.isSolaris) | |
{ | |
return 24; | |
} | |
assert(0); | |
return 0; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment