aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/sse.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386/sse.md')
-rw-r--r--gcc/config/i386/sse.md32
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 6bf9c99..85a5f80 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -204,6 +204,14 @@
UNSPEC_VPDPBSUDS
UNSPEC_VPDPBUUD
UNSPEC_VPDPBUUDS
+
+ ;; For AVX-VNNI-INT16 support
+ UNSPEC_VPDPWUSD
+ UNSPEC_VPDPWUSDS
+ UNSPEC_VPDPWSUD
+ UNSPEC_VPDPWSUDS
+ UNSPEC_VPDPWUUD
+ UNSPEC_VPDPWUUDS
])
(define_c_enum "unspecv" [
@@ -30209,3 +30217,27 @@
"vcvtneo<bf16_ph>2ps\t{%1, %0|%0, %1}"
[(set_attr "prefix" "vex")
(set_attr "mode" "<sseinsnmode>")])
+
+(define_int_iterator VPDPWPROD
+ [UNSPEC_VPDPWUSD
+ UNSPEC_VPDPWUSDS
+ UNSPEC_VPDPWSUD
+ UNSPEC_VPDPWSUDS
+ UNSPEC_VPDPWUUD
+ UNSPEC_VPDPWUUDS])
+
+(define_int_attr vpdpwprodtype
+ [(UNSPEC_VPDPWUSD "wusd") (UNSPEC_VPDPWUSDS "wusds")
+ (UNSPEC_VPDPWSUD "wsud") (UNSPEC_VPDPWSUDS "wsuds")
+ (UNSPEC_VPDPWUUD "wuud") (UNSPEC_VPDPWUUDS "wuuds")])
+
+(define_insn "vpdp<vpdpwprodtype>_<mode>"
+ [(set (match_operand:VI4_AVX 0 "register_operand" "=x")
+ (unspec:VI4_AVX
+ [(match_operand:VI4_AVX 1 "register_operand" "0")
+ (match_operand:VI4_AVX 2 "register_operand" "x")
+ (match_operand:VI4_AVX 3 "nonimmediate_operand" "xm")]
+ VPDPWPROD))]
+ "TARGET_AVXVNNIINT16"
+ "vpdp<vpdpwprodtype>\t{%3, %2, %0|%0, %2, %3}"
+ [(set_attr "prefix" "vex")])