[PATCH] AArch64: Add command line option to select big or little endian

Reid Kleckner rnk at google.com
Wed Apr 2 13:02:33 PDT 2014


Looks like -mbig-endian and -mlittle-endian are GCC options.  We should
implement them for compatibility.
http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html

I don't think we should add -EL or -EB.  They don't fit in with the set of
flags clang currently accepts.


On Fri, Mar 28, 2014 at 1:14 PM, Christian Pirker <cpirker at a-bix.com> wrote:

> Hi All,
>
> I added -EL to select little endian and -EB to select big endian AArch64.
> I also added -mlittle-endian as alias for -EL and -mbig-endian as alias
> for -EB.
>
> Little endian:
>   --target=aarch64
>   --target=aarch64 -EL
>   --target=aarch64 -mlittle-endian
>   --target=aarch64_be -EL
>   --target=aarch64_be -mlittle-endian
> Big endian:
>   --target=aarch64_be
>   --target=aarch64 -EB
>   --target=aarch64 -mbig-endian
>   --target=aarch64_be -EB
>   --target=aarch64_be -mbig-endian
>
> Please review.
>
> Thanks,
> Christian
>
>
> http://llvm-reviews.chandlerc.com/D3215
>
> Files:
>   include/clang/Driver/Options.td
>   lib/Driver/Driver.cpp
>   test/Driver/aarch64-cpus.c
>
> Index: include/clang/Driver/Options.td
> ===================================================================
> --- include/clang/Driver/Options.td
> +++ include/clang/Driver/Options.td
> @@ -987,6 +987,7 @@
>  def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[DriverOption,
> CoreOption]>;
>  def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>;
>  def march_EQ : Joined<["-"], "march=">, Group<m_Group>;
> +def mbig_endian : Flag<["-"], "mbig-endian">, Alias<EB>;
>  def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>;
>  def mconstant_cfstrings : Flag<["-"], "mconstant-cfstrings">,
> Group<clang_ignored_m_Group>;
>  def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>;
> @@ -1007,6 +1008,7 @@
>  def mkernel : Flag<["-"], "mkernel">, Group<m_Group>;
>  def mlinker_version_EQ : Joined<["-"], "mlinker-version=">,
>    Flags<[DriverOption]>;
> +def mlittle_endian : Flag<["-"], "mlittle-endian">, Alias<EL>;
>  def mllvm : Separate<["-"], "mllvm">, Flags<[CC1Option]>,
>    HelpText<"Additional arguments to forward to LLVM's option processing">;
>  def mmacosx_version_min_EQ : Joined<["-"], "mmacosx-version-min=">,
> Group<m_Group>;
> Index: lib/Driver/Driver.cpp
> ===================================================================
> --- lib/Driver/Driver.cpp
> +++ lib/Driver/Driver.cpp
> @@ -1870,11 +1870,15 @@
>          Target.setArch(llvm::Triple::mipsel);
>        else if (Target.getArch() == llvm::Triple::mips64)
>          Target.setArch(llvm::Triple::mips64el);
> +      else if (Target.getArch() == llvm::Triple::aarch64_be)
> +        Target.setArch(llvm::Triple::aarch64);
>      } else {
>        if (Target.getArch() == llvm::Triple::mipsel)
>          Target.setArch(llvm::Triple::mips);
>        else if (Target.getArch() == llvm::Triple::mips64el)
>          Target.setArch(llvm::Triple::mips64);
> +      else if (Target.getArch() == llvm::Triple::aarch64)
> +        Target.setArch(llvm::Triple::aarch64_be);
>      }
>    }
>
> Index: test/Driver/aarch64-cpus.c
> ===================================================================
> --- test/Driver/aarch64-cpus.c
> +++ test/Driver/aarch64-cpus.c
> @@ -1,20 +1,44 @@
>  // Check target CPUs are correctly passed.
>
>  // RUN: %clang -target aarch64 -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC %s
> +// RUN: %clang -target aarch64 -mlittle-endian -### -c %s 2>&1 |
> FileCheck -check-prefix=GENERIC %s
> +// RUN: %clang -target aarch64_be -mlittle-endian -### -c %s 2>&1 |
> FileCheck -check-prefix=GENERIC %s
> +// RUN: %clang -target aarch64 -EL -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC %s
> +// RUN: %clang -target aarch64_be -EL -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC %s
>  // GENERIC: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic"
>
>  // RUN: %clang -target aarch64 -mcpu=cortex-a53 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA53 %s
> +// RUN: %clang -target aarch64 -mlittle-endian -mcpu=cortex-a53 -### -c
> %s 2>&1 | FileCheck -check-prefix=CA53 %s
> +// RUN: %clang -target aarch64_be -mlittle-endian -mcpu=cortex-a53 -###
> -c %s 2>&1 | FileCheck -check-prefix=CA53 %s
> +// RUN: %clang -target aarch64 -EL -mcpu=cortex-a53 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA53 %s
> +// RUN: %clang -target aarch64_be -EL -mcpu=cortex-a53 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA53 %s
>  // CA53: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a53"
>
>  // RUN: %clang -target aarch64 -mcpu=cortex-a57 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA57 %s
> +// RUN: %clang -target aarch64 -mlittle-endian -mcpu=cortex-a57 -### -c
> %s 2>&1 | FileCheck -check-prefix=CA57 %s
> +// RUN: %clang -target aarch64_be -mlittle-endian -mcpu=cortex-a57 -###
> -c %s 2>&1 | FileCheck -check-prefix=CA57 %s
> +// RUN: %clang -target aarch64 -EL -mcpu=cortex-a57 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA57 %s
> +// RUN: %clang -target aarch64_be -EL -mcpu=cortex-a57 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA57 %s
>  // CA57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a57"
>
>  // RUN: %clang -target aarch64_be -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC-BE %s
> +// RUN: %clang -target aarch64 -mbig-endian -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC-BE %s
> +// RUN: %clang -target aarch64_be -mbig-endian -### -c %s 2>&1 |
> FileCheck -check-prefix=GENERIC-BE %s
> +// RUN: %clang -target aarch64 -EB -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC-BE %s
> +// RUN: %clang -target aarch64_be -EB -### -c %s 2>&1 | FileCheck
> -check-prefix=GENERIC-BE %s
>  // GENERIC-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu"
> "generic"
>
>  // RUN: %clang -target aarch64_be -mcpu=cortex-a53 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA53-BE %s
> +// RUN: %clang -target aarch64 -mbig-endian -mcpu=cortex-a53 -### -c %s
> 2>&1 | FileCheck -check-prefix=CA53-BE %s
> +// RUN: %clang -target aarch64_be -mbig-endian -mcpu=cortex-a53 -### -c
> %s 2>&1 | FileCheck -check-prefix=CA53-BE %s
> +// RUN: %clang -target aarch64 -EB -mcpu=cortex-a53 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA53-BE %s
> +// RUN: %clang -target aarch64_be -EB -mcpu=cortex-a53 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA53-BE %s
>  // CA53-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu"
> "cortex-a53"
>
>  // RUN: %clang -target aarch64_be -mcpu=cortex-a57 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA57-BE %s
> +// RUN: %clang -target aarch64 -mbig-endian -mcpu=cortex-a57 -### -c %s
> 2>&1 | FileCheck -check-prefix=CA57-BE %s
> +// RUN: %clang -target aarch64_be -mbig-endian -mcpu=cortex-a57 -### -c
> %s 2>&1 | FileCheck -check-prefix=CA57-BE %s
> +// RUN: %clang -target aarch64 -EB -mcpu=cortex-a57 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA57-BE %s
> +// RUN: %clang -target aarch64_be -EB -mcpu=cortex-a57 -### -c %s 2>&1 |
> FileCheck -check-prefix=CA57-BE %s
>  // CA57-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu"
> "cortex-a57"
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140402/7ff72458/attachment.html>


More information about the cfe-commits mailing list