mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
bdc6e663e7
This patch adds support for struct return values to the MSP430 target backend. It also reverses the order of argument and return registers in the calling convention to bring it into closer alignment with the published EABI from TI. Patch by Andrew Wygle (awygle). Differential Revision: https://reviews.llvm.org/D29069 llvm-svn: 296807
63 lines
2.2 KiB
C++
63 lines
2.2 KiB
C++
//=== MSP430MachineFunctionInfo.h - MSP430 machine function info -*- C++ -*-==//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file declares MSP430-specific per-machine-function information.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_MSP430_MSP430MACHINEFUNCTIONINFO_H
|
|
#define LLVM_LIB_TARGET_MSP430_MSP430MACHINEFUNCTIONINFO_H
|
|
|
|
#include "llvm/CodeGen/MachineFunction.h"
|
|
|
|
namespace llvm {
|
|
|
|
/// MSP430MachineFunctionInfo - This class is derived from MachineFunction and
|
|
/// contains private MSP430 target-specific information for each MachineFunction.
|
|
class MSP430MachineFunctionInfo : public MachineFunctionInfo {
|
|
virtual void anchor();
|
|
|
|
/// CalleeSavedFrameSize - Size of the callee-saved register portion of the
|
|
/// stack frame in bytes.
|
|
unsigned CalleeSavedFrameSize;
|
|
|
|
/// ReturnAddrIndex - FrameIndex for return slot.
|
|
int ReturnAddrIndex;
|
|
|
|
/// VarArgsFrameIndex - FrameIndex for start of varargs area.
|
|
int VarArgsFrameIndex;
|
|
|
|
/// SRetReturnReg - Some subtargets require that sret lowering includes
|
|
/// returning the value of the returned struct in a register. This field
|
|
/// holds the virtual register into which the sret argument is passed.
|
|
unsigned SRetReturnReg;
|
|
|
|
public:
|
|
MSP430MachineFunctionInfo() : CalleeSavedFrameSize(0) {}
|
|
|
|
explicit MSP430MachineFunctionInfo(MachineFunction &MF)
|
|
: CalleeSavedFrameSize(0), ReturnAddrIndex(0), SRetReturnReg(0) {}
|
|
|
|
unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; }
|
|
void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; }
|
|
|
|
unsigned getSRetReturnReg() const { return SRetReturnReg; }
|
|
void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; }
|
|
|
|
int getRAIndex() const { return ReturnAddrIndex; }
|
|
void setRAIndex(int Index) { ReturnAddrIndex = Index; }
|
|
|
|
int getVarArgsFrameIndex() const { return VarArgsFrameIndex;}
|
|
void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
|
|
};
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|