blob: 63f8b33c80cf2b1540a624a14494f56a76ac2d4c [file] [log] [blame]
//===-- 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">;