Skip to content

Commit

Permalink
[MC] Use LShr for constant evaluation of ">>" on ELF/arm64--darwin.
Browse files Browse the repository at this point in the history
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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235963 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
ahmedbougacha committed Apr 28, 2015
1 parent fef4836 commit e1f835a
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 3 deletions.
2 changes: 1 addition & 1 deletion lib/MC/MCAsmInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ MCAsmInfo::MCAsmInfo() {
DwarfRegNumForCFI = false;
NeedsDwarfSectionOffsetDirective = false;
UseParensForSymbolVariant = false;
UseLogicalShr = false;
UseLogicalShr = true;

// FIXME: Clang's logic should be synced with the logic used to initialize
// this member and the two implementations should be merged.
Expand Down
4 changes: 4 additions & 0 deletions lib/MC/MCAsmInfoCOFF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {
NeedsDwarfSectionOffsetDirective = 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() { }
Expand Down
5 changes: 5 additions & 0 deletions lib/MC/MCAsmInfoDarwin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,9 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {

UseIntegratedAssembler = 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;
}
4 changes: 4 additions & 0 deletions lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin() {
UseDataRegionDirectives = true;

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(
Expand Down
8 changes: 8 additions & 0 deletions test/MC/AArch64/expr-shr.s
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 1 addition & 1 deletion test/MC/ARM/bracket-exprs.s
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// RUN: llvm-mc -triple arm-unknown-linux %s | FileCheck %s

// CHECK: .byte 1
.if [~0 >> 1] == -1
.if [~0 >> 63] == 1
.byte 1
.else
.byte 2
Expand Down
13 changes: 13 additions & 0 deletions test/MC/AsmParser/expr-shr.s
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 1 addition & 1 deletion test/MC/ELF/bracket-exprs.s
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s

// CHECK: .byte 1
.if [~0 >> 1] == -1
.if [~0 >> 63] == 1
.byte 1
.else
.byte 2
Expand Down

0 comments on commit e1f835a

Please sign in to comment.