From 7dc6740ba84a9dfbba22ef16252fdc3cc681d1af Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Fri, 20 Feb 2015 23:37:40 +0000 Subject: [PATCH] [Mips] Support mips32r3, mips32r5, mips64r3, mips64r5 MIPS ISA names The patch teaches the clang's driver to understand new MIPS ISA names, pass appropriate options to the assembler, defines corresponding macros etc http://reviews.llvm.org/D7737 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230092 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Options.td | 12 +++++++++++ lib/Basic/Targets.cpp | 12 +++++++++++ lib/Driver/Tools.cpp | 4 ++-- test/Driver/mips-as.c | 20 ++++++++++++++++++ test/Preprocessor/init.c | 36 +++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 2 deletions(-) diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 434d546b20..b703109199 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -1374,6 +1374,12 @@ def mips32 : Flag<["-"], "mips32">, def mips32r2 : Flag<["-"], "mips32r2">, Alias, AliasArgs<["mips32r2"]>, HelpText<"Equivalent to -march=mips32r2">, Flags<[HelpHidden]>; +def mips32r3 : Flag<["-"], "mips32r3">, + Alias, AliasArgs<["mips32r3"]>, + HelpText<"Equivalent to -march=mips32r3">, Flags<[HelpHidden]>; +def mips32r5 : Flag<["-"], "mips32r5">, + Alias, AliasArgs<["mips32r5"]>, + HelpText<"Equivalent to -march=mips32r5">, Flags<[HelpHidden]>; def mips32r6 : Flag<["-"], "mips32r6">, Alias, AliasArgs<["mips32r6"]>, HelpText<"Equivalent to -march=mips32r6">, Flags<[HelpHidden]>; @@ -1383,6 +1389,12 @@ def mips64 : Flag<["-"], "mips64">, def mips64r2 : Flag<["-"], "mips64r2">, Alias, AliasArgs<["mips64r2"]>, HelpText<"Equivalent to -march=mips64r2">, Flags<[HelpHidden]>; +def mips64r3 : Flag<["-"], "mips64r3">, + Alias, AliasArgs<["mips64r3"]>, + HelpText<"Equivalent to -march=mips64r3">, Flags<[HelpHidden]>; +def mips64r5 : Flag<["-"], "mips64r5">, + Alias, AliasArgs<["mips64r5"]>, + HelpText<"Equivalent to -march=mips64r5">, Flags<[HelpHidden]>; def mips64r6 : Flag<["-"], "mips64r6">, Alias, AliasArgs<["mips64r6"]>, HelpText<"Equivalent to -march=mips64r6">, Flags<[HelpHidden]>; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index f9da2bf678..c304b03118 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -5688,9 +5688,13 @@ public: .Case("mips5", true) .Case("mips32", IsMips32) .Case("mips32r2", IsMips32) + .Case("mips32r3", IsMips32) + .Case("mips32r5", IsMips32) .Case("mips32r6", IsMips32) .Case("mips64", true) .Case("mips64r2", true) + .Case("mips64r3", true) + .Case("mips64r5", true) .Case("mips64r6", true) .Case("octeon", true) .Default(false); @@ -5953,6 +5957,10 @@ public: Builder.defineMacro("__mips_isa_rev", "1"); else if (CPUStr == "mips32r2") Builder.defineMacro("__mips_isa_rev", "2"); + else if (CPUStr == "mips32r3") + Builder.defineMacro("__mips_isa_rev", "3"); + else if (CPUStr == "mips32r5") + Builder.defineMacro("__mips_isa_rev", "5"); else if (CPUStr == "mips32r6") Builder.defineMacro("__mips_isa_rev", "6"); @@ -6102,6 +6110,10 @@ public: Builder.defineMacro("__mips_isa_rev", "1"); else if (CPUStr == "mips64r2") Builder.defineMacro("__mips_isa_rev", "2"); + else if (CPUStr == "mips64r3") + Builder.defineMacro("__mips_isa_rev", "3"); + else if (CPUStr == "mips64r5") + Builder.defineMacro("__mips_isa_rev", "5"); else if (CPUStr == "mips64r6") Builder.defineMacro("__mips_isa_rev", "6"); diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index ff58fcbc72..a8cfe8254d 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -5611,8 +5611,8 @@ bool mips::isFPXXDefault(const llvm::Triple &Triple, StringRef CPUName, return llvm::StringSwitch(CPUName) .Cases("mips2", "mips3", "mips4", "mips5", true) - .Cases("mips32", "mips32r2", true) - .Cases("mips64", "mips64r2", true) + .Cases("mips32", "mips32r2", "mips32r3", "mips32r5", true) + .Cases("mips64", "mips64r2", "mips64r3", "mips64r5", true) .Default(false); } diff --git a/test/Driver/mips-as.c b/test/Driver/mips-as.c index 12f1844374..755ae83576 100644 --- a/test/Driver/mips-as.c +++ b/test/Driver/mips-as.c @@ -98,6 +98,16 @@ // RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s // MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" // +// RUN: %clang -target mips-linux-gnu -mips32r3 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R3 %s +// MIPS-ALIAS-32R3: as{{(.exe)?}}" "-march" "mips32r3" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips32r5 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R5 %s +// MIPS-ALIAS-32R5: as{{(.exe)?}}" "-march" "mips32r5" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" +// // RUN: %clang -target mips-linux-gnu -mips32r6 -### \ // RUN: -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R6 %s @@ -113,6 +123,16 @@ // RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s // MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-mno-shared" "-KPIC" "-EB" // +// RUN: %clang -target mips64-linux-gnu -mips64r3 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R3 %s +// MIPS-ALIAS-64R3: as{{(.exe)?}}" "-march" "mips64r3" "-mabi" "64" "-mno-shared" "-KPIC" "-EB" +// +// RUN: %clang -target mips64-linux-gnu -mips64r5 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R5 %s +// MIPS-ALIAS-64R5: as{{(.exe)?}}" "-march" "mips64r5" "-mabi" "64" "-mno-shared" "-KPIC" "-EB" +// // RUN: %clang -target mips64-linux-gnu -mips64r6 -### \ // RUN: -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R6 %s diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index 41fe812ff3..4bde9e4bf1 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -4264,6 +4264,24 @@ // MIPS-ARCH-32R2:#define __mips_isa_rev 2 // // RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips-none-none \ +// RUN: -target-cpu mips32r3 < /dev/null \ +// RUN: | FileCheck -check-prefix MIPS-ARCH-32R3 %s +// +// MIPS-ARCH-32R3:#define _MIPS_ARCH "mips32r3" +// MIPS-ARCH-32R3:#define _MIPS_ARCH_MIPS32R3 1 +// MIPS-ARCH-32R3:#define _MIPS_ISA _MIPS_ISA_MIPS32 +// MIPS-ARCH-32R3:#define __mips_isa_rev 3 +// +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips-none-none \ +// RUN: -target-cpu mips32r5 < /dev/null \ +// RUN: | FileCheck -check-prefix MIPS-ARCH-32R5 %s +// +// MIPS-ARCH-32R5:#define _MIPS_ARCH "mips32r5" +// MIPS-ARCH-32R5:#define _MIPS_ARCH_MIPS32R5 1 +// MIPS-ARCH-32R5:#define _MIPS_ISA _MIPS_ISA_MIPS32 +// MIPS-ARCH-32R5:#define __mips_isa_rev 5 +// +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips-none-none \ // RUN: -target-cpu mips32r6 < /dev/null \ // RUN: | FileCheck -check-prefix MIPS-ARCH-32R6 %s // @@ -4300,6 +4318,24 @@ // MIPS-ARCH-64R2:#define __mips_isa_rev 2 // // RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips64-none-none \ +// RUN: -target-cpu mips64r3 < /dev/null \ +// RUN: | FileCheck -check-prefix MIPS-ARCH-64R3 %s +// +// MIPS-ARCH-64R3:#define _MIPS_ARCH "mips64r3" +// MIPS-ARCH-64R3:#define _MIPS_ARCH_MIPS64R3 1 +// MIPS-ARCH-64R3:#define _MIPS_ISA _MIPS_ISA_MIPS64 +// MIPS-ARCH-64R3:#define __mips_isa_rev 3 +// +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips64-none-none \ +// RUN: -target-cpu mips64r5 < /dev/null \ +// RUN: | FileCheck -check-prefix MIPS-ARCH-64R5 %s +// +// MIPS-ARCH-64R5:#define _MIPS_ARCH "mips64r5" +// MIPS-ARCH-64R5:#define _MIPS_ARCH_MIPS64R5 1 +// MIPS-ARCH-64R5:#define _MIPS_ISA _MIPS_ISA_MIPS64 +// MIPS-ARCH-64R5:#define __mips_isa_rev 5 +// +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips64-none-none \ // RUN: -target-cpu mips64r6 < /dev/null \ // RUN: | FileCheck -check-prefix MIPS-ARCH-64R6 %s // -- 2.40.0