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