From 86ba95601acaf56808a827656dc53c2431728bcb Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Thu, 3 Sep 2015 13:14:44 +0000
Subject: [PATCH] gcc: add ARM codegen fix from PR 65932

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 46774
---
 toolchain/gcc/Config.in                       |  1 -
 .../5.2.0/030-fix-arm-codegen-PR-65932.patch  | 21 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)
 create mode 100644 toolchain/gcc/patches/5.2.0/030-fix-arm-codegen-PR-65932.patch

diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in
index f5de52db6f..8a68056e9a 100644
--- a/toolchain/gcc/Config.in
+++ b/toolchain/gcc/Config.in
@@ -23,7 +23,6 @@ choice
 	config GCC_USE_VERSION_5
 		select GCC_VERSION_5
 		bool "gcc 5.x"
-		depends on BROKEN
 
 endchoice
 
diff --git a/toolchain/gcc/patches/5.2.0/030-fix-arm-codegen-PR-65932.patch b/toolchain/gcc/patches/5.2.0/030-fix-arm-codegen-PR-65932.patch
new file mode 100644
index 0000000000..7f0b43c0e9
--- /dev/null
+++ b/toolchain/gcc/patches/5.2.0/030-fix-arm-codegen-PR-65932.patch
@@ -0,0 +1,21 @@
+Fix from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65932
+
+--- a/gcc/config/arm/arm.h
++++ b/gcc/config/arm/arm.h
+@@ -628,16 +628,10 @@ extern int arm_arch_crc;
+    type, but kept valid in the wider mode.  The signedness of the
+    extension may differ from that of the type.  */
+ 
+-/* It is far faster to zero extend chars than to sign extend them */
+-
+ #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)	\
+   if (GET_MODE_CLASS (MODE) == MODE_INT		\
+       && GET_MODE_SIZE (MODE) < 4)      	\
+     {						\
+-      if (MODE == QImode)			\
+-	UNSIGNEDP = 1;				\
+-      else if (MODE == HImode)			\
+-	UNSIGNEDP = 1;				\
+       (MODE) = SImode;				\
+     }
+ 
-- 
2.30.2