mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-23 20:25:50 -04:00
16c4a8836b
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/D59405 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357241 91177308-0d34-0410-b5e6-96231b3b80d8
47 lines
1.3 KiB
LLVM
47 lines
1.3 KiB
LLVM
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu < %s \
|
|
; RUN: -verify-machineinstrs | FileCheck %s
|
|
; RUN: llc -mcpu=pwr7 -mtriple=powerpc64le-unknown-linux-gnu < %s \
|
|
; RUN: -verify-machineinstrs | FileCheck -check-prefix=CHECK-PWR7 %s
|
|
|
|
define double @test_setrndi() {
|
|
entry:
|
|
%0 = tail call double @llvm.ppc.setrnd(i32 2)
|
|
ret double %0
|
|
|
|
; CHECK-LABEL: @test_setrndi
|
|
; CHECK: # %bb.0:
|
|
; CHECK-DAG: mffs 1
|
|
; CHECK-DAG: mtfsb0 31
|
|
; CHECK-DAG: mtfsb1 30
|
|
; CHECK: blr
|
|
}
|
|
|
|
define double @test_setrnd(i32 signext %x) {
|
|
entry:
|
|
%0 = tail call double @llvm.ppc.setrnd(i32 %x)
|
|
ret double %0
|
|
|
|
; CHECK-LABEL: @test_setrnd
|
|
; CHECK: # %bb.0:
|
|
; CHECK-DAG: mffs 1
|
|
; CHECK-DAG: mffprd [[REG1:[0-9]+]], 1
|
|
; CHECK-DAG: rldimi [[REG1]], 3, 0, 62
|
|
; CHECK-DAG: mtvsrd [[REG2:[0-9]+]], [[REG1]]
|
|
; CHECK-DAG: mtfsf 255, [[REG2]]
|
|
; CHECK: blr
|
|
|
|
; CHECK-PWR7-LABEL: @test_setrnd
|
|
; CHECK-PWR7: # %bb.0:
|
|
; CHECK-PWR7-DAG: mffs 1
|
|
; CHECK-PWR7-DAG: stfd 1, -8(1)
|
|
; CHECK-PWR7-DAG: ld [[REG1:[0-9]+]], -8(1)
|
|
; CHECK-PWR7-DAG: rldimi [[REG1]], 3, 0, 62
|
|
; CHECK-PWR7-DAG: std [[REG1]], -16(1)
|
|
; CHECK-PWR7-DAG: lfd [[REG2:[0-9]+]], -16(1)
|
|
; CHECK-PWR7-DAG: mtfsf 255, [[REG2]]
|
|
; CHECK-PWR7: blr
|
|
}
|
|
|
|
declare double @llvm.ppc.setrnd(i32)
|
|
|