[PowerPC] Add readflm/setflm intrinsics to Clang

Commit dbcfbffc adds ppc.readflm and ppc.setflm intrinsics to read or
write FPSCR register. This patch adds them to Clang.

Reviewed By: steven.zhang

Differential Revision: https://reviews.llvm.org/D85874
This commit is contained in:
Qiu Chaofan 2020-08-21 15:12:19 +08:00
parent df9a9bb7be
commit 91039784b3
3 changed files with 19 additions and 2 deletions

View file

@ -556,6 +556,12 @@ BUILTIN(__builtin_pack_vector_int128, "V1LLLiULLiULLi", "")
// Set the floating point rounding mode
BUILTIN(__builtin_setrnd, "di", "")
// Get content from current FPSCR
BUILTIN(__builtin_readflm, "d", "")
// Set content of FPSCR, and return its content before update
BUILTIN(__builtin_setflm, "dd", "")
// Cache built-ins
BUILTIN(__builtin_dcbf, "vvC*", "")

View file

@ -27,3 +27,12 @@ void test_builtin_ppc_setrnd() {
// CHECK: call double @llvm.ppc.setrnd(i32 %2)
res = __builtin_setrnd(x);
}
void test_builtin_ppc_flm() {
volatile double res;
// CHECK: call double @llvm.ppc.readflm()
res = __builtin_readflm();
// CHECK: call double @llvm.ppc.setflm(double %1)
res = __builtin_setflm(res);
}

View file

@ -48,9 +48,11 @@ let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.".
def int_ppc_eieio : Intrinsic<[],[],[]>;
// Get content from current FPSCR register
def int_ppc_readflm : Intrinsic<[llvm_double_ty], [], [IntrNoMem]>;
def int_ppc_readflm : GCCBuiltin<"__builtin_readflm">,
Intrinsic<[llvm_double_ty], [], [IntrNoMem]>;
// Set FPSCR register, and return previous content
def int_ppc_setflm : Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
def int_ppc_setflm : GCCBuiltin<"__builtin_setflm">,
Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
// Intrinsics for [double]word extended forms of divide instructions
def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">,