131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- PPCBaseInfo.h - Top level definitions for PPC -----------*- C++ -*-===//
2b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//
3b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//                     The LLVM Compiler Infrastructure
4b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//
5b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng// This file is distributed under the University of Illinois Open Source
6b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng// License. See LICENSE.TXT for details.
7b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//
8b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//===----------------------------------------------------------------------===//
9b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//
10b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng// This file contains small standalone helper functions and enum definitions for
11b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng// the PPC target useful for the compiler back-end and the MC libraries.
12b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng// As such, it deliberately does not include references to LLVM core
13b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng// code gen types, passes, etc..
14b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//
15b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng//===----------------------------------------------------------------------===//
16b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng
17b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng#ifndef PPCBASEINFO_H
18b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng#define PPCBASEINFO_H
19b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng
20b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng#include "PPCMCTargetDesc.h"
21b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng#include "llvm/Support/ErrorHandling.h"
22b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng
23b024572444d19a6e06624328ea6a75a2f3342eafEvan Chengnamespace llvm {
24b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng
2554134708f5debe1631f9ea9b232f78758a2151e4Evan Cheng/// getPPCRegisterNumbering - Given the enum value for some register, e.g.
26b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng/// PPC::F14, return the number that it corresponds to (e.g. 14).
27b024572444d19a6e06624328ea6a75a2f3342eafEvan Chenginline static unsigned getPPCRegisterNumbering(unsigned RegEnum) {
28b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  using namespace PPC;
29b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  switch (RegEnum) {
30b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case 0: return 0;
31b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R0 :  case X0 :  case F0 :  case V0 : case CR0:  case CR0LT: return  0;
32b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R1 :  case X1 :  case F1 :  case V1 : case CR1:  case CR0GT: return  1;
33b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R2 :  case X2 :  case F2 :  case V2 : case CR2:  case CR0EQ: return  2;
34b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R3 :  case X3 :  case F3 :  case V3 : case CR3:  case CR0UN: return  3;
35b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R4 :  case X4 :  case F4 :  case V4 : case CR4:  case CR1LT: return  4;
36b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R5 :  case X5 :  case F5 :  case V5 : case CR5:  case CR1GT: return  5;
37b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R6 :  case X6 :  case F6 :  case V6 : case CR6:  case CR1EQ: return  6;
38b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R7 :  case X7 :  case F7 :  case V7 : case CR7:  case CR1UN: return  7;
39b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R8 :  case X8 :  case F8 :  case V8 : case CR2LT: return  8;
40b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R9 :  case X9 :  case F9 :  case V9 : case CR2GT: return  9;
41b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R10:  case X10:  case F10:  case V10: case CR2EQ: return 10;
42b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R11:  case X11:  case F11:  case V11: case CR2UN: return 11;
43b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R12:  case X12:  case F12:  case V12: case CR3LT: return 12;
44b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R13:  case X13:  case F13:  case V13: case CR3GT: return 13;
45b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R14:  case X14:  case F14:  case V14: case CR3EQ: return 14;
46b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R15:  case X15:  case F15:  case V15: case CR3UN: return 15;
47b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R16:  case X16:  case F16:  case V16: case CR4LT: return 16;
48b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R17:  case X17:  case F17:  case V17: case CR4GT: return 17;
49b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R18:  case X18:  case F18:  case V18: case CR4EQ: return 18;
50b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R19:  case X19:  case F19:  case V19: case CR4UN: return 19;
51b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R20:  case X20:  case F20:  case V20: case CR5LT: return 20;
52b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R21:  case X21:  case F21:  case V21: case CR5GT: return 21;
53b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R22:  case X22:  case F22:  case V22: case CR5EQ: return 22;
54b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R23:  case X23:  case F23:  case V23: case CR5UN: return 23;
55b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R24:  case X24:  case F24:  case V24: case CR6LT: return 24;
56b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R25:  case X25:  case F25:  case V25: case CR6GT: return 25;
57b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R26:  case X26:  case F26:  case V26: case CR6EQ: return 26;
58b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R27:  case X27:  case F27:  case V27: case CR6UN: return 27;
59b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R28:  case X28:  case F28:  case V28: case CR7LT: return 28;
60b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R29:  case X29:  case F29:  case V29: case CR7GT: return 29;
61b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R30:  case X30:  case F30:  case V30: case CR7EQ: return 30;
62b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  case R31:  case X31:  case F31:  case V31: case CR7UN: return 31;
63b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  default:
64b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng    llvm_unreachable("Unhandled reg in PPCRegisterInfo::getRegisterNumbering!");
65b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng  }
66b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng}
67b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng
68b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng} // end namespace llvm;
69b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng
70b024572444d19a6e06624328ea6a75a2f3342eafEvan Cheng#endif
71