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