blob: 937900896b290d631f0f442001337ba86925d018 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/* Compiler implementation of the D programming language
* Copyright (C) 2013-2018 by The D Language Foundation, All Rights Reserved
* written by Iain Buclaw
* http://www.digitalmars.com
* Distributed under the Boost Software License, Version 1.0.
* http://www.boost.org/LICENSE_1_0.txt
* https://github.com/dlang/dmd/blob/master/src/dmd/target.h
*/
#pragma once
// This file contains a data structure that describes a back-end target.
// At present it is incomplete, but in future it should grow to contain
// most or all target machine and target O/S specific information.
#include "globals.h"
#include "tokens.h"
class ClassDeclaration;
class Dsymbol;
class Expression;
class Type;
struct OutBuffer;
struct Target
{
static int ptrsize;
static int realsize; // size a real consumes in memory
static int realpad; // 'padding' added to the CPU real size to bring it up to realsize
static int realalignsize; // alignment for reals
static bool reverseCppOverloads; // with dmc and cl, overloaded functions are grouped and in reverse order
static bool cppExceptions; // set if catching C++ exceptions is supported
static int c_longsize; // size of a C 'long' or 'unsigned long' type
static int c_long_doublesize; // size of a C 'long double'
static int classinfosize; // size of 'ClassInfo'
static unsigned long long maxStaticDataSize; // maximum size of static data
template <typename T>
struct FPTypeProperties
{
static real_t max;
static real_t min_normal;
static real_t nan;
static real_t snan;
static real_t infinity;
static real_t epsilon;
static d_int64 dig;
static d_int64 mant_dig;
static d_int64 max_exp;
static d_int64 min_exp;
static d_int64 max_10_exp;
static d_int64 min_10_exp;
};
typedef FPTypeProperties<float> FloatProperties;
typedef FPTypeProperties<double> DoubleProperties;
typedef FPTypeProperties<real_t> RealProperties;
static void _init();
// Type sizes and support.
static unsigned alignsize(Type* type);
static unsigned fieldalign(Type* type);
static unsigned critsecsize();
static Type *va_listType(); // get type of va_list
static int isVectorTypeSupported(int sz, Type *type);
static bool isVectorOpSupported(Type *type, TOK op, Type *t2 = NULL);
// ABI and backend.
static const char *toCppMangle(Dsymbol *s);
static const char *cppTypeInfoMangle(ClassDeclaration *cd);
static const char *cppTypeMangle(Type *t);
static Type *cppParameterType(Parameter *p);
static LINK systemLinkage();
};
|