Commit 0076c82f by Uros Bizjak

re PR target/68263 (Vector "*mov<mode>_internal" fails to handle misaligned load/store from reload)

	PR target/68263
	* config/i386/i386.h (BIGGEST_ALIGNMENT): Always define
	to 32 for IAMCU.
	* config/i386/sse.md (*mov<mode>_internal): Always enable
	AVX and SSE unaligned moves for IAMCU.

From-SVN: r230456
parent b6eab819
...@@ -814,7 +814,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); ...@@ -814,7 +814,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
TARGET_ABSOLUTE_BIGGEST_ALIGNMENT. */ TARGET_ABSOLUTE_BIGGEST_ALIGNMENT. */
#define BIGGEST_ALIGNMENT \ #define BIGGEST_ALIGNMENT \
(TARGET_AVX512F ? 512 : (TARGET_AVX ? 256 : (TARGET_IAMCU ? 32 : 128))) (TARGET_IAMCU ? 32 : (TARGET_AVX512F ? 512 : (TARGET_AVX ? 256 : 128)))
/* Maximum stack alignment. */ /* Maximum stack alignment. */
#define MAX_STACK_ALIGNMENT MAX_OFILE_ALIGNMENT #define MAX_STACK_ALIGNMENT MAX_OFILE_ALIGNMENT
......
...@@ -892,30 +892,30 @@ ...@@ -892,30 +892,30 @@
case MODE_V16SF: case MODE_V16SF:
case MODE_V8SF: case MODE_V8SF:
case MODE_V4SF: case MODE_V4SF:
if (TARGET_AVX if ((TARGET_AVX || TARGET_IAMCU)
&& (misaligned_operand (operands[0], <MODE>mode) && (misaligned_operand (operands[0], <MODE>mode)
|| misaligned_operand (operands[1], <MODE>mode))) || misaligned_operand (operands[1], <MODE>mode)))
return "vmovups\t{%1, %0|%0, %1}"; return "%vmovups\t{%1, %0|%0, %1}";
else else
return "%vmovaps\t{%1, %0|%0, %1}"; return "%vmovaps\t{%1, %0|%0, %1}";
case MODE_V8DF: case MODE_V8DF:
case MODE_V4DF: case MODE_V4DF:
case MODE_V2DF: case MODE_V2DF:
if (TARGET_AVX if ((TARGET_AVX || TARGET_IAMCU)
&& (misaligned_operand (operands[0], <MODE>mode) && (misaligned_operand (operands[0], <MODE>mode)
|| misaligned_operand (operands[1], <MODE>mode))) || misaligned_operand (operands[1], <MODE>mode)))
return "vmovupd\t{%1, %0|%0, %1}"; return "%vmovupd\t{%1, %0|%0, %1}";
else else
return "%vmovapd\t{%1, %0|%0, %1}"; return "%vmovapd\t{%1, %0|%0, %1}";
case MODE_OI: case MODE_OI:
case MODE_TI: case MODE_TI:
if (TARGET_AVX if ((TARGET_AVX || TARGET_IAMCU)
&& (misaligned_operand (operands[0], <MODE>mode) && (misaligned_operand (operands[0], <MODE>mode)
|| misaligned_operand (operands[1], <MODE>mode))) || misaligned_operand (operands[1], <MODE>mode)))
return TARGET_AVX512VL ? "vmovdqu64\t{%1, %0|%0, %1}" return TARGET_AVX512VL ? "vmovdqu64\t{%1, %0|%0, %1}"
: "vmovdqu\t{%1, %0|%0, %1}"; : "%vmovdqu\t{%1, %0|%0, %1}";
else else
return TARGET_AVX512VL ? "vmovdqa64\t{%1, %0|%0, %1}" return TARGET_AVX512VL ? "vmovdqa64\t{%1, %0|%0, %1}"
: "%vmovdqa\t{%1, %0|%0, %1}"; : "%vmovdqa\t{%1, %0|%0, %1}";
......
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