mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Added support for mcpu krait
- krait processor currently modeled with the same features as A9. - Krait processor additionally has VFP4 (fused multiply add/sub) and hardware division features enabled. - krait has currently the same Schedule model as A9 - krait cpu flag is not recognized by the GNU assembler yet, it is replaced with march=armv7-a to avoid a lower march from being used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196619 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -243,6 +243,18 @@ def ProcR5 : SubtargetFeature<"r5", "ARMProcFamily", "CortexR5",
|
|||||||
FeatureAvoidPartialCPSR,
|
FeatureAvoidPartialCPSR,
|
||||||
FeatureT2XtPk]>;
|
FeatureT2XtPk]>;
|
||||||
|
|
||||||
|
// FIXME: krait has currently the same features as A9
|
||||||
|
// plus VFP4 and hardware division features.
|
||||||
|
def ProcKrait : SubtargetFeature<"krait", "ARMProcFamily", "Krait",
|
||||||
|
"Qualcomm ARM processors",
|
||||||
|
[FeatureVMLxForwarding,
|
||||||
|
FeatureT2XtPk, FeatureFP16,
|
||||||
|
FeatureAvoidPartialCPSR,
|
||||||
|
FeatureTrustZone,
|
||||||
|
FeatureVFP4,
|
||||||
|
FeatureHWDiv,
|
||||||
|
FeatureHWDivARM]>;
|
||||||
|
|
||||||
class ProcNoItin<string Name, list<SubtargetFeature> Features>
|
class ProcNoItin<string Name, list<SubtargetFeature> Features>
|
||||||
: Processor<Name, NoItineraries, Features>;
|
: Processor<Name, NoItineraries, Features>;
|
||||||
|
|
||||||
@ -375,6 +387,13 @@ def : ProcNoItin<"cortex-a57", [ProcA57, HasV8Ops, FeatureAClass,
|
|||||||
FeatureDB, FeatureFPARMv8,
|
FeatureDB, FeatureFPARMv8,
|
||||||
FeatureNEON, FeatureDSPThumb2]>;
|
FeatureNEON, FeatureDSPThumb2]>;
|
||||||
|
|
||||||
|
// FIXME: krait has currently the same Schedule model as A9
|
||||||
|
def : ProcessorModel<"krait", CortexA9Model,
|
||||||
|
[ProcKrait, HasV7Ops,
|
||||||
|
FeatureNEON, FeatureDB,
|
||||||
|
FeatureDSPThumb2, FeatureHasRAS,
|
||||||
|
FeatureAClass]>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Register File Description
|
// Register File Description
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -609,7 +609,8 @@ void ARMAsmPrinter::emitAttributes() {
|
|||||||
|
|
||||||
std::string CPUString = Subtarget->getCPUString();
|
std::string CPUString = Subtarget->getCPUString();
|
||||||
|
|
||||||
if (CPUString != "generic")
|
// FIXME: remove krait check when GNU tools support krait cpu
|
||||||
|
if (CPUString != "generic" && CPUString != "krait")
|
||||||
ATS.emitTextAttribute(ARMBuildAttrs::CPU_name, CPUString);
|
ATS.emitTextAttribute(ARMBuildAttrs::CPU_name, CPUString);
|
||||||
|
|
||||||
ATS.emitAttribute(ARMBuildAttrs::CPU_arch,
|
ATS.emitAttribute(ARMBuildAttrs::CPU_arch,
|
||||||
|
@ -32,7 +32,7 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
|
|||||||
protected:
|
protected:
|
||||||
enum ARMProcFamilyEnum {
|
enum ARMProcFamilyEnum {
|
||||||
Others, CortexA5, CortexA7, CortexA8, CortexA9, CortexA12, CortexA15,
|
Others, CortexA5, CortexA7, CortexA8, CortexA9, CortexA12, CortexA15,
|
||||||
CortexR5, Swift, CortexA53, CortexA57
|
CortexR5, Swift, CortexA53, CortexA57, Krait
|
||||||
};
|
};
|
||||||
enum ARMProcClassEnum {
|
enum ARMProcClassEnum {
|
||||||
None, AClass, RClass, MClass
|
None, AClass, RClass, MClass
|
||||||
@ -261,8 +261,9 @@ public:
|
|||||||
bool isCortexA15() const { return ARMProcFamily == CortexA15; }
|
bool isCortexA15() const { return ARMProcFamily == CortexA15; }
|
||||||
bool isSwift() const { return ARMProcFamily == Swift; }
|
bool isSwift() const { return ARMProcFamily == Swift; }
|
||||||
bool isCortexM3() const { return CPUString == "cortex-m3"; }
|
bool isCortexM3() const { return CPUString == "cortex-m3"; }
|
||||||
bool isLikeA9() const { return isCortexA9() || isCortexA15(); }
|
bool isLikeA9() const { return isCortexA9() || isCortexA15() || isKrait(); }
|
||||||
bool isCortexR5() const { return ARMProcFamily == CortexR5; }
|
bool isCortexR5() const { return ARMProcFamily == CortexR5; }
|
||||||
|
bool isKrait() const { return ARMProcFamily == Krait; }
|
||||||
|
|
||||||
bool hasARMOps() const { return !NoARM; }
|
bool hasARMOps() const { return !NoARM; }
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user