• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- subzero/src/IceRegList.h - Register list macro defs  -----*- 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 /// \file
11 /// \brief Defines the REGLIST*() macros used in the IceInst*.def files.
12 ///
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef SUBZERO_SRC_ICEINSTREGLIST_H
16 #define SUBZERO_SRC_ICEINSTREGLIST_H
17 
18 // REGLISTn is a family of macros that we use to define register aliasing.  "n"
19 // indicates how many register aliases are being provided to the macro.  It
20 // assumes the parameters are register names declared in the "ns"
21 // namespace/class, but with the common "Reg_" prefix removed for brevity.
22 #define NO_ALIASES()                                                           \
23   {}
24 #define REGLIST1(ns, r0)                                                       \
25   { ns::Reg_##r0 }
26 #define REGLIST2(ns, r0, r1)                                                   \
27   { ns::Reg_##r0, ns::Reg_##r1 }
28 #define REGLIST3(ns, r0, r1, r2)                                               \
29   { ns::Reg_##r0, ns::Reg_##r1, ns::Reg_##r2 }
30 #define REGLIST4(ns, r0, r1, r2, r3)                                           \
31   { ns::Reg_##r0, ns::Reg_##r1, ns::Reg_##r2, ns::Reg_##r3 }
32 #define REGLIST7(ns, r0, r1, r2, r3, r4, r5, r6)                               \
33   {                                                                            \
34     ns::Reg_##r0, ns::Reg_##r1, ns::Reg_##r2, ns::Reg_##r3, ns::Reg_##r4,      \
35         ns::Reg_##r5, ns::Reg_##r6                                             \
36   }
37 
38 #endif // SUBZERO_SRC_ICEINSTREGLIST_H
39