forked from OSchip/llvm-project
[MC] Use LShr for constant evaluation of ">>" on ELF/arm64--darwin.
This matches other assemblers and is less unexpected (e.g. PR23227). On ELF, I tried binutils gas v2.24 and nasm 2.10.09, and they both agree on LShr. On COFF, I couldn't get my hands on an assembler yet, so don't change the behavior. For now, don't change it on non-AArch64 Darwin either, as the other assembler is gas v1.38, which does an AShr. llvm-svn: 235963
This commit is contained in:
parent
09bff88fc4
commit
190528703f
|
@ -90,7 +90,7 @@ MCAsmInfo::MCAsmInfo() {
|
||||||
DwarfRegNumForCFI = false;
|
DwarfRegNumForCFI = false;
|
||||||
NeedsDwarfSectionOffsetDirective = false;
|
NeedsDwarfSectionOffsetDirective = false;
|
||||||
UseParensForSymbolVariant = false;
|
UseParensForSymbolVariant = false;
|
||||||
UseLogicalShr = false;
|
UseLogicalShr = true;
|
||||||
|
|
||||||
// FIXME: Clang's logic should be synced with the logic used to initialize
|
// FIXME: Clang's logic should be synced with the logic used to initialize
|
||||||
// this member and the two implementations should be merged.
|
// this member and the two implementations should be merged.
|
||||||
|
|
|
@ -36,6 +36,10 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {
|
||||||
NeedsDwarfSectionOffsetDirective = true;
|
NeedsDwarfSectionOffsetDirective = true;
|
||||||
|
|
||||||
UseIntegratedAssembler = true;
|
UseIntegratedAssembler = true;
|
||||||
|
|
||||||
|
// FIXME: For now keep the previous behavior, AShr. Need to double-check
|
||||||
|
// other COFF-targeting assemblers and change this if necessary.
|
||||||
|
UseLogicalShr = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCAsmInfoMicrosoft::anchor() { }
|
void MCAsmInfoMicrosoft::anchor() { }
|
||||||
|
|
|
@ -93,4 +93,9 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
|
||||||
|
|
||||||
UseIntegratedAssembler = true;
|
UseIntegratedAssembler = true;
|
||||||
SetDirectiveSuppressesReloc = true;
|
SetDirectiveSuppressesReloc = true;
|
||||||
|
|
||||||
|
// FIXME: For now keep the previous behavior, AShr, matching the previous
|
||||||
|
// behavior of as(1) (both -q and -Q: resp. LLVM and gas v1.38).
|
||||||
|
// If/when this changes, the AArch64 Darwin special case can go away.
|
||||||
|
UseLogicalShr = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,10 @@ AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin() {
|
||||||
UseDataRegionDirectives = true;
|
UseDataRegionDirectives = true;
|
||||||
|
|
||||||
ExceptionsType = ExceptionHandling::DwarfCFI;
|
ExceptionsType = ExceptionHandling::DwarfCFI;
|
||||||
|
|
||||||
|
// AArch64 Darwin doesn't have the baggage of X86/ARM, so it's fine to use
|
||||||
|
// LShr instead of AShr.
|
||||||
|
UseLogicalShr = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCExpr *AArch64MCAsmInfoDarwin::getExprForPersonalitySymbol(
|
const MCExpr *AArch64MCAsmInfoDarwin::getExprForPersonalitySymbol(
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
// RUN: llvm-mc -triple aarch64-unknown-unknown-elf %s | FileCheck %s --check-prefix=ELF
|
||||||
|
// RUN: llvm-mc -triple aarch64-unknown-darwin %s | FileCheck %s --check-prefix=DARWIN
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
// ELF: .xword 3
|
||||||
|
// DARWIN: .quad 3
|
||||||
|
.quad (~0 >> 62)
|
|
@ -1,7 +1,7 @@
|
||||||
// RUN: llvm-mc -triple arm-unknown-linux %s | FileCheck %s
|
// RUN: llvm-mc -triple arm-unknown-linux %s | FileCheck %s
|
||||||
|
|
||||||
// CHECK: .byte 1
|
// CHECK: .byte 1
|
||||||
.if [~0 >> 1] == -1
|
.if [~0 >> 63] == 1
|
||||||
.byte 1
|
.byte 1
|
||||||
.else
|
.else
|
||||||
.byte 2
|
.byte 2
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
// RUN: llvm-mc -triple x86_64-unknown-unknown-elf %s | FileCheck %s --check-prefix=CHECK
|
||||||
|
// RUN: llvm-mc -triple x86_64-pc-windows-msvc %s | FileCheck %s --check-prefix=MSVC
|
||||||
|
// RUN: llvm-mc -triple x86_64-unknown-darwin %s | FileCheck %s --check-prefix=DARWIN
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
// CHECK: .quad 3
|
||||||
|
|
||||||
|
// Both COFF and Darwin still use AShr.
|
||||||
|
// MSVC: .quad -1
|
||||||
|
// DARWIN: .quad -1
|
||||||
|
|
||||||
|
.quad (~0 >> 62)
|
|
@ -1,7 +1,7 @@
|
||||||
// RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
|
// RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
|
||||||
|
|
||||||
// CHECK: .byte 1
|
// CHECK: .byte 1
|
||||||
.if [~0 >> 1] == -1
|
.if [~0 >> 63] == 1
|
||||||
.byte 1
|
.byte 1
|
||||||
.else
|
.else
|
||||||
.byte 2
|
.byte 2
|
||||||
|
|
Loading…
Reference in New Issue