implement smull and umull
[oota-llvm.git] / lib / Target / ARM / ARM.h
1 //===-- ARM.h - Top-level interface for ARM representation---- --*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the "Instituto Nokia de Tecnologia" and
6 // is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10 //
11 // This file contains the entry points for global functions defined in the LLVM
12 // ARM back-end.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef TARGET_ARM_H
17 #define TARGET_ARM_H
18
19 #include <iosfwd>
20 #include <cassert>
21
22 namespace llvm {
23   // Enums corresponding to ARM condition codes
24   namespace ARMCC {
25     enum CondCodes {
26       EQ,
27       NE,
28       CS,
29       CC,
30       MI,
31       PL,
32       VS,
33       VC,
34       HI,
35       LS,
36       GE,
37       LT,
38       GT,
39       LE,
40       AL
41     };
42   }
43
44   namespace ARMShift {
45     enum ShiftTypes {
46       LSL,
47       LSR,
48       ASR,
49       ROR,
50       RRX
51     };
52   }
53
54   static const char *ARMCondCodeToString(ARMCC::CondCodes CC) {
55     switch (CC) {
56     default: assert(0 && "Unknown condition code");
57     case ARMCC::EQ:  return "eq";
58     case ARMCC::NE:  return "ne";
59     case ARMCC::CS:  return "cs";
60     case ARMCC::CC:  return "cc";
61     case ARMCC::MI:  return "mi";
62     case ARMCC::PL:  return "pl";
63     case ARMCC::VS:  return "vs";
64     case ARMCC::VC:  return "vc";
65     case ARMCC::HI:  return "hi";
66     case ARMCC::LS:  return "ls";
67     case ARMCC::GE:  return "ge";
68     case ARMCC::LT:  return "lt";
69     case ARMCC::GT:  return "gt";
70     case ARMCC::LE:  return "le";
71     case ARMCC::AL:  return "al";
72     }
73   }
74
75   class FunctionPass;
76   class TargetMachine;
77
78   FunctionPass *createARMISelDag(TargetMachine &TM);
79   FunctionPass *createARMCodePrinterPass(std::ostream &OS, TargetMachine &TM);
80   FunctionPass *createARMFixMulPass();
81 } // end namespace llvm;
82
83 // Defines symbolic names for ARM registers.  This defines a mapping from
84 // register name to register number.
85 //
86 #include "ARMGenRegisterNames.inc"
87
88 // Defines symbolic names for the ARM instructions.
89 //
90 #include "ARMGenInstrNames.inc"
91
92
93 #endif