61 lines
2.5 KiB
C++
61 lines
2.5 KiB
C++
#include "FootInstrInfo.h"
|
|
|
|
#include "MCTargetDesc/FootMCTargetDesc.h"
|
|
|
|
#define GET_INSTRINFO_CTOR_DTOR
|
|
#include "FootGenInstrInfo.inc"
|
|
|
|
#include "llvm/CodeGen/MachineFrameInfo.h"
|
|
|
|
using namespace llvm;
|
|
|
|
FootInstrInfo::FootInstrInfo() : FootGenInstrInfo() {}
|
|
|
|
void FootInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
|
|
MachineBasicBlock::iterator MI,
|
|
Register SrcReg, bool IsKill, int FrameIndex,
|
|
const TargetRegisterClass *RC,
|
|
const TargetRegisterInfo *TRI,
|
|
Register VReg,
|
|
MachineInstr::MIFlag Flag) const {
|
|
MachineFunction &MF = *MBB.getParent();
|
|
MachineFrameInfo &MFI = MF.getFrameInfo();
|
|
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(MF, FrameIndex);
|
|
MachineMemOperand *MMO =
|
|
MF.getMachineMemOperand(PtrInfo, MachineMemOperand::MOStore,
|
|
MFI.getObjectSize(FrameIndex), MFI.getObjectAlign(FrameIndex));
|
|
|
|
unsigned Opc = Foot::ADDI_I_D_M_A;
|
|
MFI.setStackID(FrameIndex, TargetStackID::Default);
|
|
BuildMI(MBB, MI, DebugLoc(), get(Opc))
|
|
.addReg(SrcReg, getKillRegState(IsKill))
|
|
.addFrameIndex(FrameIndex)
|
|
// this needs some refactoring. this is technically an immediate for this format
|
|
.addReg(0)
|
|
.addMemOperand(MMO);
|
|
}
|
|
|
|
void FootInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
|
|
MachineBasicBlock::iterator MI,
|
|
Register DestReg, int FrameIndex,
|
|
const TargetRegisterClass *RC,
|
|
const TargetRegisterInfo *TRI,
|
|
Register VReg,
|
|
MachineInstr::MIFlag Flag) const {
|
|
MachineFunction &MF = *MBB.getParent();
|
|
MachineFrameInfo &MFI = MF.getFrameInfo();
|
|
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(MF, FrameIndex);
|
|
MachineMemOperand *MMO =
|
|
MF.getMachineMemOperand(PtrInfo, MachineMemOperand::MOLoad,
|
|
MFI.getObjectSize(FrameIndex), MFI.getObjectAlign(FrameIndex));
|
|
|
|
unsigned Opc = Foot::ADDI_D_I_M_A;
|
|
MFI.setStackID(FrameIndex, TargetStackID::Default);
|
|
BuildMI(MBB, MI, DebugLoc(), get(Opc))
|
|
.addReg(DestReg)
|
|
.addFrameIndex(FrameIndex)
|
|
// this needs some refactoring. this is technically an immediate for this format
|
|
.addReg(0)
|
|
.addMemOperand(MMO);
|
|
}
|