249 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm-eabi -float-abi=soft -mattr=+vfp2 --verify-machineinstrs %s -o - | FileCheck %s3 4define void @func_02(i32 %rm) {5; CHECK-LABEL: func_02:6; CHECK: @ %bb.0:7; CHECK-NEXT: vmrs r1, fpscr8; CHECK-NEXT: sub r0, r0, #19; CHECK-NEXT: and r0, r0, #310; CHECK-NEXT: bic r1, r1, #1258291211; CHECK-NEXT: orr r0, r1, r0, lsl #2212; CHECK-NEXT: vmsr fpscr, r013; CHECK-NEXT: mov pc, lr14 call void @llvm.set.rounding(i32 %rm)15 ret void16}17 18define void @func_03() {19; CHECK-LABEL: func_03:20; CHECK: @ %bb.0:21; CHECK-NEXT: vmrs r0, fpscr22; CHECK-NEXT: orr r0, r0, #1258291223; CHECK-NEXT: vmsr fpscr, r024; CHECK-NEXT: mov pc, lr25 call void @llvm.set.rounding(i32 0)26 ret void27}28 29define void @func_04() {30; CHECK-LABEL: func_04:31; CHECK: @ %bb.0:32; CHECK-NEXT: vmrs r0, fpscr33; CHECK-NEXT: bic r0, r0, #1258291234; CHECK-NEXT: vmsr fpscr, r035; CHECK-NEXT: mov pc, lr36 call void @llvm.set.rounding(i32 1)37 ret void38}39 40define void @func_05() {41; CHECK-LABEL: func_05:42; CHECK: @ %bb.0:43; CHECK-NEXT: vmrs r0, fpscr44; CHECK-NEXT: bic r0, r0, #1258291245; CHECK-NEXT: orr r0, r0, #419430446; CHECK-NEXT: vmsr fpscr, r047; CHECK-NEXT: mov pc, lr48 call void @llvm.set.rounding(i32 2)49 ret void50}51 52define void @func_06() {53; CHECK-LABEL: func_06:54; CHECK: @ %bb.0:55; CHECK-NEXT: vmrs r0, fpscr56; CHECK-NEXT: bic r0, r0, #1258291257; CHECK-NEXT: orr r0, r0, #838860858; CHECK-NEXT: vmsr fpscr, r059; CHECK-NEXT: mov pc, lr60 call void @llvm.set.rounding(i32 3)61 ret void62}63 64define i32 @get_fpenv_01() #0 {65; CHECK-LABEL: get_fpenv_01:66; CHECK: @ %bb.0: @ %entry67; CHECK-NEXT: .save {r11, lr}68; CHECK-NEXT: push {r11, lr}69; CHECK-NEXT: .pad #870; CHECK-NEXT: sub sp, sp, #871; CHECK-NEXT: add r0, sp, #472; CHECK-NEXT: bl fegetenv73; CHECK-NEXT: ldr r0, [sp, #4]74; CHECK-NEXT: add sp, sp, #875; CHECK-NEXT: pop {r11, lr}76; CHECK-NEXT: mov pc, lr77entry:78 %fpenv = call i32 @llvm.get.fpenv.i32()79 ret i32 %fpenv80}81 82define i32 @get_fpenv_02() nounwind {83; CHECK-LABEL: get_fpenv_02:84; CHECK: @ %bb.0: @ %entry85; CHECK-NEXT: vmrs r0, fpscr86; CHECK-NEXT: mov pc, lr87entry:88 %fpenv = call i32 @llvm.get.fpenv.i32()89 ret i32 %fpenv90}91 92define void @set_fpenv_01(i32 %fpenv) #0 {93; CHECK-LABEL: set_fpenv_01:94; CHECK: @ %bb.0: @ %entry95; CHECK-NEXT: .save {r11, lr}96; CHECK-NEXT: push {r11, lr}97; CHECK-NEXT: .pad #898; CHECK-NEXT: sub sp, sp, #899; CHECK-NEXT: str r0, [sp, #4]100; CHECK-NEXT: add r0, sp, #4101; CHECK-NEXT: bl fesetenv102; CHECK-NEXT: add sp, sp, #8103; CHECK-NEXT: pop {r11, lr}104; CHECK-NEXT: mov pc, lr105entry:106 call void @llvm.set.fpenv.i32(i32 %fpenv)107 ret void108}109 110define void @set_fpenv_02(i32 %fpenv) nounwind {111; CHECK-LABEL: set_fpenv_02:112; CHECK: @ %bb.0: @ %entry113; CHECK-NEXT: vmsr fpscr, r0114; CHECK-NEXT: mov pc, lr115entry:116 call void @llvm.set.fpenv.i32(i32 %fpenv)117 ret void118}119 120define void @reset_fpenv_01() #0 {121; CHECK-LABEL: reset_fpenv_01:122; CHECK: @ %bb.0: @ %entry123; CHECK-NEXT: .save {r11, lr}124; CHECK-NEXT: push {r11, lr}125; CHECK-NEXT: mvn r0, #0126; CHECK-NEXT: bl fesetenv127; CHECK-NEXT: pop {r11, lr}128; CHECK-NEXT: mov pc, lr129entry:130 call void @llvm.reset.fpenv()131 ret void132}133 134define void @reset_fpenv_02() nounwind {135; CHECK-LABEL: reset_fpenv_02:136; CHECK: @ %bb.0: @ %entry137; CHECK-NEXT: mov r0, #0138; CHECK-NEXT: vmsr fpscr, r0139; CHECK-NEXT: mov pc, lr140entry:141 call void @llvm.reset.fpenv()142 ret void143}144 145define i32 @get_fpmode_01() #0 {146; CHECK-LABEL: get_fpmode_01:147; CHECK: @ %bb.0: @ %entry148; CHECK-NEXT: .save {r11, lr}149; CHECK-NEXT: push {r11, lr}150; CHECK-NEXT: .pad #8151; CHECK-NEXT: sub sp, sp, #8152; CHECK-NEXT: add r0, sp, #4153; CHECK-NEXT: bl fegetmode154; CHECK-NEXT: ldr r0, [sp, #4]155; CHECK-NEXT: add sp, sp, #8156; CHECK-NEXT: pop {r11, lr}157; CHECK-NEXT: mov pc, lr158entry:159 %fpenv = call i32 @llvm.get.fpmode.i32()160 ret i32 %fpenv161}162 163define i32 @get_fpmode_02() nounwind {164; CHECK-LABEL: get_fpmode_02:165; CHECK: @ %bb.0: @ %entry166; CHECK-NEXT: vmrs r0, fpscr167; CHECK-NEXT: mov pc, lr168entry:169 %fpenv = call i32 @llvm.get.fpmode.i32()170 ret i32 %fpenv171}172 173define void @set_fpmode_01(i32 %fpmode) #0 {174; CHECK-LABEL: set_fpmode_01:175; CHECK: @ %bb.0: @ %entry176; CHECK-NEXT: .save {r11, lr}177; CHECK-NEXT: push {r11, lr}178; CHECK-NEXT: .pad #8179; CHECK-NEXT: sub sp, sp, #8180; CHECK-NEXT: str r0, [sp, #4]181; CHECK-NEXT: add r0, sp, #4182; CHECK-NEXT: bl fesetmode183; CHECK-NEXT: add sp, sp, #8184; CHECK-NEXT: pop {r11, lr}185; CHECK-NEXT: mov pc, lr186entry:187 call void @llvm.set.fpmode.i32(i32 %fpmode)188 ret void189}190 191define void @set_fpmode_02(i32 %fpmode) nounwind {192; CHECK-LABEL: set_fpmode_02:193; CHECK: @ %bb.0: @ %entry194; CHECK-NEXT: vmrs r1, fpscr195; CHECK-NEXT: mvn r2, #159196; CHECK-NEXT: sub r2, r2, #-134217728197; CHECK-NEXT: and r0, r0, r2198; CHECK-NEXT: mov r2, #159199; CHECK-NEXT: orr r2, r2, #-134217728200; CHECK-NEXT: and r1, r1, r2201; CHECK-NEXT: orr r0, r1, r0202; CHECK-NEXT: vmsr fpscr, r0203; CHECK-NEXT: mov pc, lr204entry:205 call void @llvm.set.fpmode.i32(i32 %fpmode)206 ret void207}208 209define void @reset_fpmode_01() #0 {210; CHECK-LABEL: reset_fpmode_01:211; CHECK: @ %bb.0: @ %entry212; CHECK-NEXT: .save {r11, lr}213; CHECK-NEXT: push {r11, lr}214; CHECK-NEXT: mvn r0, #0215; CHECK-NEXT: bl fesetmode216; CHECK-NEXT: pop {r11, lr}217; CHECK-NEXT: mov pc, lr218entry:219 call void @llvm.reset.fpmode()220 ret void221}222 223define void @reset_fpmode_02() nounwind {224; CHECK-LABEL: reset_fpmode_02:225; CHECK: @ %bb.0: @ %entry226; CHECK-NEXT: vmrs r0, fpscr227; CHECK-NEXT: ldr r1, .LCPI16_0228; CHECK-NEXT: and r0, r0, r1229; CHECK-NEXT: vmsr fpscr, r0230; CHECK-NEXT: mov pc, lr231; CHECK-NEXT: .p2align 2232; CHECK-NEXT: @ %bb.1:233; CHECK-NEXT: .LCPI16_0:234; CHECK-NEXT: .long 4160774399 @ 0xf80060ff235entry:236 call void @llvm.reset.fpmode()237 ret void238}239 240attributes #0 = { nounwind "use-soft-float"="true" }241 242declare void @llvm.set.rounding(i32)243declare i32 @llvm.get.fpenv.i32()244declare void @llvm.set.fpenv.i32(i32 %fpenv)245declare void @llvm.reset.fpenv()246declare i32 @llvm.get.fpmode.i32()247declare void @llvm.set.fpmode.i32(i32 %fpmode)248declare void @llvm.reset.fpmode()249