//===-- TargetFrameInfo.cpp - Implement machine frame interface -*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Implements the layout of a stack frame on the target machine.
//
//===----------------------------------------------------------------------===//

#include "llvm/Target/TargetFrameInfo.h"
#include <cstdlib>

using namespace llvm;

TargetFrameInfo::~TargetFrameInfo()
{
}

//===--------------------------------------------------------------------===//
// These methods provide details of the stack frame used by Sparc, thus they
// are Sparc specific.
//===--------------------------------------------------------------------===//

// This method adjusts a stack offset to meet alignment rules of target.
int
TargetFrameInfo::adjustAlignment(int unalignedOffset, bool growUp,
                                 unsigned align) const {
  abort();
  return 0;
}

// These methods compute offsets using the frame contents for a particular
// function.  The frame contents are obtained from the MachineFunction object
// for the given function.  The rest must be implemented by the
// machine-specific subclass.
//
int
TargetFrameInfo::getIncomingArgOffset(MachineFunction& mcInfo, unsigned argNum)
  const {
  abort();
  return 0;
}

int
TargetFrameInfo::getOutgoingArgOffset(MachineFunction& mcInfo,
                                      unsigned argNum) const {
  abort();
  return 0;
}

int
TargetFrameInfo::getFirstAutomaticVarOffset(MachineFunction& mcInfo,
                                            bool& growUp) const {
  abort();
  return 0;
}

int
TargetFrameInfo::getRegSpillAreaOffset(MachineFunction& mcInfo, bool& growUp)
  const {
  abort();
  return 0;
}

int
TargetFrameInfo::getTmpAreaOffset(MachineFunction& mcInfo, bool& growUp) const {
  abort();
  return 0;
}

int
TargetFrameInfo::getDynamicAreaOffset(MachineFunction& mcInfo, bool& growUp)
  const {
  abort();
  return 0;
}

