Commit 4a77025b by Jakub Jelinek Committed by Jakub Jelinek

re PR target/88522 (Error: operand size mismatch for `vpgatherqq')

	PR target/88522
	* config/i386/sse.md (*avx512pf_gatherpf<mode>sf_mask,
	*avx512pf_gatherpf<mode>df_mask, *avx512pf_scatterpf<mode>sf_mask,
	*avx512pf_scatterpf<mode>df_mask): Use %X5 instead of %5 for
	-masm=intel.
	(gatherq_mode): Remove mode iterator.
	(*avx512f_gathersi<mode>, *avx512f_gathersi<mode>_2): Use X instead
	of <xtg_mode>.
	(*avx512f_gatherdi<mode>): Use X instead of <gatherq_mode>.
	(*avx512f_gatherdi<mode>_2, *avx512f_scattersi<mode>,
	*avx512f_scatterdi<mode>): Use %X5 for -masm=intel.

From-SVN: r267327
parent f9f248c8
2018-12-21 Jakub Jelinek <jakub@redhat.com> 2018-12-21 Jakub Jelinek <jakub@redhat.com>
PR target/88522
* config/i386/sse.md (*avx512pf_gatherpf<mode>sf_mask,
*avx512pf_gatherpf<mode>df_mask, *avx512pf_scatterpf<mode>sf_mask,
*avx512pf_scatterpf<mode>df_mask): Use %X5 instead of %5 for
-masm=intel.
(gatherq_mode): Remove mode iterator.
(*avx512f_gathersi<mode>, *avx512f_gathersi<mode>_2): Use X instead
of <xtg_mode>.
(*avx512f_gatherdi<mode>): Use X instead of <gatherq_mode>.
(*avx512f_gatherdi<mode>_2, *avx512f_scattersi<mode>,
*avx512f_scatterdi<mode>): Use %X5 for -masm=intel.
PR rtl-optimization/88563 PR rtl-optimization/88563
* expr.c (expand_expr_real_2) <case WIDEN_MULT_EXPR>: Swap innermode * expr.c (expand_expr_real_2) <case WIDEN_MULT_EXPR>: Swap innermode
and mode arguments to convert_modes. Likewise swap mode and word_mode and mode arguments to convert_modes. Likewise swap mode and word_mode
...@@ -17269,9 +17269,11 @@ ...@@ -17269,9 +17269,11 @@
switch (INTVAL (operands[4])) switch (INTVAL (operands[4]))
{ {
case 3: case 3:
return "vgatherpf0<ssemodesuffix>ps\t{%5%{%0%}|%5%{%0%}}"; /* %X5 so that we don't emit any *WORD PTR for -masm=intel, as
gas changed what it requires incompatibly. */
return "vgatherpf0<ssemodesuffix>ps\t{%5%{%0%}|%X5%{%0%}}";
case 2: case 2:
return "vgatherpf1<ssemodesuffix>ps\t{%5%{%0%}|%5%{%0%}}"; return "vgatherpf1<ssemodesuffix>ps\t{%5%{%0%}|%X5%{%0%}}";
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -17314,9 +17316,11 @@ ...@@ -17314,9 +17316,11 @@
switch (INTVAL (operands[4])) switch (INTVAL (operands[4]))
{ {
case 3: case 3:
return "vgatherpf0<ssemodesuffix>pd\t{%5%{%0%}|%5%{%0%}}"; /* %X5 so that we don't emit any *WORD PTR for -masm=intel, as
gas changed what it requires incompatibly. */
return "vgatherpf0<ssemodesuffix>pd\t{%5%{%0%}|%X5%{%0%}}";
case 2: case 2:
return "vgatherpf1<ssemodesuffix>pd\t{%5%{%0%}|%5%{%0%}}"; return "vgatherpf1<ssemodesuffix>pd\t{%5%{%0%}|%X5%{%0%}}";
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -17360,10 +17364,12 @@ ...@@ -17360,10 +17364,12 @@
{ {
case 3: case 3:
case 7: case 7:
return "vscatterpf0<ssemodesuffix>ps\t{%5%{%0%}|%5%{%0%}}"; /* %X5 so that we don't emit any *WORD PTR for -masm=intel, as
gas changed what it requires incompatibly. */
return "vscatterpf0<ssemodesuffix>ps\t{%5%{%0%}|%X5%{%0%}}";
case 2: case 2:
case 6: case 6:
return "vscatterpf1<ssemodesuffix>ps\t{%5%{%0%}|%5%{%0%}}"; return "vscatterpf1<ssemodesuffix>ps\t{%5%{%0%}|%X5%{%0%}}";
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -17407,10 +17413,12 @@ ...@@ -17407,10 +17413,12 @@
{ {
case 3: case 3:
case 7: case 7:
return "vscatterpf0<ssemodesuffix>pd\t{%5%{%0%}|%5%{%0%}}"; /* %X5 so that we don't emit any *WORD PTR for -masm=intel, as
gas changed what it requires incompatibly. */
return "vscatterpf0<ssemodesuffix>pd\t{%5%{%0%}|%X5%{%0%}}";
case 2: case 2:
case 6: case 6:
return "vscatterpf1<ssemodesuffix>pd\t{%5%{%0%}|%5%{%0%}}"; return "vscatterpf1<ssemodesuffix>pd\t{%5%{%0%}|%X5%{%0%}}";
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -20290,12 +20298,6 @@ ...@@ -20290,12 +20298,6 @@
(set_attr "prefix" "vex") (set_attr "prefix" "vex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
;; Memory operand override for -masm=intel of the v*gatherq* patterns.
(define_mode_attr gatherq_mode
[(V4SI "q") (V2DI "x") (V4SF "q") (V2DF "x")
(V8SI "x") (V4DI "t") (V8SF "x") (V4DF "t")
(V16SI "t") (V8DI "g") (V16SF "t") (V8DF "g")])
(define_expand "<avx512>_gathersi<mode>" (define_expand "<avx512>_gathersi<mode>"
[(parallel [(set (match_operand:VI48F 0 "register_operand") [(parallel [(set (match_operand:VI48F 0 "register_operand")
(unspec:VI48F (unspec:VI48F
...@@ -20329,7 +20331,9 @@ ...@@ -20329,7 +20331,9 @@
UNSPEC_GATHER)) UNSPEC_GATHER))
(clobber (match_scratch:<avx512fmaskmode> 2 "=&Yk"))] (clobber (match_scratch:<avx512fmaskmode> 2 "=&Yk"))]
"TARGET_AVX512F" "TARGET_AVX512F"
"v<sseintprefix>gatherd<ssemodesuffix>\t{%6, %0%{%2%}|%0%{%2%}, %<xtg_mode>6}" ;; %X6 so that we don't emit any *WORD PTR for -masm=intel, as
;; gas changed what it requires incompatibly.
"v<sseintprefix>gatherd<ssemodesuffix>\t{%6, %0%{%2%}|%0%{%2%}, %X6}"
[(set_attr "type" "ssemov") [(set_attr "type" "ssemov")
(set_attr "prefix" "evex") (set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
...@@ -20348,7 +20352,9 @@ ...@@ -20348,7 +20352,9 @@
UNSPEC_GATHER)) UNSPEC_GATHER))
(clobber (match_scratch:<avx512fmaskmode> 1 "=&Yk"))] (clobber (match_scratch:<avx512fmaskmode> 1 "=&Yk"))]
"TARGET_AVX512F" "TARGET_AVX512F"
"v<sseintprefix>gatherd<ssemodesuffix>\t{%5, %0%{%1%}|%0%{%1%}, %<xtg_mode>5}" ;; %X5 so that we don't emit any *WORD PTR for -masm=intel, as
;; gas changed what it requires incompatibly.
"v<sseintprefix>gatherd<ssemodesuffix>\t{%5, %0%{%1%}|%0%{%1%}, %X5}"
[(set_attr "type" "ssemov") [(set_attr "type" "ssemov")
(set_attr "prefix" "evex") (set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
...@@ -20387,9 +20393,9 @@ ...@@ -20387,9 +20393,9 @@
UNSPEC_GATHER)) UNSPEC_GATHER))
(clobber (match_scratch:QI 2 "=&Yk"))] (clobber (match_scratch:QI 2 "=&Yk"))]
"TARGET_AVX512F" "TARGET_AVX512F"
{ ;; %X6 so that we don't emit any *WORD PTR for -masm=intel, as
return "v<sseintprefix>gatherq<ssemodesuffix>\t{%6, %1%{%2%}|%1%{%2%}, %<gatherq_mode>6}"; ;; gas changed what it requires incompatibly.
} "v<sseintprefix>gatherq<ssemodesuffix>\t{%6, %1%{%2%}|%1%{%2%}, %X6}"
[(set_attr "type" "ssemov") [(set_attr "type" "ssemov")
(set_attr "prefix" "evex") (set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
...@@ -20409,14 +20415,16 @@ ...@@ -20409,14 +20415,16 @@
(clobber (match_scratch:QI 1 "=&Yk"))] (clobber (match_scratch:QI 1 "=&Yk"))]
"TARGET_AVX512F" "TARGET_AVX512F"
{ {
/* %X5 so that we don't emit any *WORD PTR for -masm=intel, as
gas changed what it requires incompatibly. */
if (<MODE>mode != <VEC_GATHER_SRCDI>mode) if (<MODE>mode != <VEC_GATHER_SRCDI>mode)
{ {
if (<MODE_SIZE> != 64) if (<MODE_SIZE> != 64)
return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %x0%{%1%}|%x0%{%1%}, %<gatherq_mode>5}"; return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %x0%{%1%}|%x0%{%1%}, %X5}";
else else
return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %t0%{%1%}|%t0%{%1%}, %t5}"; return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %t0%{%1%}|%t0%{%1%}, %X5}";
} }
return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %0%{%1%}|%0%{%1%}, %<gatherq_mode>5}"; return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %0%{%1%}|%0%{%1%}, %X5}";
} }
[(set_attr "type" "ssemov") [(set_attr "type" "ssemov")
(set_attr "prefix" "evex") (set_attr "prefix" "evex")
...@@ -20453,7 +20461,9 @@ ...@@ -20453,7 +20461,9 @@
UNSPEC_SCATTER)) UNSPEC_SCATTER))
(clobber (match_scratch:<avx512fmaskmode> 1 "=&Yk"))] (clobber (match_scratch:<avx512fmaskmode> 1 "=&Yk"))]
"TARGET_AVX512F" "TARGET_AVX512F"
"v<sseintprefix>scatterd<ssemodesuffix>\t{%3, %5%{%1%}|%5%{%1%}, %3}" ;; %X5 so that we don't emit any *WORD PTR for -masm=intel, as
;; gas changed what it requires incompatibly.
"v<sseintprefix>scatterd<ssemodesuffix>\t{%3, %5%{%1%}|%X5%{%1%}, %3}"
[(set_attr "type" "ssemov") [(set_attr "type" "ssemov")
(set_attr "prefix" "evex") (set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
...@@ -20489,11 +20499,9 @@ ...@@ -20489,11 +20499,9 @@
UNSPEC_SCATTER)) UNSPEC_SCATTER))
(clobber (match_scratch:QI 1 "=&Yk"))] (clobber (match_scratch:QI 1 "=&Yk"))]
"TARGET_AVX512F" "TARGET_AVX512F"
{ ;; %X5 so that we don't emit any *WORD PTR for -masm=intel, as
if (GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) == 8) ;; gas changed what it requires incompatibly.
return "v<sseintprefix>scatterq<ssemodesuffix>\t{%3, %5%{%1%}|%5%{%1%}, %3}"; "v<sseintprefix>scatterq<ssemodesuffix>\t{%3, %5%{%1%}|%X5%{%1%}, %3}"
return "v<sseintprefix>scatterq<ssemodesuffix>\t{%3, %5%{%1%}|%t5%{%1%}, %3}";
}
[(set_attr "type" "ssemov") [(set_attr "type" "ssemov")
(set_attr "prefix" "evex") (set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment