1; RUN: llc -mtriple=arm-eabi -float-abi=soft -mattr=+vfp2 %s -o - | FileCheck %s 2 3define void @func_02(i32 %rm) { 4 call void @llvm.set.rounding(i32 %rm) 5 ret void 6} 7 8; CHECK-LABEL: func_02: 9; CHECK: vmrs r1, fpscr 10; CHECK: sub r0, r0, #1 11; CHECK: and r0, r0, #3 12; CHECK: bic r1, r1, #12582912 13; CHECK: orr r0, r1, r0, lsl #22 14; CHECK: vmsr fpscr, r0 15; CHECK: mov pc, lr 16 17 18define void @func_03() { 19 call void @llvm.set.rounding(i32 0) 20 ret void 21} 22 23; CHECK-LABEL: func_03 24; CHECK: vmrs r0, fpscr 25; CHECK: orr r0, r0, #12582912 26; CHECK: vmsr fpscr, r0 27; CHECK: mov pc, lr 28 29 30define void @func_04() { 31 call void @llvm.set.rounding(i32 1) 32 ret void 33} 34 35; CHECK-LABEL: func_04 36; CHECK: vmrs r0, fpscr 37; CHECK: bic r0, r0, #12582912 38; CHECK: vmsr fpscr, r0 39; CHECK: mov pc, lr 40 41 42define void @func_05() { 43 call void @llvm.set.rounding(i32 2) 44 ret void 45} 46 47 48; CHECK-LABEL: func_05 49; CHECK: vmrs r0, fpscr 50; CHECK: bic r0, r0, #12582912 51; CHECK: orr r0, r0, #4194304 52; CHECK: vmsr fpscr, r0 53; CHECK: mov pc, lr 54 55 56define void @func_06() { 57 call void @llvm.set.rounding(i32 3) 58 ret void 59} 60 61; CHECK-LABEL: func_06 62; CHECK: vmrs r0, fpscr 63; CHECK: bic r0, r0, #12582912 64; CHECK: orr r0, r0, #8388608 65; CHECK: vmsr fpscr, r0 66; CHECK: mov pc, lr 67 68 69declare void @llvm.set.rounding(i32) 70