//===- Blackfin.td - Describe the Blackfin 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" //===----------------------------------------------------------------------===// // Blackfin Subtarget features. //===----------------------------------------------------------------------===// def FeatureSDRAM : SubtargetFeature<"sdram", "sdram", "true", "Build for SDRAM">; def FeatureICPLB : SubtargetFeature<"icplb", "icplb", "true", "Assume instruction cache lookaside buffers are enabled at runtime">; //===----------------------------------------------------------------------===// // Bugs in the silicon becomes workarounds in the compiler. // See http://www.analog.com/ for the full list of IC anomalies. //===----------------------------------------------------------------------===// def WA_MI_SHIFT : SubtargetFeature<"mi-shift-anomaly","wa_mi_shift", "true", "Work around 05000074 - " "Multi-Issue Instruction with dsp32shiftimm and P-reg Store">; def WA_CSYNC : SubtargetFeature<"csync-anomaly","wa_csync", "true", "Work around 05000244 - " "If I-Cache Is On, CSYNC/SSYNC/IDLE Around Change of Control">; def WA_SPECLD : SubtargetFeature<"specld-anomaly","wa_specld", "true", "Work around 05000245 - " "Access in the Shadow of a Conditional Branch">; def WA_HWLOOP : SubtargetFeature<"hwloop-anomaly","wa_hwloop", "true", "Work around 05000257 - " "Interrupt/Exception During Short Hardware Loop">; def WA_MMR_STALL : SubtargetFeature<"mmr-stall-anomaly","wa_mmr_stall", "true", "Work around 05000283 - " "System MMR Write Is Stalled Indefinitely when Killed">; def WA_LCREGS : SubtargetFeature<"lcregs-anomaly","wa_lcregs", "true", "Work around 05000312 - " "SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted">; def WA_KILLED_MMR : SubtargetFeature<"killed-mmr-anomaly", "wa_killed_mmr", "true", "Work around 05000315 - " "Killed System MMR Write Completes Erroneously on Next System MMR Access">; def WA_RETS : SubtargetFeature<"rets-anomaly", "wa_rets", "true", "Work around 05000371 - " "Possible RETS Register Corruption when Subroutine Is under 5 Cycles">; def WA_IND_CALL : SubtargetFeature<"ind-call-anomaly", "wa_ind_call", "true", "Work around 05000426 - " "Speculative Fetches of Indirect-Pointer Instructions">; //===----------------------------------------------------------------------===// // Register File, Calling Conv, Instruction Descriptions //===----------------------------------------------------------------------===// include "BlackfinRegisterInfo.td" include "BlackfinCallingConv.td" include "BlackfinIntrinsics.td" include "BlackfinInstrInfo.td" def BlackfinInstrInfo : InstrInfo {} //===----------------------------------------------------------------------===// // Blackfin processors supported. //===----------------------------------------------------------------------===// class Proc Features> : Processor; def : Proc<"generic", "", []>; multiclass Core Features> { def : Proc; def : Proc; def : Proc; } multiclass CoreEdinburgh : Core { def : Proc; def : Proc; def : Proc; def : Proc; } multiclass CoreBraemar : Core { def : Proc; def : Proc; } multiclass CoreStirling : Core { def : Proc; def : Proc; def : Proc; } multiclass CoreMoab : Core { def : Proc; def : Proc; def : Proc; def : Proc; } multiclass CoreTeton : Core { def : Proc; def : Proc; } multiclass CoreKookaburra : Core { def : Proc; def : Proc; def : Proc; } multiclass CoreMockingbird : Core { def : Proc; def : Proc; } multiclass CoreBrodie : Core { def : Proc; def : Proc; } defm BF512 : CoreBrodie<"bf512">; defm BF514 : CoreBrodie<"bf514">; defm BF516 : CoreBrodie<"bf516">; defm BF518 : CoreBrodie<"bf518">; defm BF522 : CoreMockingbird<"bf522">; defm BF523 : CoreKookaburra<"bf523">; defm BF524 : CoreMockingbird<"bf524">; defm BF525 : CoreKookaburra<"bf525">; defm BF526 : CoreMockingbird<"bf526">; defm BF527 : CoreKookaburra<"bf527">; defm BF531 : CoreEdinburgh<"bf531">; defm BF532 : CoreEdinburgh<"bf532">; defm BF533 : CoreEdinburgh<"bf533">; defm BF534 : CoreBraemar<"bf534">; defm BF536 : CoreBraemar<"bf536">; defm BF537 : CoreBraemar<"bf537">; defm BF538 : CoreStirling<"bf538">; defm BF539 : CoreStirling<"bf539">; defm BF542 : CoreMoab<"bf542">; defm BF544 : CoreMoab<"bf544">; defm BF548 : CoreMoab<"bf548">; defm BF549 : CoreMoab<"bf549">; defm BF561 : CoreTeton<"bf561">; //===----------------------------------------------------------------------===// // Declare the target which we are implementing //===----------------------------------------------------------------------===// def Blackfin : Target { // Pull in Instruction Info: let InstructionSet = BlackfinInstrInfo; }