mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
6c4ec69c6b
Summary: This port includes the rudimentary latencies that were provided for the Cortex-A53 Machine Model in the AArch64 backend. It also changes the SchedAlias for COPY in the Cyclone model to an explicit WriteRes mapping to avoid conflicts in other subtargets. Differential Revision: http://reviews.llvm.org/D3427 Patch by Dave Estes <cestes@codeaurora.org>! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206652 91177308-0d34-0410-b5e6-96231b3b80d8
127 lines
4.7 KiB
TableGen
127 lines
4.7 KiB
TableGen
//===- ARM64.td - Describe the ARM64 Target Machine --------*- tablegen -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Target-independent interfaces which we are implementing
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// ARM64 Subtarget features.
|
|
//
|
|
|
|
def FeatureFPARMv8 : SubtargetFeature<"fp-armv8", "HasFPARMv8", "true",
|
|
"Enable ARMv8 FP">;
|
|
|
|
def FeatureNEON : SubtargetFeature<"neon", "HasNEON", "true",
|
|
"Enable Advanced SIMD instructions", [FeatureFPARMv8]>;
|
|
|
|
def FeatureCrypto : SubtargetFeature<"crypto", "HasCrypto", "true",
|
|
"Enable cryptographic instructions">;
|
|
|
|
/// Cyclone has register move instructions which are "free".
|
|
def FeatureZCRegMove : SubtargetFeature<"zcm", "HasZeroCycleRegMove", "true",
|
|
"Has zereo-cycle register moves">;
|
|
|
|
/// Cyclone has instructions which zero registers for "free".
|
|
def FeatureZCZeroing : SubtargetFeature<"zcz", "HasZeroCycleZeroing", "true",
|
|
"Has zero-cycle zeroing instructions">;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Register File Description
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "ARM64RegisterInfo.td"
|
|
include "ARM64CallingConvention.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Instruction Descriptions
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "ARM64Schedule.td"
|
|
include "ARM64InstrInfo.td"
|
|
|
|
def ARM64InstrInfo : InstrInfo;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// ARM64 Processors supported.
|
|
//
|
|
include "ARM64SchedA53.td"
|
|
include "ARM64SchedCyclone.td"
|
|
|
|
def ProcA53 : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
|
|
"Cortex-A53 ARM processors",
|
|
[FeatureFPARMv8,
|
|
FeatureNEON,
|
|
FeatureCrypto]>;
|
|
|
|
def ProcA57 : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57",
|
|
"Cortex-A57 ARM processors",
|
|
[FeatureFPARMv8,
|
|
FeatureNEON,
|
|
FeatureCrypto]>;
|
|
|
|
def ProcCyclone : SubtargetFeature<"cyclone", "ARMProcFamily", "Cyclone",
|
|
"Cyclone",
|
|
[FeatureFPARMv8,
|
|
FeatureNEON,
|
|
FeatureCrypto,
|
|
FeatureZCRegMove, FeatureZCZeroing]>;
|
|
|
|
def : ProcessorModel<"generic", NoSchedModel, [FeatureFPARMv8, FeatureNEON]>;
|
|
|
|
def : ProcessorModel<"cortex-a53", CortexA53Model, [ProcA53]>;
|
|
def : ProcessorModel<"cortex-a57", NoSchedModel, [ProcA57]>;
|
|
def : ProcessorModel<"cyclone", CycloneModel, [ProcCyclone]>;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Assembly parser
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def GenericAsmParserVariant : AsmParserVariant {
|
|
int Variant = 0;
|
|
string Name = "generic";
|
|
}
|
|
|
|
def AppleAsmParserVariant : AsmParserVariant {
|
|
int Variant = 1;
|
|
string Name = "apple-neon";
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Assembly printer
|
|
//===----------------------------------------------------------------------===//
|
|
// ARM64 Uses the MC printer for asm output, so make sure the TableGen
|
|
// AsmWriter bits get associated with the correct class.
|
|
def GenericAsmWriter : AsmWriter {
|
|
string AsmWriterClassName = "InstPrinter";
|
|
int Variant = 0;
|
|
bit isMCAsmWriter = 1;
|
|
}
|
|
|
|
def AppleAsmWriter : AsmWriter {
|
|
let AsmWriterClassName = "AppleInstPrinter";
|
|
int Variant = 1;
|
|
int isMCAsmWriter = 1;
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Target Declaration
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def ARM64 : Target {
|
|
let InstructionSet = ARM64InstrInfo;
|
|
let AssemblyParserVariants = [GenericAsmParserVariant, AppleAsmParserVariant];
|
|
let AssemblyWriters = [GenericAsmWriter, AppleAsmWriter];
|
|
}
|