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; 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 @@ -149,6 +149,9 @@ Builder.defineMacro("__riscv_bitmanip"); } + if (HasP) + Builder.defineMacro("__riscv_p", "90000"); + if (HasV) { Builder.defineMacro("__riscv_v", "1000000"); Builder.defineMacro("__riscv_vector"); @@ -210,6 +213,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) @@ -244,6 +248,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") 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 @@ -109,6 +109,12 @@ // CHECK-DOUBLE-NOT: __riscv_float_abi_soft // CHECK-DOUBLE-NOT: __riscv_float_abi_single +// RUN: %clang -target riscv32-unknown-linux-gnu -menable-experimental-extensions -march=rv32ip0p9 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-P-EXT %s +// RUN: %clang -target riscv64-unknown-linux-gnu -menable-experimental-extensions -march=rv64ip0p9 -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-P-EXT %s +// CHECK-P-EXT: __riscv_p 90000 + // RUN: %clang -target riscv32-unknown-linux-gnu -menable-experimental-extensions \ // RUN: -march=rv32iv1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-V-EXT %s