1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/lib/Target/Sparc/LeonFeatures.td
Chris Dewhurst 342fca5b08 [Sparc] Leon errata fix passes.
Errata fixes for various errata in different versions of the Leon variants of the Sparc 32 bit processor.

The nature of the errata are listed in the comments preceding the errata fix passes. Relevant unit tests are implemented for each of these.

Note: Running clang-format has changed a few other lines too, unrelated to the implemented errata fixes. These have been left in as this keeps the code formatting consistent.

Differential Revision: http://reviews.llvm.org/D21960

llvm-svn: 274856
2016-07-08 15:33:56 +00:00

92 lines
4.2 KiB
TableGen
Executable File

//===-- LeonFeatures.td - Describe the Leon Features -------*- tablegen -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//
//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
// CASA Support differs between LEON3-FT GR712RC and LEON3-FT UT699
// We need to have the option to switch this on and off.
//===----------------------------------------------------------------------===//
// support to casa instruction; for leon3 subtarget only
def LeonCASA : SubtargetFeature<
"hasleoncasa", "HasLeonCasa", "true",
"Enable CASA instruction for LEON3 and LEON4 processors">;
//===----------------------------------------------------------------------===//
// UMAC and SMAC support for LEON3 and LEON4 processors.
//===----------------------------------------------------------------------===//
// support to casa instruction; for leon3 subtarget only
def UMACSMACSupport
: SubtargetFeature<"hasumacsmac", "HasUmacSmac", "true",
"Enable UMAC and SMAC for LEON3 and LEON4 processors">;
//===----------------------------------------------------------------------===//
// LEON Erratum fixes
//===----------------------------------------------------------------------===//
def ReplaceSDIV
: SubtargetFeature<
"replacesdiv", "PerformSDIVReplace", "true",
"AT697E erratum fix: Do not emit SDIV, emit SDIVCC instead">;
def FixCALL
: SubtargetFeature<"fixcall", "FixCallImmediates", "true",
"AT697E erratum fix: Restrict the size of the immediate "
"operand of the CALL instruction to 20 bits">;
def IgnoreZeroFlag
: SubtargetFeature<"ignrzeroflag", "IgnoreZeroFlag", "true",
"AT697E erratum fix: Do not rely on the zero bit flag "
"on a divide overflow for SDIVCC and UDIVCC">;
def InsertNOPDoublePrecision
: SubtargetFeature<"insrtnopdblprcsn", "InsertNOPDoublePrecision", "true",
"LEON2 erratum fix: Insert a NOP before the double "
"precision floating point instruction">;
def FixFSMULD : SubtargetFeature<"fixfsmuld", "FixFSMULD", "true",
"LEON3 erratum fix: Do not select FSMULD">;
def ReplaceFMULS
: SubtargetFeature<"replacefmuls", "ReplaceFMULS", "true",
"LEON3 erratum fix: Replace FMULS instruction with a "
"routine using conversions/double precision operations "
"to replace FMULS">;
def PreventRoundChange
: SubtargetFeature<"prvntroundchange", "PreventRoundChange", "true",
"LEON3 erratum fix: Prevent any rounding mode change "
"request: use only the round-to-nearest rounding mode">;
def FixAllFDIVSQRT
: SubtargetFeature<"fixallfdivsqrt", "FixAllFDIVSQRT", "true",
"LEON3 erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD "
"instructions with NOPs and floating-point store">;
def InsertNOPLoad
: SubtargetFeature<"insertnopload", "InsertNOPLoad", "true",
"LEON3 erratum fix: Insert a NOP instruction after "
"every single-cycle load instruction when the next "
"instruction is another load/store instruction">;
def FlushCacheLineSWAP
: SubtargetFeature<"flshcachelineswap", "FlushCacheLineSWAP", "true",
"LEON3 erratum fix: Flush cache line containing the "
"lock before performing any of the atomic instructions "
"SWAP and LDSTUB">;
def InsertNOPsLoadStore
: SubtargetFeature<"insertnopsloadstore", "InsertNOPsLoadStore", "true",
"LEON3 erratum fix: Insert NOPs between "
"single-precision loads and the store, so the number of "
"instructions between is 4">;