1//====-- SystemZMCAsmInfo.h - SystemZ asm properties -----------*- C++ -*--===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZMCASMINFO_H
10#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZMCASMINFO_H
11
12#include "llvm/MC/MCAsmInfoELF.h"
13#include "llvm/MC/MCAsmInfoGOFF.h"
14#include "llvm/Support/Compiler.h"
15
16namespace llvm {
17class Triple;
18enum SystemZAsmDialect { AD_GNU = 0, AD_HLASM = 1 };
19
20class SystemZMCAsmInfoELF : public MCAsmInfoELF {
21public:
22 explicit SystemZMCAsmInfoELF(const Triple &TT);
23};
24
25class SystemZMCAsmInfoGOFF : public MCAsmInfoGOFF {
26public:
27 explicit SystemZMCAsmInfoGOFF(const Triple &TT);
28 bool isAcceptableChar(char C) const override;
29 void printSpecifierExpr(raw_ostream &OS,
30 const MCSpecifierExpr &Expr) const override;
31 bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
32 const MCAssembler *Asm) const override;
33};
34
35namespace SystemZ {
36using Specifier = uint16_t;
37enum {
38 S_None,
39
40 S_DTPOFF,
41 S_GOT,
42 S_GOTENT,
43 S_INDNTPOFF,
44 S_NTPOFF,
45 S_PLT,
46 S_TLSGD,
47 S_TLSLD,
48 S_TLSLDM,
49
50 // HLASM docs for address constants:
51 // https://www.ibm.com/docs/en/hla-and-tf/1.6?topic=value-address-constants
52 S_RCon, // Address of ADA of symbol.
53 S_VCon, // Address of external function symbol.
54};
55} // namespace SystemZ
56
57} // end namespace llvm
58
59#endif
60