Fangrui Song e9de1ee9f5 MC: Move useCodeAlign from MCSection to MCAsmInfo
To centralize assembly-related virtual functions to MCAsmInfo and move
toward making MCSection non-virtual.
2025-07-26 11:34:10 -07:00

140 lines
4.6 KiB
C++

//===-- PPCMCAsmInfo.h - PPC asm properties --------------------*- C++ -*--===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file contains the declarations of the PowerPC MCAsmInfo classes.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCASMINFO_H
#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCASMINFO_H
#include "llvm/MC/MCAsmInfoELF.h"
#include "llvm/MC/MCAsmInfoXCOFF.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCValue.h"
namespace llvm {
class Triple;
class PPCELFMCAsmInfo : public MCAsmInfoELF {
void anchor() override;
public:
explicit PPCELFMCAsmInfo(bool is64Bit, const Triple &);
void printSpecifierExpr(raw_ostream &OS,
const MCSpecifierExpr &Expr) const override;
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
const MCAssembler *Asm) const override;
};
class PPCXCOFFMCAsmInfo : public MCAsmInfoXCOFF {
public:
explicit PPCXCOFFMCAsmInfo(bool is64Bit, const Triple &);
void printSpecifierExpr(raw_ostream &OS,
const MCSpecifierExpr &Expr) const override;
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
const MCAssembler *Asm) const override;
};
namespace PPC {
enum Specifier {
S_None,
S_LO,
S_HI,
S_HA,
S_HIGH,
S_HIGHA,
S_HIGHER,
S_HIGHERA,
S_HIGHEST,
S_HIGHESTA,
S_AIX_TLSGD, // symbol@gd
S_AIX_TLSGDM, // symbol@m
S_AIX_TLSIE, // symbol@ie
S_AIX_TLSLD, // symbol@ld
S_AIX_TLSLE, // symbol@le
S_AIX_TLSML, // symbol@ml
S_DTPMOD, // symbol@dtpmod
S_DTPREL, // symbol@dprel
S_DTPREL_HA, // symbol@dtprel@ha
S_DTPREL_HI, // symbol@dtprel@h
S_DTPREL_HIGH, // symbol@dtprel@high
S_DTPREL_HIGHA, // symbol@dtprel@higha
S_DTPREL_HIGHER, // symbol@dtprel@higher
S_DTPREL_HIGHERA, // symbol@dtprel@highera
S_DTPREL_HIGHEST, // symbol@dtprel@highest
S_DTPREL_HIGHESTA, // symbol@dtprel@highesta
S_DTPREL_LO, // symbol@dtprel@l
S_GOT, // symbol@got
S_GOT_DTPREL, // symbol@got@dtprel
S_GOT_DTPREL_HA, // symbol@got@dtprel@ha
S_GOT_DTPREL_HI, // symbol@got@dtprel@h
S_GOT_DTPREL_LO, // symbol@got@dtprel@l
S_GOT_HA, // symbol@got@ha
S_GOT_HI, // symbol@got@h
S_GOT_LO, // symbol@got@l
S_GOT_PCREL, // symbol@got@pcrel
S_GOT_TLSGD, // symbol@got@tlsgd
S_GOT_TLSGD_HA, // symbol@got@tlsgd@ha
S_GOT_TLSGD_HI, // symbol@got@tlsgd@h
S_GOT_TLSGD_LO, // symbol@got@tlsgd@l
S_GOT_TLSGD_PCREL, // symbol@got@tlsgd@pcrel
S_GOT_TLSLD, // symbol@got@tlsld
S_GOT_TLSLD_HA, // symbol@got@tlsld@ha
S_GOT_TLSLD_HI, // symbol@got@tlsld@h
S_GOT_TLSLD_LO, // symbol@got@tlsld@l
S_GOT_TLSLD_PCREL, // symbol@got@tlsld@pcrel
S_GOT_TPREL, // symbol@got@tprel
S_GOT_TPREL_HA, // symbol@got@tprel@ha
S_GOT_TPREL_HI, // symbol@got@tprel@h
S_GOT_TPREL_LO, // symbol@got@tprel@l
S_GOT_TPREL_PCREL, // symbol@got@tprel@pcrel
S_L, // symbol@l
S_LOCAL, // symbol@local
S_NOTOC, // symbol@notoc
S_PCREL,
S_PCREL_OPT, // .reloc expr, R_PPC64_PCREL_OPT, expr
S_PLT, // symbol@plt
S_TLS, // symbol@tls
S_TLSGD, // symbol@tlsgd
S_TLSLD, // symbol@tlsld
S_TLS_PCREL, // symbol@tls@pcrel
S_TOC, // symbol@toc
S_TOCBASE, // symbol@tocbase
S_TOC_HA, // symbol@toc@ha
S_TOC_HI, // symbol@toc@h
S_TOC_LO, // symbol@toc@l
S_TPREL, // symbol@tprel
S_TPREL_HA, // symbol@tprel@ha
S_TPREL_HI, // symbol@tprel@h
S_TPREL_HIGH, // symbol@tprel@high
S_TPREL_HIGHA, // symbol@tprel@higha
S_TPREL_HIGHER, // symbol@tprel@higher
S_TPREL_HIGHERA, // symbol@tprel@highera
S_TPREL_HIGHEST, // symbol@tprel@highest
S_TPREL_HIGHESTA, // symbol@tprel@highesta
S_TPREL_LO, // symbol@tprel@l
S_U, // symbol@u
};
bool evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res);
}
namespace PPCMCExpr {
using Specifier = uint16_t;
}
static inline uint16_t getSpecifier(const MCSymbolRefExpr *SRE) {
return SRE->getKind();
}
} // namespace llvm
#endif