mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-28 07:49:01 -04:00

Summary: PowerPC64/PowerPC64le supports the builtin function __builtin_setrnd to set the floating point rounding mode. This function will use the least significant two bits of integer argument to set the floating point rounding mode. double __builtin_setrnd(int mode); The effective values for mode are: 0 - round to nearest 1 - round to zero 2 - round to +infinity 3 - round to -infinity Note that the mode argument will modulo 4, so if the int argument is greater than 3, it will only use the least significant two bits of the mode. Namely, builtin_setrnd(102)) is equal to builtin_setrnd(2). Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D59403 llvm-svn: 357242
30 lines
846 B
C
30 lines
846 B
C
// REQUIRES: powerpc-registered-target
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-unknown -emit-llvm %s -o - | FileCheck %s
|
|
|
|
void test_eh_return_data_regno()
|
|
{
|
|
volatile int res;
|
|
res = __builtin_eh_return_data_regno(0); // CHECK: store volatile i32 3
|
|
res = __builtin_eh_return_data_regno(1); // CHECK: store volatile i32 4
|
|
}
|
|
|
|
// CHECK-LABEL: define i64 @test_builtin_ppc_get_timebase
|
|
long long test_builtin_ppc_get_timebase() {
|
|
// CHECK: call i64 @llvm.readcyclecounter()
|
|
return __builtin_ppc_get_timebase();
|
|
}
|
|
|
|
void test_builtin_ppc_setrnd() {
|
|
volatile double res;
|
|
volatile int x = 100;
|
|
|
|
// CHECK: call double @llvm.ppc.setrnd(i32 2)
|
|
res = __builtin_setrnd(2);
|
|
|
|
// CHECK: call double @llvm.ppc.setrnd(i32 100)
|
|
res = __builtin_setrnd(100);
|
|
|
|
// CHECK: call double @llvm.ppc.setrnd(i32 %2)
|
|
res = __builtin_setrnd(x);
|
|
}
|