1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//===-- PPCInstrBuilder.h - Aides for building PPC insts --------*- C++ -*-===//
2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//                     The LLVM Compiler Infrastructure
4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// This file is distributed under the University of Illinois Open Source
6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// License. See LICENSE.TXT for details.
7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//===----------------------------------------------------------------------===//
9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// This file exposes functions that may be used with BuildMI from the
11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// MachineInstrBuilder.h file to simplify generating frame and constant pool
12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// references.
13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// For reference, the order of operands for memory references is:
15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// (Operand), Dest Reg, Base Reg, and either Reg Index or Immediate
16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao// Displacement.
17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//
18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao//===----------------------------------------------------------------------===//
19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#ifndef POWERPC_INSTRBUILDER_H
21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#define POWERPC_INSTRBUILDER_H
22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#include "llvm/CodeGen/MachineInstrBuilder.h"
24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaonamespace llvm {
26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao/// addFrameReference - This function is used to add a reference to the base of
28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao/// an abstract object on the stack frame of the current function.  This
29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao/// reference has base register as the FrameIndex offset until it is resolved.
30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao/// This allows a constant offset to be specified as well...
31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao///
32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaostatic inline const MachineInstrBuilder&
33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoaddFrameReference(const MachineInstrBuilder &MIB, int FI, int Offset = 0,
34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao                  bool mem = true) {
35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  if (mem)
36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    return MIB.addImm(Offset).addFrameIndex(FI);
37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao  else
38e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    return MIB.addFrameIndex(FI).addImm(Offset);
39e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao}
40e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
41e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} // End llvm namespace
42e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
43e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#endif
44