1462d5830SSerge Pavlov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2462d5830SSerge Pavlov; RUN: llc -mtriple=aarch64-none-linux-gnu %s -o - | FileCheck --check-prefix=DAG %s 3462d5830SSerge Pavlov; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel %s -o - | FileCheck --check-prefix=GIS %s 4462d5830SSerge Pavlov 5462d5830SSerge Pavlovdeclare i32 @llvm.get.fpmode.i32() 6462d5830SSerge Pavlovdeclare void @llvm.set.fpmode.i32(i32 %fpmode) 7462d5830SSerge Pavlovdeclare void @llvm.reset.fpmode() 8462d5830SSerge Pavlov 9*9e30c96aSSerge Pavlovdefine i32 @func_get_fpmode() #0 { 10*9e30c96aSSerge Pavlov; DAG-LABEL: func_get_fpmode: 11462d5830SSerge Pavlov; DAG: // %bb.0: // %entry 12*9e30c96aSSerge Pavlov; DAG-NEXT: mrs x0, FPCR 13*9e30c96aSSerge Pavlov; DAG-NEXT: // kill: def $w0 killed $w0 killed $x0 14462d5830SSerge Pavlov; DAG-NEXT: ret 15462d5830SSerge Pavlov; 16*9e30c96aSSerge Pavlov; GIS-LABEL: func_get_fpmode: 17462d5830SSerge Pavlov; GIS: // %bb.0: // %entry 18462d5830SSerge Pavlov; GIS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 19462d5830SSerge Pavlov; GIS-NEXT: add x0, sp, #12 20462d5830SSerge Pavlov; GIS-NEXT: bl fegetmode 21462d5830SSerge Pavlov; GIS-NEXT: ldr w0, [sp, #12] 22462d5830SSerge Pavlov; GIS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 23462d5830SSerge Pavlov; GIS-NEXT: ret 24462d5830SSerge Pavloventry: 25462d5830SSerge Pavlov %fpmode = call i32 @llvm.get.fpmode.i32() 26462d5830SSerge Pavlov ret i32 %fpmode 27462d5830SSerge Pavlov} 28462d5830SSerge Pavlov 29*9e30c96aSSerge Pavlovdefine void @func_set_fpmode(i32 %fpmode) #0 { 30*9e30c96aSSerge Pavlov; DAG-LABEL: func_set_fpmode: 31462d5830SSerge Pavlov; DAG: // %bb.0: // %entry 32*9e30c96aSSerge Pavlov; DAG-NEXT: mov w8, w0 33*9e30c96aSSerge Pavlov; DAG-NEXT: msr FPCR, x8 34462d5830SSerge Pavlov; DAG-NEXT: ret 35462d5830SSerge Pavlov; 36*9e30c96aSSerge Pavlov; GIS-LABEL: func_set_fpmode: 37462d5830SSerge Pavlov; GIS: // %bb.0: // %entry 38462d5830SSerge Pavlov; GIS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 39462d5830SSerge Pavlov; GIS-NEXT: str w0, [sp, #12] 40462d5830SSerge Pavlov; GIS-NEXT: add x0, sp, #12 41462d5830SSerge Pavlov; GIS-NEXT: bl fesetmode 42462d5830SSerge Pavlov; GIS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 43462d5830SSerge Pavlov; GIS-NEXT: ret 44462d5830SSerge Pavloventry: 45462d5830SSerge Pavlov call void @llvm.set.fpmode.i32(i32 %fpmode) 46462d5830SSerge Pavlov ret void 47462d5830SSerge Pavlov} 48462d5830SSerge Pavlov 49*9e30c96aSSerge Pavlovdefine void @func_reset_fpmode() #0 { 50*9e30c96aSSerge Pavlov; DAG-LABEL: func_reset_fpmode: 51462d5830SSerge Pavlov; DAG: // %bb.0: // %entry 52*9e30c96aSSerge Pavlov; DAG-NEXT: mov x9, #-48904 // =0xffffffffffff40f8 53*9e30c96aSSerge Pavlov; DAG-NEXT: mrs x8, FPCR 54*9e30c96aSSerge Pavlov; DAG-NEXT: movk x9, #63488, lsl #16 55*9e30c96aSSerge Pavlov; DAG-NEXT: and x8, x8, x9 56*9e30c96aSSerge Pavlov; DAG-NEXT: msr FPCR, x8 57462d5830SSerge Pavlov; DAG-NEXT: ret 58462d5830SSerge Pavlov; 59*9e30c96aSSerge Pavlov; GIS-LABEL: func_reset_fpmode: 60462d5830SSerge Pavlov; GIS: // %bb.0: // %entry 61462d5830SSerge Pavlov; GIS-NEXT: mov x0, #-1 // =0xffffffffffffffff 62d659bd16SDavid Green; GIS-NEXT: b fesetmode 63462d5830SSerge Pavloventry: 64462d5830SSerge Pavlov call void @llvm.reset.fpmode() 65462d5830SSerge Pavlov ret void 66462d5830SSerge Pavlov} 67462d5830SSerge Pavlov 68*9e30c96aSSerge Pavlovattributes #0 = { nounwind } 69