aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/s390
diff options
context:
space:
mode:
authorStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>2025-01-20 10:01:09 +0100
committerStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>2025-01-20 10:01:09 +0100
commitf31ddaaaa2d9e683ddd8534663af092984ddb911 (patch)
treef59a963a5b79af4ddb53321666293a833f361023 /gcc/config/s390
parent0f0b91ef70218e2cb4ab795ef04725a68ea04b15 (diff)
downloadgcc-f31ddaaaa2d9e683ddd8534663af092984ddb911.zip
gcc-f31ddaaaa2d9e683ddd8534663af092984ddb911.tar.gz
gcc-f31ddaaaa2d9e683ddd8534663af092984ddb911.tar.bz2
s390: arch15: Vector devide/remainder
gcc/ChangeLog: * config/s390/vector.md (div<mode>3): Add. (udiv<mode>3): Add. (mod<mode>3): Add. (umod<mode>3): Add. gcc/testsuite/ChangeLog: * gcc.target/s390/vxe3/vd-1.c: New test. * gcc.target/s390/vxe3/vd-2.c: New test. * gcc.target/s390/vxe3/vdl-1.c: New test. * gcc.target/s390/vxe3/vdl-2.c: New test. * gcc.target/s390/vxe3/vr-1.c: New test. * gcc.target/s390/vxe3/vr-2.c: New test. * gcc.target/s390/vxe3/vrl-1.c: New test. * gcc.target/s390/vxe3/vrl-2.c: New test.
Diffstat (limited to 'gcc/config/s390')
-rw-r--r--gcc/config/s390/vector.md36
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 2e7419c4..606c682 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -1145,6 +1145,42 @@
"vml<bhfgq><w>\t%v0,%v1,%v2"
[(set_attr "op_type" "VRR")])
+; vdf, vdg, vdq
+(define_insn "div<mode>3"
+ [(set (match_operand:VI_HW_SDT 0 "register_operand" "=v")
+ (div:VI_HW_SDT (match_operand:VI_HW_SDT 1 "register_operand" "v")
+ (match_operand:VI_HW_SDT 2 "register_operand" "v")))]
+ "TARGET_VXE3"
+ "vd<bhfgq>\t%v0,%v1,%v2,0"
+ [(set_attr "op_type" "VRR")])
+
+; vdlf, vdlg, vdlq
+(define_insn "udiv<mode>3"
+ [(set (match_operand:VI_HW_SDT 0 "register_operand" "=v")
+ (udiv:VI_HW_SDT (match_operand:VI_HW_SDT 1 "register_operand" "v")
+ (match_operand:VI_HW_SDT 2 "register_operand" "v")))]
+ "TARGET_VXE3"
+ "vdl<bhfgq>\t%v0,%v1,%v2,0"
+ [(set_attr "op_type" "VRR")])
+
+; vrf, vrg, vrq
+(define_insn "mod<mode>3"
+ [(set (match_operand:VI_HW_SDT 0 "register_operand" "=v")
+ (mod:VI_HW_SDT (match_operand:VI_HW_SDT 1 "register_operand" "v")
+ (match_operand:VI_HW_SDT 2 "register_operand" "v")))]
+ "TARGET_VXE3"
+ "vr<bhfgq>\t%v0,%v1,%v2,0"
+ [(set_attr "op_type" "VRR")])
+
+; vrlf, vrlg, vrlq
+(define_insn "umod<mode>3"
+ [(set (match_operand:VI_HW_SDT 0 "register_operand" "=v")
+ (umod:VI_HW_SDT (match_operand:VI_HW_SDT 1 "register_operand" "v")
+ (match_operand:VI_HW_SDT 2 "register_operand" "v")))]
+ "TARGET_VXE3"
+ "vrl<bhfgq>\t%v0,%v1,%v2,0"
+ [(set_attr "op_type" "VRR")])
+
; vlcb, vlch, vlcf, vlcg
(define_insn "neg<mode>2"
[(set (match_operand:VI 0 "register_operand" "=v")