mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-29 10:32:47 +00:00
Seperate code out of TargetMachine into MachineInstrInfo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4368 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
75276f150e
commit
93fa70598c
56
lib/Target/TargetInstrInfo.cpp
Normal file
56
lib/Target/TargetInstrInfo.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
//===-- TargetMachine.cpp - General Target Information ---------------------==//
|
||||
//
|
||||
// This file describes the general parts of a Target machine.
|
||||
// This file also implements MachineInstrInfo and MachineCacheInfo.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Target/MachineInstrInfo.h"
|
||||
#include "llvm/Constant.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// class MachineInstructionInfo
|
||||
// Interface to description of machine instructions
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
MachineInstrInfo::MachineInstrInfo(const TargetMachine& tgt,
|
||||
const MachineInstrDescriptor* Desc,
|
||||
unsigned DescSize,
|
||||
unsigned NumRealOpCodes)
|
||||
: target(tgt), desc(Desc), descSize(DescSize), numRealOpCodes(NumRealOpCodes) {
|
||||
// FIXME: TargetInstrDescriptors should not be global
|
||||
assert(TargetInstrDescriptors == NULL && desc != NULL);
|
||||
TargetInstrDescriptors = desc; // initialize global variable
|
||||
}
|
||||
|
||||
MachineInstrInfo::~MachineInstrInfo() {
|
||||
TargetInstrDescriptors = NULL; // reset global variable
|
||||
}
|
||||
|
||||
|
||||
bool MachineInstrInfo::constantFitsInImmedField(MachineOpCode opCode,
|
||||
int64_t intValue) const {
|
||||
// First, check if opCode has an immed field.
|
||||
bool isSignExtended;
|
||||
uint64_t maxImmedValue = maxImmedConstant(opCode, isSignExtended);
|
||||
if (maxImmedValue != 0)
|
||||
{
|
||||
// NEED TO HANDLE UNSIGNED VALUES SINCE THEY MAY BECOME MUCH
|
||||
// SMALLER AFTER CASTING TO SIGN-EXTENDED int, short, or char.
|
||||
// See CreateUIntSetInstruction in SparcInstrInfo.cpp.
|
||||
|
||||
// Now check if the constant fits
|
||||
if (intValue <= (int64_t) maxImmedValue &&
|
||||
intValue >= -((int64_t) maxImmedValue+1))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MachineInstrInfo::ConstantTypeMustBeLoaded(const Constant* CV) const {
|
||||
assert(CV->getType()->isPrimitiveType() || isa<PointerType>(CV->getType()));
|
||||
return !(CV->getType()->isIntegral() || isa<PointerType>(CV->getType()));
|
||||
}
|
@ -1,14 +1,13 @@
|
||||
//===-- TargetMachine.cpp - General Target Information ---------------------==//
|
||||
//
|
||||
// This file describes the general parts of a Target machine.
|
||||
// This file also implements MachineInstrInfo and MachineCacheInfo.
|
||||
// This file also implements MachineCacheInfo.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/MachineInstrInfo.h"
|
||||
#include "llvm/Target/MachineCacheInfo.h"
|
||||
#include "llvm/Function.h"
|
||||
#include "llvm/Type.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// class TargetMachine
|
||||
@ -44,55 +43,6 @@ TargetMachine::findOptimalStorageSize(const Type* ty) const
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// class MachineInstructionInfo
|
||||
// Interface to description of machine instructions
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
/*ctor*/
|
||||
MachineInstrInfo::MachineInstrInfo(const TargetMachine& tgt,
|
||||
const MachineInstrDescriptor* _desc,
|
||||
unsigned int _descSize,
|
||||
unsigned int _numRealOpCodes)
|
||||
: target(tgt),
|
||||
desc(_desc), descSize(_descSize), numRealOpCodes(_numRealOpCodes)
|
||||
{
|
||||
// FIXME: TargetInstrDescriptors should not be global
|
||||
assert(TargetInstrDescriptors == NULL && desc != NULL);
|
||||
TargetInstrDescriptors = desc; // initialize global variable
|
||||
}
|
||||
|
||||
|
||||
MachineInstrInfo::~MachineInstrInfo()
|
||||
{
|
||||
TargetInstrDescriptors = NULL; // reset global variable
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
MachineInstrInfo::constantFitsInImmedField(MachineOpCode opCode,
|
||||
int64_t intValue) const
|
||||
{
|
||||
// First, check if opCode has an immed field.
|
||||
bool isSignExtended;
|
||||
uint64_t maxImmedValue = maxImmedConstant(opCode, isSignExtended);
|
||||
if (maxImmedValue != 0)
|
||||
{
|
||||
// NEED TO HANDLE UNSIGNED VALUES SINCE THEY MAY BECOME MUCH
|
||||
// SMALLER AFTER CASTING TO SIGN-EXTENDED int, short, or char.
|
||||
// See CreateUIntSetInstruction in SparcInstrInfo.cpp.
|
||||
|
||||
// Now check if the constant fits
|
||||
if (intValue <= (int64_t) maxImmedValue &&
|
||||
intValue >= -((int64_t) maxImmedValue+1))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// class MachineCacheInfo
|
||||
//
|
||||
@ -100,16 +50,7 @@ MachineInstrInfo::constantFitsInImmedField(MachineOpCode opCode,
|
||||
// Describes properties of the target cache architecture.
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
/*ctor*/
|
||||
MachineCacheInfo::MachineCacheInfo(const TargetMachine& tgt)
|
||||
: target(tgt)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void
|
||||
MachineCacheInfo::Initialize()
|
||||
{
|
||||
void MachineCacheInfo::Initialize() {
|
||||
numLevels = 2;
|
||||
cacheLineSizes.push_back(16); cacheLineSizes.push_back(32);
|
||||
cacheSizes.push_back(1 << 15); cacheSizes.push_back(1 << 20);
|
||||
|
Loading…
Reference in New Issue
Block a user