@@ -495,3 +495,80 @@ entry:
495495 %0 = tail call bfloat asm "vmov $0, $1" , "=x,x" (bfloat %x )
496496 ret bfloat %0
497497}
498+
499+ define half @half_s (half %x ) nounwind {
500+ ; NO-FP16-SOFTFP-LABEL: half_s:
501+ ; NO-FP16-SOFTFP: @ %bb.0: @ %entry
502+ ; NO-FP16-SOFTFP-NEXT: vmov s2, r0
503+ ; NO-FP16-SOFTFP-NEXT: @APP
504+ ; NO-FP16-SOFTFP-NEXT: vmov.f32 s1, s2
505+ ; NO-FP16-SOFTFP-NEXT: @NO_APP
506+ ; NO-FP16-SOFTFP-NEXT: vmov r0, s1
507+ ; NO-FP16-SOFTFP-NEXT: bx lr
508+ ;
509+ ; NO-FP16-HARD-LABEL: half_s:
510+ ; NO-FP16-HARD: @ %bb.0: @ %entry
511+ ; NO-FP16-HARD-NEXT: vmov.f32 s2, s0
512+ ; NO-FP16-HARD-NEXT: @APP
513+ ; NO-FP16-HARD-NEXT: vmov.f32 s1, s2
514+ ; NO-FP16-HARD-NEXT: @NO_APP
515+ ; NO-FP16-HARD-NEXT: vmov.f32 s0, s1
516+ ; NO-FP16-HARD-NEXT: bx lr
517+ ;
518+ ; FP16-SOFTFP-LABEL: half_s:
519+ ; FP16-SOFTFP: @ %bb.0: @ %entry
520+ ; FP16-SOFTFP-NEXT: vmov.f16 s2, r0
521+ ; FP16-SOFTFP-NEXT: @APP
522+ ; FP16-SOFTFP-NEXT: vmov.f32 s1, s2
523+ ; FP16-SOFTFP-NEXT: @NO_APP
524+ ; FP16-SOFTFP-NEXT: vmov r0, s1
525+ ; FP16-SOFTFP-NEXT: bx lr
526+ ;
527+ ; FP16-HARD-LABEL: half_s:
528+ ; FP16-HARD: @ %bb.0: @ %entry
529+ ; FP16-HARD-NEXT: vmov.f32 s2, s0
530+ ; FP16-HARD-NEXT: @APP
531+ ; FP16-HARD-NEXT: vmov.f32 s1, s2
532+ ; FP16-HARD-NEXT: @NO_APP
533+ ; FP16-HARD-NEXT: vmov.f32 s0, s1
534+ ; FP16-HARD-NEXT: bx lr
535+ ;
536+ ; BF16-SOFTFP-LABEL: half_s:
537+ ; BF16-SOFTFP: @ %bb.0: @ %entry
538+ ; BF16-SOFTFP-NEXT: vmov.f16 s2, r0
539+ ; BF16-SOFTFP-NEXT: @APP
540+ ; BF16-SOFTFP-NEXT: vmov.f32 s1, s2
541+ ; BF16-SOFTFP-NEXT: @NO_APP
542+ ; BF16-SOFTFP-NEXT: vmov r0, s1
543+ ; BF16-SOFTFP-NEXT: bx lr
544+ ;
545+ ; SIMD-BF16-SOFTFP-LABEL: half_s:
546+ ; SIMD-BF16-SOFTFP: @ %bb.0: @ %entry
547+ ; SIMD-BF16-SOFTFP-NEXT: vmov.f16 s2, r0
548+ ; SIMD-BF16-SOFTFP-NEXT: @APP
549+ ; SIMD-BF16-SOFTFP-NEXT: vmov.f32 s1, s2
550+ ; SIMD-BF16-SOFTFP-NEXT: @NO_APP
551+ ; SIMD-BF16-SOFTFP-NEXT: vmov r0, s1
552+ ; SIMD-BF16-SOFTFP-NEXT: bx lr
553+ ;
554+ ; BF16-HARD-LABEL: half_s:
555+ ; BF16-HARD: @ %bb.0: @ %entry
556+ ; BF16-HARD-NEXT: vmov.f32 s2, s0
557+ ; BF16-HARD-NEXT: @APP
558+ ; BF16-HARD-NEXT: vmov.f32 s1, s2
559+ ; BF16-HARD-NEXT: @NO_APP
560+ ; BF16-HARD-NEXT: vmov.f32 s0, s1
561+ ; BF16-HARD-NEXT: bx lr
562+ ;
563+ ; SIMD-BF16-HARD-LABEL: half_s:
564+ ; SIMD-BF16-HARD: @ %bb.0: @ %entry
565+ ; SIMD-BF16-HARD-NEXT: vmov.f32 s2, s0
566+ ; SIMD-BF16-HARD-NEXT: @APP
567+ ; SIMD-BF16-HARD-NEXT: vmov.f32 s1, s2
568+ ; SIMD-BF16-HARD-NEXT: @NO_APP
569+ ; SIMD-BF16-HARD-NEXT: vmov.f32 s0, s1
570+ ; SIMD-BF16-HARD-NEXT: bx lr
571+ entry:
572+ %0 = tail call half asm "vmov $0, $1" , "={s1},{s2}" (half %x )
573+ ret half %0
574+ }
0 commit comments