LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ARMUnwindOp.h
Go to the documentation of this file.
1 //===-- ARMUnwindOp.h - ARM Unwind Opcodes ----------------------*- 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 constants for the ARM unwind opcodes and exception
11 // handling table entry kinds.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef ARM_UNWIND_OP_H
16 #define ARM_UNWIND_OP_H
17 
18 namespace llvm {
19 
20  /// ARM exception handling table entry kinds
22  EHT_GENERIC = 0x00,
23  EHT_COMPACT = 0x80
24  };
25 
26  enum {
27  /// Special entry for the function never unwind
29  };
30 
31  /// ARM-defined frame unwinding opcodes
33  // Format: 00xxxxxx
34  // Purpose: vsp = vsp + ((x << 2) + 4)
36 
37  // Format: 01xxxxxx
38  // Purpose: vsp = vsp - ((x << 2) + 4)
40 
41  // Format: 10000000 00000000
42  // Purpose: refuse to unwind
44 
45  // Format: 1000xxxx xxxxxxxx
46  // Purpose: pop r[15:12], r[11:4]
47  // Constraint: x != 0
49 
50  // Format: 1001xxxx
51  // Purpose: vsp = r[x]
52  // Constraint: x != 13 && x != 15
54 
55  // Format: 10100xxx
56  // Purpose: pop r[(4+x):4]
58 
59  // Format: 10101xxx
60  // Purpose: pop r14, r[(4+x):4]
62 
63  // Format: 10110000
64  // Purpose: finish
66 
67  // Format: 10110001 0000xxxx
68  // Purpose: pop r[3:0]
69  // Constraint: x != 0
71 
72  // Format: 10110010 x(uleb128)
73  // Purpose: vsp = vsp + ((x << 2) + 0x204)
75 
76  // Format: 10110011 xxxxyyyy
77  // Purpose: pop d[(x+y):x]
79 
80  // Format: 10111xxx
81  // Purpose: pop d[(8+x):8]
83 
84  // Format: 11000xxx
85  // Purpose: pop wR[(10+x):10]
87 
88  // Format: 11000110 xxxxyyyy
89  // Purpose: pop wR[(x+y):x]
91 
92  // Format: 11000111 0000xxxx
93  // Purpose: pop wCGR[3:0]
94  // Constraint: x != 0
96 
97  // Format: 11001000 xxxxyyyy
98  // Purpose: pop d[(16+x+y):(16+x)]
100 
101  // Format: 11001001 xxxxyyyy
102  // Purpose: pop d[(x+y):x]
104 
105  // Format: 11010xxx
106  // Purpose: pop d[(8+x):8]
108  };
109 
110  /// ARM-defined Personality Routine Index
112  // To make the exception handling table become more compact, ARM defined
113  // several personality routines in EHABI. There are 3 different
114  // personality routines in ARM EHABI currently. It is possible to have 16
115  // pre-defined personality routines at most.
119 
121  };
122 
123 }
124 
125 #endif // ARM_UNWIND_OP_H
Special entry for the function never unwind.
Definition: ARMUnwindOp.h:28
ARMEHTEntryKind
ARM exception handling table entry kinds.
Definition: ARMUnwindOp.h:21
ARMUnwindOpcodes
ARM-defined frame unwinding opcodes.
Definition: ARMUnwindOp.h:32
ARMPersonalityRoutineIndex
ARM-defined Personality Routine Index.
Definition: ARMUnwindOp.h:111