MSP430RegisterInfo.cpp revision 2dd6cdc9204eaca42923509d227ef67974784aae
1f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov//===- MSP430RegisterInfo.cpp - MSP430 Register Information ---------------===// 2f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 3f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// The LLVM Compiler Infrastructure 4f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 5f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// This file is distributed under the University of Illinois Open Source 6f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// License. See LICENSE.TXT for details. 7f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 8f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov//===----------------------------------------------------------------------===// 9f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 10f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// This file contains the MSP430 implementation of the TargetRegisterInfo class. 11f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 12f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov//===----------------------------------------------------------------------===// 13f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 14f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#define DEBUG_TYPE "msp430-reg-info" 15f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 16f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#include "MSP430.h" 17f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#include "MSP430RegisterInfo.h" 182dd6cdc9204eaca42923509d227ef67974784aaeAnton Korobeynikov#include "llvm/CodeGen/MachineFunction.h" 192dd6cdc9204eaca42923509d227ef67974784aaeAnton Korobeynikov#include "llvm/Target/TargetMachine.h" 20f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#include "llvm/ADT/BitVector.h" 21f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 22f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovusing namespace llvm; 23f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 24f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// FIXME: Provide proper call frame setup / destroy opcodes. 25f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton KorobeynikovMSP430RegisterInfo::MSP430RegisterInfo(const TargetInstrInfo &tii) 26f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov : MSP430GenRegisterInfo(MSP430::NOP, MSP430::NOP), 27f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov TII(tii) {} 28f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 29f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovconst unsigned* 30f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton KorobeynikovMSP430RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { 31f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 32f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 33f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 34f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovconst TargetRegisterClass* const* 35f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton KorobeynikovMSP430RegisterInfo::getCalleeSavedRegClasses(const MachineFunction *MF) const { 36f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 37f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 38f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 39f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton KorobeynikovBitVector 40f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton KorobeynikovMSP430RegisterInfo::getReservedRegs(const MachineFunction &MF) const { 41f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 42f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 43f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 44f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovbool MSP430RegisterInfo::hasFP(const MachineFunction &MF) const { 45f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 46f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 47f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 48f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovvoid 49f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton KorobeynikovMSP430RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, 50f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov int SPAdj, RegScavenger *RS) const { 51f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 52f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 53f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 54f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovvoid MSP430RegisterInfo::emitPrologue(MachineFunction &MF) const { 55f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 56f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 57f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 58f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovvoid MSP430RegisterInfo::emitEpilogue(MachineFunction &MF, 59f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov MachineBasicBlock &MBB) const { 60f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 61f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 62f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 63f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovunsigned MSP430RegisterInfo::getRARegister() const { 64f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 65f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 66f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 67f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovunsigned MSP430RegisterInfo::getFrameRegister(MachineFunction &MF) const { 68f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 69f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 70f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 71f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovint MSP430RegisterInfo::getDwarfRegNum(unsigned RegNum, bool isEH) const { 72f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov assert(0 && "Not implemented yet!"); 73f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} 74f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 75f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#include "MSP430GenRegisterInfo.inc" 76