1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=arm-none-eabi -mcpu=cortex-a8 2>&1 | FileCheck %s --check-prefix=ARM --check-prefix=ACORE 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumb-none-eabi -mcpu=cortex-m4 2>&1 | FileCheck %s --check-prefix=ARM --check-prefix=MCORE 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @read_i32_encoded_register() nounwind { 5*9880d681SAndroid Build Coastguard Workerentry: 6*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: read_i32_encoded_register: 7*9880d681SAndroid Build Coastguard Worker; ARM: mrc p1, #2, r0, c3, c4, #5 8*9880d681SAndroid Build Coastguard Worker %reg = call i32 @llvm.read_register.i32(metadata !0) 9*9880d681SAndroid Build Coastguard Worker ret i32 %reg 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine i64 @read_i64_encoded_register() nounwind { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: read_i64_encoded_register: 15*9880d681SAndroid Build Coastguard Worker; ARM: mrrc p1, #2, r0, r1, c3 16*9880d681SAndroid Build Coastguard Worker %reg = call i64 @llvm.read_register.i64(metadata !1) 17*9880d681SAndroid Build Coastguard Worker ret i64 %reg 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @read_apsr() nounwind { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: read_apsr: 23*9880d681SAndroid Build Coastguard Worker; ARM: mrs r0, apsr 24*9880d681SAndroid Build Coastguard Worker %reg = call i32 @llvm.read_register.i32(metadata !2) 25*9880d681SAndroid Build Coastguard Worker ret i32 %reg 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine i32 @read_fpscr() nounwind { 29*9880d681SAndroid Build Coastguard Workerentry: 30*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: read_fpscr: 31*9880d681SAndroid Build Coastguard Worker; ARM: vmrs r0, fpscr 32*9880d681SAndroid Build Coastguard Worker %reg = call i32 @llvm.read_register.i32(metadata !3) 33*9880d681SAndroid Build Coastguard Worker ret i32 %reg 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @write_i32_encoded_register(i32 %x) nounwind { 37*9880d681SAndroid Build Coastguard Workerentry: 38*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: write_i32_encoded_register: 39*9880d681SAndroid Build Coastguard Worker; ARM: mcr p1, #2, r0, c3, c4, #5 40*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !0, i32 %x) 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine void @write_i64_encoded_register(i64 %x) nounwind { 45*9880d681SAndroid Build Coastguard Workerentry: 46*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: write_i64_encoded_register: 47*9880d681SAndroid Build Coastguard Worker; ARM: mcrr p1, #2, r0, r1, c3 48*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i64(metadata !1, i64 %x) 49*9880d681SAndroid Build Coastguard Worker ret void 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine void @write_apsr(i32 %x) nounwind { 53*9880d681SAndroid Build Coastguard Workerentry: 54*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: write_apsr: 55*9880d681SAndroid Build Coastguard Worker; ACORE: msr APSR_nzcvq, r0 56*9880d681SAndroid Build Coastguard Worker; MCORE: msr apsr_nzcvq, r0 57*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !4, i32 %x) 58*9880d681SAndroid Build Coastguard Worker ret void 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine void @write_fpscr(i32 %x) nounwind { 62*9880d681SAndroid Build Coastguard Workerentry: 63*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: write_fpscr: 64*9880d681SAndroid Build Coastguard Worker; ARM: vmsr fpscr, r0 65*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !3, i32 %x) 66*9880d681SAndroid Build Coastguard Worker ret void 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.read_register.i32(metadata) nounwind 70*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.read_register.i64(metadata) nounwind 71*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.write_register.i32(metadata, i32) nounwind 72*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.write_register.i64(metadata, i64) nounwind 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker!0 = !{!"cp1:2:c3:c4:5"} 75*9880d681SAndroid Build Coastguard Worker!1 = !{!"cp1:2:c3"} 76*9880d681SAndroid Build Coastguard Worker!2 = !{!"apsr"} 77*9880d681SAndroid Build Coastguard Worker!3 = !{!"fpscr"} 78*9880d681SAndroid Build Coastguard Worker!4 = !{!"apsr_nzcvq"} 79