| Index: src/IceTargetLoweringX8632.cpp
|
| diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp
|
| index 2836865e1e3cb39891a8b6383fb10d303b9236df..8e57ba65b89115dd55163d5995e3fbf624b2c3a4 100644
|
| --- a/src/IceTargetLoweringX8632.cpp
|
| +++ b/src/IceTargetLoweringX8632.cpp
|
| @@ -4560,25 +4560,19 @@ void ConstantUndef::emit(GlobalContext *) const {
|
| llvm_unreachable("undef value encountered by emitter.");
|
| }
|
|
|
| -TargetGlobalX8632::TargetGlobalX8632(GlobalContext *Ctx)
|
| - : TargetGlobalLowering(Ctx) {}
|
| -
|
| -void TargetGlobalX8632::lowerInit(const VariableDeclaration &Var) const {
|
| - // TODO(jvoung): handle this without text.
|
| - if (Ctx->getFlags().UseELFWriter)
|
| - return;
|
| -
|
| - Ostream &Str = Ctx->getStrEmit();
|
| -
|
| - const VariableDeclaration::InitializerListType &Initializers =
|
| - Var.getInitializers();
|
| +TargetDataX8632::TargetDataX8632(GlobalContext *Ctx)
|
| + : TargetDataLowering(Ctx) {}
|
|
|
| +void TargetDataX8632::lowerGlobal(const VariableDeclaration &Var) const {
|
| // If external and not initialized, this must be a cross test.
|
| // Don't generate a declaration for such cases.
|
| bool IsExternal = Var.isExternal() || Ctx->getFlags().DisableInternal;
|
| if (IsExternal && !Var.hasInitializer())
|
| return;
|
|
|
| + Ostream &Str = Ctx->getStrEmit();
|
| + const VariableDeclaration::InitializerListType &Initializers =
|
| + Var.getInitializers();
|
| bool HasNonzeroInitializer = Var.hasNonzeroInitializer();
|
| bool IsConstant = Var.getIsConstant();
|
| uint32_t Align = Var.getAlignment();
|
| @@ -4645,6 +4639,12 @@ void TargetGlobalX8632::lowerInit(const VariableDeclaration &Var) const {
|
| Str << "\t.size\t" << MangledName << ", " << Size << "\n";
|
| }
|
|
|
| +void
|
| +TargetDataX8632::lowerGlobalsELF(const VariableDeclarationList &Vars) const {
|
| + ELFObjectWriter *Writer = Ctx->getObjectWriter();
|
| + Writer->writeDataSection(Vars, llvm::ELF::R_386_32);
|
| +}
|
| +
|
| template <typename T> struct PoolTypeConverter {};
|
|
|
| template <> struct PoolTypeConverter<float> {
|
| @@ -4672,7 +4672,7 @@ const char *PoolTypeConverter<double>::AsmTag = ".quad";
|
| const char *PoolTypeConverter<double>::PrintfString = "0x%llx";
|
|
|
| template <typename T>
|
| -void TargetGlobalX8632::emitConstantPool(GlobalContext *Ctx) {
|
| +void TargetDataX8632::emitConstantPool(GlobalContext *Ctx) {
|
| // Note: Still used by emit IAS.
|
| Ostream &Str = Ctx->getStrEmit();
|
| Type Ty = T::Ty;
|
| @@ -4701,7 +4701,7 @@ void TargetGlobalX8632::emitConstantPool(GlobalContext *Ctx) {
|
| }
|
| }
|
|
|
| -void TargetGlobalX8632::lowerConstants(GlobalContext *Ctx) const {
|
| +void TargetDataX8632::lowerConstants(GlobalContext *Ctx) const {
|
| if (Ctx->getFlags().DisableTranslation)
|
| return;
|
| // No need to emit constants from the int pool since (for x86) they
|
|
|