llvm-project/llvm/lib/Target/Foot/FootInstrInfo.cpp

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);
}