diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2012-04-09 13:38:30 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2012-04-09 13:38:30 +0000 |
commit | a29e4627bce472b33b341aa9dd05f0df11113155 (patch) | |
tree | 0f005aded2f300f571a6f50cc47a049ca613a48d /clang | |
parent | a27cf0e6e1d9676edb6ee6f8cc1c6634ded56c74 (diff) | |
download | bcm5719-llvm-a29e4627bce472b33b341aa9dd05f0df11113155.tar.gz bcm5719-llvm-a29e4627bce472b33b341aa9dd05f0df11113155.zip |
Factor out ARM floating ABI determination to new routine
llvm-svn: 154318
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 79 |
1 files changed, 44 insertions, 35 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 14842f36e7b..8093d2f6dfd 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -568,41 +568,11 @@ static void addFPMathArgs(const Driver &D, const Arg *A, const ArgList &Args, D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); } -void Clang::AddARMTargetArgs(const ArgList &Args, - ArgStringList &CmdArgs, - bool KernelOrKext) const { - const Driver &D = getToolChain().getDriver(); - llvm::Triple Triple = getToolChain().getTriple(); - - // Select the ABI to use. - // - // FIXME: Support -meabi. - const char *ABIName = 0; - if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) { - ABIName = A->getValue(Args); - } else { - // Select the default based on the platform. - switch(Triple.getEnvironment()) { - case llvm::Triple::ANDROIDEABI: - case llvm::Triple::GNUEABI: - ABIName = "aapcs-linux"; - break; - case llvm::Triple::EABI: - ABIName = "aapcs"; - break; - default: - ABIName = "apcs-gnu"; - } - } - CmdArgs.push_back("-target-abi"); - CmdArgs.push_back(ABIName); - - // Set the CPU based on -march= and -mcpu=. - CmdArgs.push_back("-target-cpu"); - CmdArgs.push_back(getARMTargetCPU(Args, Triple)); - - // Select the float ABI as determined by -msoft-float, -mhard-float, and - // -mfloat-abi=. +// Select the float ABI as determined by -msoft-float, -mhard-float, and +// -mfloat-abi=. +static StringRef getARMFloatABI(const Driver &D, + const ArgList &Args, + const llvm::Triple &Triple) { StringRef FloatABI; if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, @@ -674,6 +644,45 @@ void Clang::AddARMTargetArgs(const ArgList &Args, } } + return FloatABI; +} + + +void Clang::AddARMTargetArgs(const ArgList &Args, + ArgStringList &CmdArgs, + bool KernelOrKext) const { + const Driver &D = getToolChain().getDriver(); + llvm::Triple Triple = getToolChain().getTriple(); + + // Select the ABI to use. + // + // FIXME: Support -meabi. + const char *ABIName = 0; + if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) { + ABIName = A->getValue(Args); + } else { + // Select the default based on the platform. + switch(Triple.getEnvironment()) { + case llvm::Triple::ANDROIDEABI: + case llvm::Triple::GNUEABI: + ABIName = "aapcs-linux"; + break; + case llvm::Triple::EABI: + ABIName = "aapcs"; + break; + default: + ABIName = "apcs-gnu"; + } + } + CmdArgs.push_back("-target-abi"); + CmdArgs.push_back(ABIName); + + // Set the CPU based on -march= and -mcpu=. + CmdArgs.push_back("-target-cpu"); + CmdArgs.push_back(getARMTargetCPU(Args, Triple)); + + // Determine floating point ABI from the options & target defaults. + StringRef FloatABI = getARMFloatABI(D, Args, Triple); if (FloatABI == "soft") { // Floating point operations and argument passing are soft. // |