@@ -581,6 +581,74 @@ define <vscale x 2 x double> @fabs_nxv2f64(<vscale x 2 x double> %a) {
581
581
ret <vscale x 2 x double > %res
582
582
}
583
583
584
+ ; FABD
585
+
586
+ define <vscale x 8 x half > @fabd_nxv8f16 (<vscale x 8 x half > %a , <vscale x 8 x half > %b ) {
587
+ ; CHECK-LABEL: fabd_nxv8f16:
588
+ ; CHECK: // %bb.0:
589
+ ; CHECK-NEXT: ptrue p0.h
590
+ ; CHECK-NEXT: fabd z0.h, p0/m, z0.h, z1.h
591
+ ; CHECK-NEXT: ret
592
+ %sub = fsub <vscale x 8 x half > %a , %b
593
+ %res = call <vscale x 8 x half > @llvm.fabs.nxv8f16 (<vscale x 8 x half > %sub )
594
+ ret <vscale x 8 x half > %res
595
+ }
596
+
597
+ define <vscale x 4 x half > @fabd_nxv4f16 (<vscale x 4 x half > %a , <vscale x 4 x half > %b ) {
598
+ ; CHECK-LABEL: fabd_nxv4f16:
599
+ ; CHECK: // %bb.0:
600
+ ; CHECK-NEXT: ptrue p0.s
601
+ ; CHECK-NEXT: fabd z0.h, p0/m, z0.h, z1.h
602
+ ; CHECK-NEXT: ret
603
+ %sub = fsub <vscale x 4 x half > %a , %b
604
+ %res = call <vscale x 4 x half > @llvm.fabs.nxv4f16 (<vscale x 4 x half > %sub )
605
+ ret <vscale x 4 x half > %res
606
+ }
607
+
608
+ define <vscale x 2 x half > @fabd_nxv2f16 (<vscale x 2 x half > %a , <vscale x 2 x half > %b ) {
609
+ ; CHECK-LABEL: fabd_nxv2f16:
610
+ ; CHECK: // %bb.0:
611
+ ; CHECK-NEXT: ptrue p0.d
612
+ ; CHECK-NEXT: fabd z0.h, p0/m, z0.h, z1.h
613
+ ; CHECK-NEXT: ret
614
+ %sub = fsub <vscale x 2 x half > %a , %b
615
+ %res = call <vscale x 2 x half > @llvm.fabs.nxv2f16 (<vscale x 2 x half > %sub )
616
+ ret <vscale x 2 x half > %res
617
+ }
618
+
619
+ define <vscale x 4 x float > @fabd_nxv4f32 (<vscale x 4 x float > %a , <vscale x 4 x float > %b ) {
620
+ ; CHECK-LABEL: fabd_nxv4f32:
621
+ ; CHECK: // %bb.0:
622
+ ; CHECK-NEXT: ptrue p0.s
623
+ ; CHECK-NEXT: fabd z0.s, p0/m, z0.s, z1.s
624
+ ; CHECK-NEXT: ret
625
+ %sub = fsub <vscale x 4 x float > %a , %b
626
+ %res = call <vscale x 4 x float > @llvm.fabs.nxv4f32 (<vscale x 4 x float > %sub )
627
+ ret <vscale x 4 x float > %res
628
+ }
629
+
630
+ define <vscale x 2 x float > @fabd_nxv2f32 (<vscale x 2 x float > %a , <vscale x 2 x float > %b ) {
631
+ ; CHECK-LABEL: fabd_nxv2f32:
632
+ ; CHECK: // %bb.0:
633
+ ; CHECK-NEXT: ptrue p0.d
634
+ ; CHECK-NEXT: fabd z0.s, p0/m, z0.s, z1.s
635
+ ; CHECK-NEXT: ret
636
+ %sub = fsub <vscale x 2 x float > %a , %b
637
+ %res = call <vscale x 2 x float > @llvm.fabs.nxv2f32 (<vscale x 2 x float > %sub )
638
+ ret <vscale x 2 x float > %res
639
+ }
640
+
641
+ define <vscale x 2 x double > @fabd_nxv2f64 (<vscale x 2 x double > %a , <vscale x 2 x double > %b ) {
642
+ ; CHECK-LABEL: fabd_nxv2f64:
643
+ ; CHECK: // %bb.0:
644
+ ; CHECK-NEXT: ptrue p0.d
645
+ ; CHECK-NEXT: fabd z0.d, p0/m, z0.d, z1.d
646
+ ; CHECK-NEXT: ret
647
+ %sub = fsub <vscale x 2 x double > %a , %b
648
+ %res = call <vscale x 2 x double > @llvm.fabs.nxv2f64 (<vscale x 2 x double > %sub )
649
+ ret <vscale x 2 x double > %res
650
+ }
651
+
584
652
; maxnum minnum
585
653
586
654
define <vscale x 16 x half > @maxnum_nxv16f16 (<vscale x 16 x half > %a , <vscale x 16 x half > %b ) {
0 commit comments