aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2016-10-06 16:56:34 +0200
committerUros Bizjak <uros@gcc.gnu.org>2016-10-06 16:56:34 +0200
commit271319ae2b889663579c2902f768f5e5e95394ab (patch)
tree2c12ef6aad77ba713503a870d1d9cde058cbb2b7 /gcc
parentc6a2617973f6e7d1359a08b941c27c6d5287563b (diff)
downloadgcc-271319ae2b889663579c2902f768f5e5e95394ab.zip
gcc-271319ae2b889663579c2902f768f5e5e95394ab.tar.gz
gcc-271319ae2b889663579c2902f768f5e5e95394ab.tar.bz2
sse.md (andnot<mode>3): Add FALLTHRU comments.
* config/i386/sse.md (andnot<mode>3): Add FALLTHRU comments. Introduce ssesuffix variable. (<mask_codefor><code><mode>3<mask_name>): Ditto. (*<code><mode>3): Ditto. From-SVN: r240834
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/sse.md55
2 files changed, 39 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3799db0..6b8acef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-06 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sse.md (andnot<mode>3): Add FALLTHRU comments.
+ Introduce ssesuffix variable.
+ (<mask_codefor><code><mode>3<mask_name>): Ditto.
+ (*<code><mode>3): Ditto.
+
2016-10-06 Jan Hubicka <hubicka@ucw.cz>
* postreload.c (reload_cse_simplify): Skip also USE when detecting
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 026054d..fde520f 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -11263,46 +11263,52 @@
static char buf[64];
const char *ops;
const char *tmp;
+ const char *ssesuffix;
switch (get_attr_mode (insn))
{
case MODE_XI:
gcc_assert (TARGET_AVX512F);
+ /* FALLTHRU */
case MODE_OI:
gcc_assert (TARGET_AVX2);
+ /* FALLTHRU */
case MODE_TI:
gcc_assert (TARGET_SSE2);
+ tmp = "pandn";
switch (<MODE>mode)
{
case V64QImode:
case V32HImode:
/* There is no vpandnb or vpandnw instruction, nor vpandn for
512-bit vectors. Use vpandnq instead. */
- tmp = "pandnq";
+ ssesuffix = "q";
break;
case V16SImode:
case V8DImode:
- tmp = "pandn<ssemodesuffix>";
+ ssesuffix = "<ssemodesuffix>";
break;
case V8SImode:
case V4DImode:
case V4SImode:
case V2DImode:
- tmp = TARGET_AVX512VL ? "pandn<ssemodesuffix>" : "pandn";
+ ssesuffix = TARGET_AVX512VL ? "<ssemodesuffix>" : "";
break;
default:
- tmp = TARGET_AVX512VL ? "pandnq" : "pandn";
- break;
+ ssesuffix = TARGET_AVX512VL ? "q" : "";
}
break;
case MODE_V16SF:
gcc_assert (TARGET_AVX512F);
+ /* FALLTHRU */
case MODE_V8SF:
gcc_assert (TARGET_AVX);
+ /* FALLTHRU */
case MODE_V4SF:
gcc_assert (TARGET_SSE);
- tmp = "andnps";
+ tmp = "andn";
+ ssesuffix = "ps";
break;
default:
@@ -11312,16 +11318,16 @@
switch (which_alternative)
{
case 0:
- ops = "%s\t{%%2, %%0|%%0, %%2}";
+ ops = "%s%s\t{%%2, %%0|%%0, %%2}";
break;
case 1:
- ops = "v%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
+ ops = "v%s%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
break;
default:
gcc_unreachable ();
}
- snprintf (buf, sizeof (buf), ops, tmp);
+ snprintf (buf, sizeof (buf), ops, tmp, ssesuffix);
return buf;
}
[(set_attr "isa" "noavx,avx")
@@ -11387,6 +11393,7 @@
static char buf[64];
const char *ops;
const char *tmp;
+ const char *ssesuffix;
switch (get_attr_mode (insn))
{
@@ -11398,17 +11405,18 @@
/* FALLTHRU */
case MODE_TI:
gcc_assert (TARGET_SSE2);
+ tmp = "p<logic>";
switch (<MODE>mode)
{
case V16SImode:
case V8DImode:
- tmp = "p<logic><ssemodesuffix>";
+ ssesuffix = "<ssemodesuffix>";
break;
case V8SImode:
case V4DImode:
case V4SImode:
case V2DImode:
- tmp = TARGET_AVX512VL ? "p<logic><ssemodesuffix>" : "p<logic>";
+ ssesuffix = TARGET_AVX512VL ? "<ssemodesuffix>" : "";
break;
default:
gcc_unreachable ();
@@ -11417,9 +11425,11 @@
case MODE_V8SF:
gcc_assert (TARGET_AVX);
+ /* FALLTHRU */
case MODE_V4SF:
gcc_assert (TARGET_SSE);
- tmp = "<logic>ps";
+ tmp = "<logic>";
+ ssesuffix = "ps";
break;
default:
@@ -11430,18 +11440,18 @@
{
case 0:
if (<mask_applied>)
- ops = "v%s\t{%%2, %%0, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%0, %%2}";
+ ops = "v%s%s\t{%%2, %%0, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%0, %%2}";
else
- ops = "%s\t{%%2, %%0|%%0, %%2}";
+ ops = "%s%s\t{%%2, %%0|%%0, %%2}";
break;
case 1:
- ops = "v%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
+ ops = "v%s%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
break;
default:
gcc_unreachable ();
}
- snprintf (buf, sizeof (buf), ops, tmp);
+ snprintf (buf, sizeof (buf), ops, tmp, ssesuffix);
return buf;
}
[(set_attr "isa" "noavx,avx")
@@ -11492,18 +11502,17 @@
/* FALLTHRU */
case MODE_TI:
gcc_assert (TARGET_SSE2);
+ tmp = "p<logic>";
switch (<MODE>mode)
{
case V64QImode:
case V32HImode:
- tmp = "p<logic>";
ssesuffix = "q";
break;
case V32QImode:
case V16HImode:
case V16QImode:
case V8HImode:
- tmp = "p<logic>";
ssesuffix = TARGET_AVX512VL ? "q" : "";
break;
default:
@@ -11513,10 +11522,11 @@
case MODE_V8SF:
gcc_assert (TARGET_AVX);
+ /* FALLTHRU */
case MODE_V4SF:
gcc_assert (TARGET_SSE);
- tmp = "<logic>ps";
- ssesuffix = "";
+ tmp = "<logic>";
+ ssesuffix = "ps";
break;
default:
@@ -11526,17 +11536,16 @@
switch (which_alternative)
{
case 0:
- ops = "%s\t{%%2, %%0|%%0, %%2}";
- snprintf (buf, sizeof (buf), ops, tmp);
+ ops = "%s%s\t{%%2, %%0|%%0, %%2}";
break;
case 1:
ops = "v%s%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
- snprintf (buf, sizeof (buf), ops, tmp, ssesuffix);
break;
default:
gcc_unreachable ();
}
+ snprintf (buf, sizeof (buf), ops, tmp, ssesuffix);
return buf;
}
[(set_attr "isa" "noavx,avx")