//===- SPU.td - Describe the STI Cell SPU Target Machine ----*- tablegen -*-===//
// 
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This is the top level entry point for the STI Cell SPU target machine.
//
//===----------------------------------------------------------------------===//

// Get the target-independent interfaces which we are implementing.
//
include "llvm/Target/Target.td"

// Holder of code fragments (you'd think this'd already be in
// a td file somewhere... :-)

class CodeFrag<dag frag> {
  dag Fragment = frag;
}

//===----------------------------------------------------------------------===//
// Register File Description
//===----------------------------------------------------------------------===//

include "SPURegisterInfo.td"

//===----------------------------------------------------------------------===//
// Instruction formats, instructions
//===----------------------------------------------------------------------===//

include "SPUNodes.td"
include "SPUOperands.td"
include "SPUSchedule.td"
include "SPUInstrFormats.td"
include "SPUInstrInfo.td"

//===----------------------------------------------------------------------===//
// Subtarget features:
//===----------------------------------------------------------------------===//

def DefaultProc: SubtargetFeature<"", "ProcDirective", "SPU::DEFAULT_PROC", "">;
def LargeMemFeature:
  SubtargetFeature<"large_mem","UseLargeMem", "true",
                   "Use large (>256) LSA memory addressing [default = false]">;

def SPURev0 : Processor<"v0", SPUItineraries, [DefaultProc]>;

//===----------------------------------------------------------------------===//
// Calling convention:
//===----------------------------------------------------------------------===//

include "SPUCallingConv.td"

// Target:

def SPUInstrInfo : InstrInfo {
  let isLittleEndianEncoding = 1;
}

def SPU : Target {
  let InstructionSet = SPUInstrInfo;
}
