forked from OSchip/llvm-project
Add -fno-movt frontend option, to disable movt/movw on ARM
Summary: In rL256641, @davide turned off movt generation by default for FreeBSD. This was because our ld is very old, and did not support the relocations for it. However, Ian Lepore added the support very recently, so we would like to revert rL256641, and replace it with a new `-fno-movt` frontend option. This way, it can be turned off when needed. Reviewers: dexonsmith, echristo, emaste, davide Subscribers: andrew, aemerson, rengolin, davide, cfe-commits, ahatanak, emaste Differential Revision: http://reviews.llvm.org/D15899 llvm-svn: 256920
This commit is contained in:
parent
29a50bccb9
commit
0810739d4c
|
@ -1385,6 +1385,8 @@ def mno_restrict_it: Flag<["-"], "mno-restrict-it">, Group<m_arm_Features_Group>
|
||||||
def marm : Flag<["-"], "marm">, Alias<mno_thumb>;
|
def marm : Flag<["-"], "marm">, Alias<mno_thumb>;
|
||||||
def ffixed_r9 : Flag<["-"], "ffixed-r9">, Group<m_arm_Features_Group>,
|
def ffixed_r9 : Flag<["-"], "ffixed-r9">, Group<m_arm_Features_Group>,
|
||||||
HelpText<"Reserve the r9 register (ARM only)">;
|
HelpText<"Reserve the r9 register (ARM only)">;
|
||||||
|
def mno_movt : Flag<["-"], "mno-movt">, Group<m_arm_Features_Group>,
|
||||||
|
HelpText<"Disallow use of movt/movw pairs (ARM only)">;
|
||||||
def mcrc : Flag<["-"], "mcrc">, Group<m_arm_Features_Group>,
|
def mcrc : Flag<["-"], "mcrc">, Group<m_arm_Features_Group>,
|
||||||
HelpText<"Allow use of CRC instructions (ARM only)">;
|
HelpText<"Allow use of CRC instructions (ARM only)">;
|
||||||
def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>,
|
def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>,
|
||||||
|
|
|
@ -938,8 +938,8 @@ static void getARMTargetFeatures(const ToolChain &TC,
|
||||||
if (Args.hasArg(options::OPT_ffixed_r9))
|
if (Args.hasArg(options::OPT_ffixed_r9))
|
||||||
Features.push_back("+reserve-r9");
|
Features.push_back("+reserve-r9");
|
||||||
|
|
||||||
// The kext and FreeBSD linkers don't know how to deal with movw/movt.
|
// The kext linker doesn't know how to deal with movw/movt.
|
||||||
if (KernelOrKext || Triple.isOSFreeBSD())
|
if (KernelOrKext || Args.hasArg(options::OPT_mno_movt))
|
||||||
Features.push_back("+no-movt");
|
Features.push_back("+no-movt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
// RUN: %clang -target armv7-apple-darwin -mkernel -### %s 2>&1 \
|
// RUN: %clang -target armv7-apple-darwin -mkernel -### %s 2>&1 \
|
||||||
// RUN: | FileCheck %s -check-prefix CHECK-KERNEL
|
// RUN: | FileCheck %s -check-prefix CHECK-KERNEL
|
||||||
|
|
||||||
// RUN: %clang -target armv7-gnueabi-freebsd11 -### %s 2>&1 \
|
// RUN: %clang -target armv7-none-gnueabi -mno-movt -### %s 2>&1 \
|
||||||
// RUN: | FileCheck %s -check-prefix CHECK-FREEBSD
|
// RUN: | FileCheck %s -check-prefix CHECK-NO-MOVT
|
||||||
|
|
||||||
// CHECK-DEFAULT-NOT: "-target-feature" "+no-movt"
|
// CHECK-DEFAULT-NOT: "-target-feature" "+no-movt"
|
||||||
|
|
||||||
// CHECK-KERNEL: "-target-feature" "+no-movt"
|
// CHECK-KERNEL: "-target-feature" "+no-movt"
|
||||||
|
|
||||||
// CHECK-FREEBSD: "-target-feature" "+no-movt"
|
// CHECK-NO-MOVT: "-target-feature" "+no-movt"
|
||||||
|
|
Loading…
Reference in New Issue