//===- subzero/src/IceRegList.h - Register list macro defs -----*- C++ -*-===//
//
// The Subzero Code Generator
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
/// \file
/// \brief Defines the REGLIST*() macros used in the IceInst*.def files.
///
//===----------------------------------------------------------------------===//
#ifndef SUBZERO_SRC_ICEINSTREGLIST_H
#define SUBZERO_SRC_ICEINSTREGLIST_H
// REGLISTn is a family of macros that we use to define register aliasing. "n"
// indicates how many register aliases are being provided to the macro. It
// assumes the parameters are register names declared in the "ns"
// namespace/class, but with the common "Reg_" prefix removed for brevity.
#define NO_ALIASES() \
{}
#define REGLIST1(ns, r0) \
{ ns::Reg_##r0 }
#define REGLIST2(ns, r0, r1) \
{ ns::Reg_##r0, ns::Reg_##r1 }
#define REGLIST3(ns, r0, r1, r2) \
{ ns::Reg_##r0, ns::Reg_##r1, ns::Reg_##r2 }
#define REGLIST4(ns, r0, r1, r2, r3) \
{ ns::Reg_##r0, ns::Reg_##r1, ns::Reg_##r2, ns::Reg_##r3 }
#define REGLIST7(ns, r0, r1, r2, r3, r4, r5, r6) \
{ \
ns::Reg_##r0, ns::Reg_##r1, ns::Reg_##r2, ns::Reg_##r3, ns::Reg_##r4, \
ns::Reg_##r5, ns::Reg_##r6 \
}
#endif // SUBZERO_SRC_ICEINSTREGLIST_H