mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
ae65e281f3
to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
106 lines
3.8 KiB
TableGen
106 lines
3.8 KiB
TableGen
//===-- RISCV.td - Describe the RISCV Target Machine -------*- tablegen -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// RISC-V subtarget features and instruction predicates.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def FeatureStdExtM
|
|
: SubtargetFeature<"m", "HasStdExtM", "true",
|
|
"'M' (Integer Multiplication and Division)">;
|
|
def HasStdExtM : Predicate<"Subtarget->hasStdExtM()">,
|
|
AssemblerPredicate<"FeatureStdExtM">;
|
|
|
|
def FeatureStdExtA
|
|
: SubtargetFeature<"a", "HasStdExtA", "true",
|
|
"'A' (Atomic Instructions)">;
|
|
def HasStdExtA : Predicate<"Subtarget->hasStdExtA()">,
|
|
AssemblerPredicate<"FeatureStdExtA">;
|
|
|
|
def FeatureStdExtF
|
|
: SubtargetFeature<"f", "HasStdExtF", "true",
|
|
"'F' (Single-Precision Floating-Point)">;
|
|
def HasStdExtF : Predicate<"Subtarget->hasStdExtF()">,
|
|
AssemblerPredicate<"FeatureStdExtF">;
|
|
|
|
def FeatureStdExtD
|
|
: SubtargetFeature<"d", "HasStdExtD", "true",
|
|
"'D' (Double-Precision Floating-Point)",
|
|
[FeatureStdExtF]>;
|
|
def HasStdExtD : Predicate<"Subtarget->hasStdExtD()">,
|
|
AssemblerPredicate<"FeatureStdExtD">;
|
|
|
|
def FeatureStdExtC
|
|
: SubtargetFeature<"c", "HasStdExtC", "true",
|
|
"'C' (Compressed Instructions)">;
|
|
def HasStdExtC : Predicate<"Subtarget->hasStdExtC()">,
|
|
AssemblerPredicate<"FeatureStdExtC">;
|
|
|
|
|
|
def Feature64Bit
|
|
: SubtargetFeature<"64bit", "HasRV64", "true", "Implements RV64">;
|
|
def IsRV64 : Predicate<"Subtarget->is64Bit()">,
|
|
AssemblerPredicate<"Feature64Bit">;
|
|
def IsRV32 : Predicate<"!Subtarget->is64Bit()">,
|
|
AssemblerPredicate<"!Feature64Bit">;
|
|
|
|
def RV64 : HwMode<"+64bit">;
|
|
def RV32 : HwMode<"-64bit">;
|
|
|
|
def FeatureRelax
|
|
: SubtargetFeature<"relax", "EnableLinkerRelax", "true",
|
|
"Enable Linker relaxation.">;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Registers, calling conventions, instruction descriptions.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "RISCVRegisterInfo.td"
|
|
include "RISCVCallingConv.td"
|
|
include "RISCVInstrInfo.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Named operands for CSR instructions.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "RISCVSystemOperands.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// RISC-V processors supported.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def : ProcessorModel<"generic-rv32", NoSchedModel, []>;
|
|
|
|
def : ProcessorModel<"generic-rv64", NoSchedModel, [Feature64Bit]>;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Define the RISC-V target.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def RISCVInstrInfo : InstrInfo {
|
|
let guessInstructionProperties = 0;
|
|
}
|
|
|
|
def RISCVAsmParser : AsmParser {
|
|
let ShouldEmitMatchRegisterAltName = 1;
|
|
let AllowDuplicateRegisterNames = 1;
|
|
}
|
|
|
|
def RISCVAsmWriter : AsmWriter {
|
|
int PassSubtarget = 1;
|
|
}
|
|
|
|
def RISCV : Target {
|
|
let InstructionSet = RISCVInstrInfo;
|
|
let AssemblyParsers = [RISCVAsmParser];
|
|
let AssemblyWriters = [RISCVAsmWriter];
|
|
let AllowRegisterRenaming = 1;
|
|
}
|