255daf04ac0e25d92c00590b2e9d3438d9981f86
[oota-llvm.git] / lib / Target / Mips / MipsRelocations.h
1 //===- MipsRelocations.h - Mips Code Relocations ---------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===---------------------------------------------------------------------===//
9 //
10 // This file defines the Mips target-specific relocation types
11 // (for relocation-model=static).
12 //
13 //===---------------------------------------------------------------------===//
14
15 #ifndef MIPSRELOCATIONS_H_
16 #define MIPSRELOCATIONS_H_
17
18 #include "llvm/CodeGen/MachineRelocation.h"
19
20 namespace llvm {
21   namespace Mips{
22     enum RelocationType {
23       // reloc_mips_branch - pc relative relocation for branches. The lower 18
24       // bits of the difference between the branch target and the branch
25       // instruction, shifted right by 2.
26       reloc_mips_branch = 1,
27
28       // reloc_mips_hi - upper 16 bits of the address (modified by +1 if the
29       // lower 16 bits of the address is negative).
30       reloc_mips_hi = 2,
31
32       // reloc_mips_lo - lower 16 bits of the address.
33       reloc_mips_lo = 3,
34
35       // reloc_mips_26 - lower 28 bits of the address, shifted right by 2.
36       reloc_mips_26 = 4,
37
38       // I am starting here with the rest of the relocations because
39       // I have no idea if the above enumerations are assumed somewhere
40       // else
41       reloc_mips_16         =  6, // R_MIPS_16
42       reloc_mips_32         =  7, // R_MIPS_32
43       reloc_mips_rel32      =  8, // R_MIPS_REL32
44       reloc_mips_gprel16    = 10, // R_MIPS_GPREL16
45       reloc_mips_literal    = 12, // R_MIPS_LITERAL
46       reloc_mips_got16      = 13, // R_MIPS_GOT16
47       reloc_mips_call16     = 15, // R_MIPS_CALL16
48       reloc_mips_gprel32    = 17, // R_MIPS_GPREL32
49       reloc_mips_shift5     = 18, // R_MIPS_SHIFT5
50       reloc_mips_shift6     = 19, // R_MIPS_SHIFT6
51       reloc_mips_64         = 20, // R_MIPS_64
52       reloc_mips_tlsgd      = 21, // R_MIPS_TLS_GD
53       reloc_mips_gottprel   = 22, // R_MIPS_TLS_GOTTPREL
54       reloc_mips_tprel_hi   = 23, // R_MIPS_TLS_TPREL_HI16
55       reloc_mips_tprel_lo   = 24, // R_MIPS_TLS_TPREL_LO16
56       reloc_mips_branch_pcrel = 25 // This should become R_MIPS_PC16
57     };
58   }
59 }
60
61 #endif /* MIPSRELOCATIONS_H_ */