Index: lib/Driver/ToolChains/Gnu.cpp =================================================================== --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,35 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); - // FIXME: remove krait check when GNU tools support krait cpu - // for now replace it with -mcpu=cortex-a15 to avoid a lower - // march from being picked in the absence of a cpu flag. - Arg *A; - if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && - StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); - else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + // FIXME: remove krait and kryo checks when GNU tools support them. For now + // use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo + // -mcpu=cortex-a57 to avoid a lower march from being picked in the absence + // of a cpu flag. + Arg *A = Args.getLastArg(options::OPT_mcpu_EQ); + if (A) { + if(StringRef(A->getValue()).equals_lower("krait")) + CmdArgs.push_back("-mcpu=cortex-a15"); + else if(StringRef(A->getValue()).equals_lower("kryo")) + CmdArgs.push_back("-mcpu=cortex-a57"); + else + Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + } Args.AddLastArg(CmdArgs, options::OPT_mfpu_EQ); break; } case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: { Args.AddLastArg(CmdArgs, options::OPT_march_EQ); - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + + // FIXME: remove kryo check when GNU tools support them. For now use + // -mcpu=cortex-a57 to avoid a lower march from being picked in the absence + // of a cpu flag. + Arg *A; + if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && + (StringRef(A->getValue()).equals_lower("kryo"))) + CmdArgs.push_back("-mcpu=cortex-a57"); + else + Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); break; } case llvm::Triple::mips: Index: lib/Headers/float.h =================================================================== --- lib/Headers/float.h +++ lib/Headers/float.h @@ -85,6 +85,9 @@ # undef FLT_DECIMAL_DIG # undef DBL_DECIMAL_DIG # undef LDBL_DECIMAL_DIG +# undef FLT_HAS_SUBNORM +# undef DBL_HAS_SUBNORM +# undef LDBL_HAS_SUBNORM # endif #endif @@ -141,6 +144,9 @@ # define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ # define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ # define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ +# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ #endif #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ Index: test/Driver/as-mcpu.c =================================================================== --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// ================== Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: bin/as{{.*}}-mcpu=cortex-a15 + +// ================== Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: bin/as{{.*}}-mcpu=cortex-a57 Index: test/Headers/float.c =================================================================== --- test/Headers/float.c +++ test/Headers/float.c @@ -61,6 +61,21 @@ #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG)) #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid." #endif + #ifndef FLT_HAS_SUBNORM + #error "Mandatory macro FLT_HAS_SUBNORM is missing." + #elif FLT_HAS_SUBNORM != __FLT_HAS_DENORM__ + #error "Mandatory macro FLT_HAS_SUBNORM is invalid." + #endif + #ifndef LDBL_HAS_SUBNORM + #error "Mandatory macro LDBL_HAS_SUBNORM is missing." + #elif LDBL_HAS_SUBNORM != __LDBL_HAS_DENORM__ + #error "Mandatory macro LDBL_HAS_SUBNORM is invalid." + #endif + #ifndef DBL_HAS_SUBNORM + #error "Mandatory macro DBL_HAS_SUBNORM is missing." + #elif DBL_HAS_SUBNORM != __DBL_HAS_DENORM__ + #error "Mandatory macro DBL_HAS_SUBNORM is invalid." + #endif #else #ifdef FLT_DECIMAL_DIG #error "Macro FLT_DECIMAL_DIG should not be defined." @@ -71,6 +86,15 @@ #ifdef LDBL_DECIMAL_DIG #error "Macro LDBL_DECIMAL_DIG should not be defined." #endif + #ifdef FLT_HAS_SUBNORM + #error "Macro FLT_HAS_SUBNORM should not be defined." + #endif + #ifdef DBL_HAS_SUBNORM + #error "Macro DBL_HAS_SUBNORM should not be defined." + #endif + #ifdef LDBL_HAS_SUBNORM + #error "Macro LDBL_HAS_SUBNORM should not be defined." + #endif #endif