1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===- MCTargetOptions.h - MC Target Options -------------------*- C++ -*-===//
2dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
3dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//                     The LLVM Compiler Infrastructure
4dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
5dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// This file is distributed under the University of Illinois Open Source
6dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// License. See LICENSE.TXT for details.
7dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
8dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===----------------------------------------------------------------------===//
9dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#ifndef LLVM_MC_MCTARGETOPTIONS_H
11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define LLVM_MC_MCTARGETOPTIONS_H
12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace llvm {
14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCTargetOptions {
16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinespublic:
17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  enum AsmInstrumentation {
18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    AsmInstrumentationNone,
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    AsmInstrumentationAddress
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  };
21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  /// Enables AddressSanitizer instrumentation at machine level.
23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool SanitizeAddress : 1;
24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool MCRelaxAll : 1;
26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool MCNoExecStack : 1;
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool MCSaveTempLabels : 1;
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool MCUseDwarfDirectory : 1;
29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool ShowMCEncoding : 1;
30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool ShowMCInst : 1;
31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool AsmVerbose : 1;
32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  int DwarfVersion;
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MCTargetOptions();
34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines};
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline bool operator==(const MCTargetOptions &LHS, const MCTargetOptions &RHS) {
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define ARE_EQUAL(X) LHS.X == RHS.X
38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return (ARE_EQUAL(SanitizeAddress) &&
39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          ARE_EQUAL(MCRelaxAll) &&
40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          ARE_EQUAL(MCNoExecStack) &&
41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          ARE_EQUAL(MCSaveTempLabels) &&
42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          ARE_EQUAL(MCUseDwarfDirectory) &&
43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          ARE_EQUAL(ShowMCEncoding) &&
44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          ARE_EQUAL(ShowMCInst) &&
45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines          ARE_EQUAL(AsmVerbose) &&
46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines	  ARE_EQUAL(DwarfVersion));
47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#undef ARE_EQUAL
48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline bool operator!=(const MCTargetOptions &LHS, const MCTargetOptions &RHS) {
51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return !(LHS == RHS);
52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
54dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // end namespace llvm
55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#endif
57