17c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner//===-- Sparc.h - Top-level interface for Sparc representation --*- C++ -*-===//
2b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman//
3e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke//                     The LLVM Compiler Infrastructure
4e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman//
8e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke//===----------------------------------------------------------------------===//
9e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke//
10e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke// This file contains the entry points for global functions defined in the LLVM
117c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner// Sparc back-end.
12e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke//
13e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke//===----------------------------------------------------------------------===//
14e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke
157c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner#ifndef TARGET_SPARC_H
167c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner#define TARGET_SPARC_H
17e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke
18c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "MCTargetDesc/SparcMCTargetDesc.h"
19c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwin#include "llvm/Support/ErrorHandling.h"
2098a366d547772010e94609e4584489b3e5ce0043Bill Wendling#include "llvm/Target/TargetMachine.h"
21e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke
22e785e531f4495068ee46cabd926939eec15a565aBrian Gaekenamespace llvm {
231c809c594b8339fff4746c08e34914fffc3242e4Chris Lattner  class FunctionPass;
24da8ac5fd9130b70b61be61e4819faa8d842d708fDan Gohman  class SparcTargetMachine;
2571847813bc419f7a0667468136a07429c6d9f164David Greene  class formatted_raw_ostream;
26e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke
27da8ac5fd9130b70b61be61e4819faa8d842d708fDan Gohman  FunctionPass *createSparcISelDag(SparcTargetMachine &TM);
287c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner  FunctionPass *createSparcDelaySlotFillerPass(TargetMachine &TM);
297c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner  FunctionPass *createSparcFPMoverPass(TargetMachine &TM);
304cb1e13769856716261a4d315f8202bd918502c3Daniel Dunbar
31e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke} // end namespace llvm;
32e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke
336788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattnernamespace llvm {
347c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner  // Enums corresponding to Sparc condition codes, both icc's and fcc's.  These
356788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner  // values must be kept in sync with the ones in the .td file.
367c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner  namespace SPCC {
376788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner    enum CondCodes {
386788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      //ICC_A   =  8   ,  // Always
396788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      //ICC_N   =  0   ,  // Never
406788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_NE  =  9   ,  // Not Equal
416788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_E   =  1   ,  // Equal
426788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_G   = 10   ,  // Greater
436788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_LE  =  2   ,  // Less or Equal
446788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_GE  = 11   ,  // Greater or Equal
456788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_L   =  3   ,  // Less
466788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_GU  = 12   ,  // Greater Unsigned
476788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_LEU =  4   ,  // Less or Equal Unsigned
486788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_CC  = 13   ,  // Carry Clear/Great or Equal Unsigned
496788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_CS  =  5   ,  // Carry Set/Less Unsigned
506788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_POS = 14   ,  // Positive
516788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_NEG =  6   ,  // Negative
526788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_VC  = 15   ,  // Overflow Clear
536788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      ICC_VS  =  7   ,  // Overflow Set
546788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner
556788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      //FCC_A   =  8+16,  // Always
566788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      //FCC_N   =  0+16,  // Never
576788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_U   =  7+16,  // Unordered
586788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_G   =  6+16,  // Greater
596788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_UG  =  5+16,  // Unordered or Greater
606788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_L   =  4+16,  // Less
616788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_UL  =  3+16,  // Unordered or Less
626788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_LG  =  2+16,  // Less or Greater
636788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_NE  =  1+16,  // Not Equal
646788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_E   =  9+16,  // Equal
656788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_UE  = 10+16,  // Unordered or Equal
666788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_GE  = 11+16,  // Greater or Equal
676788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_UGE = 12+16,  // Unordered or Greater or Equal
686788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_LE  = 13+16,  // Less or Equal
696788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner      FCC_ULE = 14+16,  // Unordered or Less or Equal
70d74ea2bbd8bb630331f35ead42d385249bd42af8Chris Lattner      FCC_O   = 15+16   // Ordered
716788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner    };
726788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner  }
736788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner
749c5d4de8375f5111765519ac762427b2b8255df6Chris Lattner  inline static const char *SPARCCondCodeToString(SPCC::CondCodes CC) {
756788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner    switch (CC) {
767c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_NE:  return "ne";
777c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_E:   return "e";
787c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_G:   return "g";
797c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_LE:  return "le";
807c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_GE:  return "ge";
817c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_L:   return "l";
827c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_GU:  return "gu";
837c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_LEU: return "leu";
847c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_CC:  return "cc";
857c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_CS:  return "cs";
867c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_POS: return "pos";
877c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_NEG: return "neg";
887c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_VC:  return "vc";
897c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::ICC_VS:  return "vs";
907c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_U:   return "u";
917c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_G:   return "g";
927c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_UG:  return "ug";
937c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_L:   return "l";
947c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_UL:  return "ul";
957c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_LG:  return "lg";
967c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_NE:  return "ne";
977c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_E:   return "e";
987c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_UE:  return "ue";
997c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_GE:  return "ge";
1007c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_UGE: return "uge";
1017c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_LE:  return "le";
1027c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_ULE: return "ule";
1037c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner    case SPCC::FCC_O:   return "o";
104e4ad58272970ecd850d233862f40a72d15649639Benjamin Kramer    }
105e4ad58272970ecd850d233862f40a72d15649639Benjamin Kramer    llvm_unreachable("Invalid cond code");
1066788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner  }
1076788faa06ad77fbfb57db7bcf8bc6a79389775a6Chris Lattner}  // end namespace llvm
108e785e531f4495068ee46cabd926939eec15a565aBrian Gaeke#endif
109