diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h --- a/clang/lib/Basic/Targets/RISCV.h +++ b/clang/lib/Basic/Targets/RISCV.h @@ -31,6 +31,7 @@ bool HasD = false; bool HasC = false; bool HasB = false; + bool HasP = false; bool HasV = false; bool HasZba = false; bool HasZbb = false; @@ -43,6 +44,9 @@ bool HasZbr = false; bool HasZbs = false; bool HasZbt = false; + bool HasZpn = false; + bool HasZpsfoperand = false; + bool HasZprvsfextra = false; bool HasZfh = false; bool HasZvamo = false; bool HasZvlsseg = false; diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp --- a/clang/lib/Basic/Targets/RISCV.cpp +++ b/clang/lib/Basic/Targets/RISCV.cpp @@ -181,6 +181,9 @@ Builder.defineMacro("__riscv_bitmanip"); } + if (HasP) + Builder.defineMacro("__riscv_p", "93000"); + if (HasV) { Builder.defineMacro("__riscv_v", "10000"); Builder.defineMacro("__riscv_vector"); @@ -219,6 +222,15 @@ if (HasZbt) Builder.defineMacro("__riscv_zbt", "93000"); + if (HasZpn) + Builder.defineMacro("__riscv_zpn", "93000"); + + if (HasZpsfoperand) + Builder.defineMacro("__riscv_zpsfoperand", "93000"); + + if (HasZprvsfextra) + Builder.defineMacro("__riscv_zprvsfextra", "93000"); + if (HasZfh) Builder.defineMacro("__riscv_zfh", "1000"); @@ -266,6 +278,7 @@ .Case("d", HasD) .Case("c", HasC) .Case("experimental-b", HasB) + .Case("experimental-p", HasP) .Case("experimental-v", HasV) .Case("experimental-zba", HasZba) .Case("experimental-zbb", HasZbb) @@ -278,6 +291,9 @@ .Case("experimental-zbr", HasZbr) .Case("experimental-zbs", HasZbs) .Case("experimental-zbt", HasZbt) + .Case("experimental-zpn", HasZpn) + .Case("experimental-zpsfoperand", HasZpsfoperand) + .Case("experimental-zprvsfextra", HasZprvsfextra) .Case("experimental-zfh", HasZfh) .Case("experimental-zvamo", HasZvamo) .Case("experimental-zvlsseg", HasZvlsseg) @@ -300,6 +316,8 @@ HasC = true; else if (Feature == "+experimental-b") HasB = true; + else if (Feature == "+experimental-p") + HasP = true; else if (Feature == "+experimental-v") HasV = true; else if (Feature == "+experimental-zba") @@ -324,6 +342,12 @@ HasZbs = true; else if (Feature == "+experimental-zbt") HasZbt = true; + else if (Feature == "+experimental-zpn") + HasZpn = true; + else if (Feature == "+experimental-zpsfoperand") + HasZpsfoperand = true; + else if (Feature == "+experimental-zprvsfextra") + HasZprvsfextra = true; else if (Feature == "+experimental-zfh") HasZfh = true; else if (Feature == "+experimental-zvamo") diff --git a/clang/test/Preprocessor/riscv-target-features.c b/clang/test/Preprocessor/riscv-target-features.c --- a/clang/test/Preprocessor/riscv-target-features.c +++ b/clang/test/Preprocessor/riscv-target-features.c @@ -218,6 +218,46 @@ // CHECK-ZBT-NOT: __riscv_b // CHECK-ZBT-EXT: __riscv_zbt 93000 +// RUN: %clang -target riscv32-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv32ip0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-32P-EXT %s +// CHECK-32P-EXT: __riscv_p 93000 +// CHECK-32P-EXT: __riscv_zpn 93000 +// CHECK-32P-EXT: __riscv_zpsfoperand 93000 +// CHECK-32P-NOT: __riscv_zprvsfextra + +// RUN: %clang -target riscv64-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv64ip0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-64P-EXT %s +// CHECK-64P-EXT: __riscv_p 93000 +// CHECK-64P-EXT: __riscv_zpn 93000 +// CHECK-64P-EXT: __riscv_zprvsfextra 93000 +// CHECK-64P-EXT: __riscv_zpsfoperand 93000 + +// RUN: %clang -target riscv32-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv32izpn0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZPN-EXT %s +// RUN: %clang -target riscv64-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv64izpn0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZPN-EXT %s +// CHECK-ZPN-NOT: __riscv_p +// CHECK-ZPN-EXT: __riscv_zpn 93000 + +// RUN: %clang -target riscv32-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv32izpsfoperand0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZPSFOPERAND-EXT %s +// RUN: %clang -target riscv64-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv64izpsfoperand0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZPSFOPERAND-EXT %s +// CHECK-ZPSFOPERAND-NOT: __riscv_p +// CHECK-ZPSFOPERAND-EXT: __riscv_zpsfoperand 93000 + +// RUN: %clang -target riscv64-unknown-linux-gnu -menable-experimental-extensions \ +// RUN: -march=rv64izprvsfextra0p93 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZPRVSFEXTRA-EXT %s +// CHECK-ZPRVSFEXTRA-NOT: __riscv_p +// CHECK-ZPRVSFEXTRA-EXT: __riscv_zprvsfextra 93000 + // RUN: %clang -target riscv32-unknown-linux-gnu -menable-experimental-extensions \ // RUN: -march=rv32iv0p10 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-V-EXT %s