xref: /llvm-project/llvm/test/CodeGen/AArch64/fpenv.ll (revision 8017ca1d0056907331ff7542ac9ff1ff5ec969a2)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc -mtriple=aarch64-none-linux-gnu %s -o - | FileCheck %s
3
4define void @func_set_rounding_dyn(i32 %rm) {
5; CHECK-LABEL: func_set_rounding_dyn:
6; CHECK:       // %bb.0:
7; CHECK-NEXT:    lsl w9, w0, #22
8; CHECK-NEXT:    mrs x8, FPCR
9; CHECK-NEXT:    and x8, x8, #0xffffffffff3fffff
10; CHECK-NEXT:    sub w9, w9, #1024, lsl #12 // =4194304
11; CHECK-NEXT:    and w9, w9, #0xc00000
12; CHECK-NEXT:    orr x8, x8, x9
13; CHECK-NEXT:    msr FPCR, x8
14; CHECK-NEXT:    ret
15  call void @llvm.set.rounding(i32 %rm)
16  ret void
17}
18
19define void @func_set_rounding_toward_zero() {
20; CHECK-LABEL: func_set_rounding_toward_zero:
21; CHECK:       // %bb.0:
22; CHECK-NEXT:    mrs x8, FPCR
23; CHECK-NEXT:    orr x8, x8, #0xc00000
24; CHECK-NEXT:    msr FPCR, x8
25; CHECK-NEXT:    ret
26  call void @llvm.set.rounding(i32 0)
27  ret void
28}
29
30define void @func_set_rounding_tonearest_even() {
31; CHECK-LABEL: func_set_rounding_tonearest_even:
32; CHECK:       // %bb.0:
33; CHECK-NEXT:    mrs x8, FPCR
34; CHECK-NEXT:    and x8, x8, #0xffffffffff3fffff
35; CHECK-NEXT:    msr FPCR, x8
36; CHECK-NEXT:    ret
37  call void @llvm.set.rounding(i32 1)
38  ret void
39}
40
41define void @func_set_rounding_upward() {
42; CHECK-LABEL: func_set_rounding_upward:
43; CHECK:       // %bb.0:
44; CHECK-NEXT:    mrs x8, FPCR
45; CHECK-NEXT:    and x8, x8, #0xffffffffff3fffff
46; CHECK-NEXT:    orr x8, x8, #0x400000
47; CHECK-NEXT:    msr FPCR, x8
48; CHECK-NEXT:    ret
49  call void @llvm.set.rounding(i32 2)
50  ret void
51}
52
53define void @func_set_rounding_downward() {
54; CHECK-LABEL: func_set_rounding_downward:
55; CHECK:       // %bb.0:
56; CHECK-NEXT:    mrs x8, FPCR
57; CHECK-NEXT:    and x8, x8, #0xffffffffff3fffff
58; CHECK-NEXT:    orr x8, x8, #0x800000
59; CHECK-NEXT:    msr FPCR, x8
60; CHECK-NEXT:    ret
61  call void @llvm.set.rounding(i32 3)
62  ret void
63}
64
65declare void @llvm.set.rounding(i32)
66