1//===- subzero/src/IceTypes.def - X-macros for ICE types --------*- C++ -*-===//
2//
3//                        The Subzero Code Generator
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines properties of ICE primitive types in the form of x-macros.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef SUBZERO_SRC_ICETYPES_DEF
15#define SUBZERO_SRC_ICETYPES_DEF
16
17// Attributes of each target architecture.
18// NOTES on is_elf64:
19// 1- At some point NaCl would like to use ELF32 for all ILP32 sandboxes, but
20// for now the 64-bit architectures use ELF64:
21//   https://code.google.com/p/nativeclient/issues/detail?id=349
22//
23// 2- native code is always emitted as ELF32.
24//
25// TODO(jpp): set ABI e_flags for AArch64.
26#define TARGETARCH_TABLE                                                       \
27  /* enum value, printable string, is_elf64,   e_machine, e_flags */           \
28  X(Target_X8632, "x86-32", false, EM_386,     0)                              \
29  X(Target_X8664, "x86-64", true,  EM_X86_64,  0)                              \
30  X(Target_ARM32, "arm32",  false, EM_ARM,     EF_ARM_EABI_VER5)               \
31  X(Target_ARM64, "arm64",  true,  EM_AARCH64, 0)                              \
32  X(Target_MIPS32,"mips32", false, EM_MIPS,    EF_MIPS_ABI_O32|EF_MIPS_ARCH_32)\
33//#define X(tag, str, is_elf64, e_machine, e_flags)
34
35#define ICETYPE_TABLE                                                          \
36  /* enum value, log_2(size), align, # elts, element type, */                  \
37  /*     printable string (size and alignment in bytes), */                    \
38  /*     register class string */                                              \
39  X(void,  -1,  0,  1, void, "void",        "void")                            \
40  X(i1,     0,  1,  1, i1,   "i1",          "i1")                              \
41  X(i8,     0,  1,  1, i8,   "i8",          "i8")                              \
42  X(i16,    1,  1,  1, i16,  "i16",         "i16")                             \
43  X(i32,    2,  1,  1, i32,  "i32",         "i32")                             \
44  X(i64,    3,  1,  1, i64,  "i64",         "i64")                             \
45  X(f32,    2,  4,  1, f32,  "float",       "f32")                             \
46  X(f64,    3,  8,  1, f64,  "double",      "f64")                             \
47  X(v4i1,   4,  1,  4, i1,   "<4 x i1>",    "v4i1")                            \
48  X(v8i1,   4,  1,  8, i1,   "<8 x i1>",    "v8i1")                            \
49  X(v16i1,  4,  1, 16, i1,   "<16 x i1>",   "v16i1")                           \
50  X(v16i8,  4,  1, 16, i8,   "<16 x i8>",   "v16i8")                           \
51  X(v8i16,  4,  2,  8, i16,  "<8 x i16>",   "v8i16")                           \
52  X(v4i32,  4,  4,  4, i32,  "<4 x i32>",   "v4i32")                           \
53  X(v4f32,  4,  4,  4, f32,  "<4 x float>", "v4f32")                           \
54//#define X(tag, sizeLog2, align, elts, elty, str, rcstr)
55
56// Dictionary:
57//   V - Is vector type.
58//   I - Is integer value (scalar or vector).
59//   F - Is floating point value (scalar or vector).
60//   IA - Is integer arithmetic type
61//   B - Is Boolean type (scalar or vector).
62//   P  - true if can be used for parameter of call.
63//   CR - Result type of compare instruction for argument type
64//        (IceType_void if disallowed)
65#define ICETYPE_PROPS_TABLE                                                    \
66  /* Enum Value    V  I  F IA  B  P  CR */                                     \
67  X(void,          0, 0, 0, 0, 0, 0, void)                                     \
68  X(i1,            0, 1, 0, 0, 1, 0, i1)                                       \
69  X(i8,            0, 1, 0, 1, 0, 0, i1)                                       \
70  X(i16,           0, 1, 0, 1, 0, 0, i1)                                       \
71  X(i32,           0, 1, 0, 1, 0, 1, i1)                                       \
72  X(i64,           0, 1, 0, 1, 0, 1, i1)                                       \
73  X(f32,           0, 0, 1, 0, 0, 1, i1)                                       \
74  X(f64,           0, 0, 1, 0, 0, 1, i1)                                       \
75  X(v4i1,          1, 1, 0, 0, 1, 1, v4i1)                                     \
76  X(v8i1,          1, 1, 0, 0, 1, 1, v8i1)                                     \
77  X(v16i1,         1, 1, 0, 0, 1, 1, v16i1)                                    \
78  X(v16i8,         1, 1, 0, 1, 0, 1, v16i1)                                    \
79  X(v8i16,         1, 1, 0, 1, 0, 1, v8i1)                                     \
80  X(v4i32,         1, 1, 0, 1, 0, 1, v4i1)                                     \
81  X(v4f32,         1, 0, 1, 0, 0, 1, v4i1)                                     \
82//#define X(tag, IsVec, IsInt, IsFloat, IsIntArith, IsBoolean, IsParam,
83//          CompareResult)
84
85#endif // SUBZERO_SRC_ICETYPES_DEF
86