Commit 8e92560a by Kyrylo Tkachov Committed by Kyrylo Tkachov

[ARM] Do not expand movmisalign pattern if not in 32-bit mode

	* config/arm/arm.c (arm_option_override): Require TARGET_32BIT
	for unaligned_access.
	* config/arm/arm.md (unaligned_loadsi): Remove redundant TARGET_32BIT
	from matching condition.
	(unaligned_loadhis): Likewise.
	(unaligned_loadhiu): Likewise.
	(unaligned_storesi): Likewise.
	(unaligned_storehi): Likewise.

	* gcc.target/arm/armv6-unaligned-load-ice.c: New test.

From-SVN: r230664
parent 88fdc9a6
2015-11-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/arm/arm.c (arm_option_override): Require TARGET_32BIT
for unaligned_access.
* config/arm/arm.md (unaligned_loadsi): Remove redundant TARGET_32BIT
from matching condition.
(unaligned_loadhis): Likewise.
(unaligned_loadhiu): Likewise.
(unaligned_storesi): Likewise.
(unaligned_storehi): Likewise.
2015-11-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/68149
* config/arm/arm.md (unaligned_loaddi): Delete.
(unaligned_storedi): Likewise.
......@@ -3282,7 +3282,8 @@ arm_option_override (void)
}
/* Enable -munaligned-access by default for
- all ARMv6 architecture-based processors
- all ARMv6 architecture-based processors when compiling for a 32-bit ISA
i.e. Thumb2 and ARM state only.
- ARMv7-A, ARMv7-R, and ARMv7-M architecture-based processors.
- ARMv8 architecture-base processors.
......@@ -3292,7 +3293,7 @@ arm_option_override (void)
if (unaligned_access == 2)
{
if (arm_arch6 && (arm_arch_notm || arm_arch7))
if (TARGET_32BIT && arm_arch6 && (arm_arch_notm || arm_arch7))
unaligned_access = 1;
else
unaligned_access = 0;
......
......@@ -4219,7 +4219,7 @@
[(set (match_operand:SI 0 "s_register_operand" "=l,r")
(unspec:SI [(match_operand:SI 1 "memory_operand" "Uw,m")]
UNSPEC_UNALIGNED_LOAD))]
"unaligned_access && TARGET_32BIT"
"unaligned_access"
"ldr%?\t%0, %1\t@ unaligned"
[(set_attr "arch" "t2,any")
(set_attr "length" "2,4")
......@@ -4232,7 +4232,7 @@
(sign_extend:SI
(unspec:HI [(match_operand:HI 1 "memory_operand" "Uw,Uh")]
UNSPEC_UNALIGNED_LOAD)))]
"unaligned_access && TARGET_32BIT"
"unaligned_access"
"ldrsh%?\t%0, %1\t@ unaligned"
[(set_attr "arch" "t2,any")
(set_attr "length" "2,4")
......@@ -4245,7 +4245,7 @@
(zero_extend:SI
(unspec:HI [(match_operand:HI 1 "memory_operand" "Uw,m")]
UNSPEC_UNALIGNED_LOAD)))]
"unaligned_access && TARGET_32BIT"
"unaligned_access"
"ldrh%?\t%0, %1\t@ unaligned"
[(set_attr "arch" "t2,any")
(set_attr "length" "2,4")
......@@ -4257,7 +4257,7 @@
[(set (match_operand:SI 0 "memory_operand" "=Uw,m")
(unspec:SI [(match_operand:SI 1 "s_register_operand" "l,r")]
UNSPEC_UNALIGNED_STORE))]
"unaligned_access && TARGET_32BIT"
"unaligned_access"
"str%?\t%1, %0\t@ unaligned"
[(set_attr "arch" "t2,any")
(set_attr "length" "2,4")
......@@ -4269,7 +4269,7 @@
[(set (match_operand:HI 0 "memory_operand" "=Uw,m")
(unspec:HI [(match_operand:HI 1 "s_register_operand" "l,r")]
UNSPEC_UNALIGNED_STORE))]
"unaligned_access && TARGET_32BIT"
"unaligned_access"
"strh%?\t%1, %0\t@ unaligned"
[(set_attr "arch" "t2,any")
(set_attr "length" "2,4")
......
2015-11-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/arm/armv6-unaligned-load-ice.c: New test.
2015-11-20 Paul Thomas <pault@gcc.gnu.org>
PR fortran/68237
......
/* { dg-do compile } */
/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6k" } } */
/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
/* { dg-options "-mthumb -Os -mfloat-abi=softfp" } */
/* { dg-add-options arm_arch_v6k } */
long
get_number (char *s, long size, int unsigned_p)
{
long x;
unsigned char *p = (unsigned char *) s;
switch (size)
{
case 4:
x = ((long) p[3] << 24) | ((long) p[2] << 16) | (p[1] << 8) | p[0];
return x;
}
}
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