[oe-commits] org.oe.dev gcc 4.2.1: add missing uclibc locale patch and a patch to reduce binary size with -Os

koen commit openembedded-commits at lists.openembedded.org
Wed Jul 25 17:14:43 UTC 2007


gcc 4.2.1: add missing uclibc locale patch and a patch to reduce binary size with -Os

Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 345da0bebae87fcb024afb4862c1e28ca15fa372
ViewMTN: http://monotone.openembedded.org/revision.psp?id=345da0bebae87fcb024afb4862c1e28ca15fa372
Files:
1
packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch
packages/gcc/gcc-4.2.1/200-uclibc-locale.patch
packages/gcc/gcc_4.2.1.bb
Diffs:

#
# mt diff -rf10a344ab11f6cb949663521534e53f57d1aadf7 -r345da0bebae87fcb024afb4862c1e28ca15fa372
#
# 
# 
# add_file "packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch"
#  content [458b974137747252d061fa68a4f9f8ab42b287b3]
# 
# patch "packages/gcc/gcc-4.2.1/200-uclibc-locale.patch"
#  from [8e6037b6e0618f8cc3e60113d45ab7ea2e8eccd6]
#    to [28c039b24a03a717740c6985e40b5ea01e869378]
# 
# patch "packages/gcc/gcc_4.2.1.bb"
#  from [2b150f642b32b1df6fc4941f7ff18dd8e8794a23]
#    to [bafb5bf9dabe0cd6e870dcebb72d25a26d2ff890]
# 
============================================================
--- packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch	458b974137747252d061fa68a4f9f8ab42b287b3
+++ packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch	458b974137747252d061fa68a4f9f8ab42b287b3
@@ -0,0 +1,153 @@
+Hi,
+
+The attached patch makes sure that we create smaller object code for
+simple switch statements. We just make sure to flatten the switch
+statement into an if-else chain, basically.
+
+This fixes a size-regression as compared to gcc-3.4, as can be seen
+below.
+
+2007-04-15  Bernhard Fischer  <..>
+
+	* stmt.c (expand_case): Do not create a complex binary tree when
+	optimizing for size but rather use the simple ordered list.
+	(emit_case_nodes): do not emit jumps to the default_label when
+	optimizing for size.
+
+Not regtested so far.
+Comments?
+
+Attached is the test switch.c mentioned below.
+
+$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
+gcc-$i  -DCHAIN -Os -o switch-CHAIN-$i.o -c switch.c ;done
+$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
+gcc-$i  -UCHAIN -Os -o switch-$i.o -c switch.c ;done
+
+$ size switch-*.o
+   text	   data	    bss	    dec	    hex	filename
+    169	      0	      0	    169	     a9	switch-2.95.o
+    115	      0	      0	    115	     73	switch-3.3.o
+    103	      0	      0	    103	     67	switch-3.4.o
+    124	      0	      0	    124	     7c	switch-4.0.o
+    124	      0	      0	    124	     7c	switch-4.1.o
+    124	      0	      0	    124	     7c	switch-4.2.orig-HEAD.o
+     95	      0	      0	     95	     5f	switch-4.3-HEAD.o
+    124	      0	      0	    124	     7c	switch-4.3.orig-HEAD.o
+    166	      0	      0	    166	     a6	switch-CHAIN-2.95.o
+    111	      0	      0	    111	     6f	switch-CHAIN-3.3.o
+     95	      0	      0	     95	     5f	switch-CHAIN-3.4.o
+     95	      0	      0	     95	     5f	switch-CHAIN-4.0.o
+     95	      0	      0	     95	     5f	switch-CHAIN-4.1.o
+     95	      0	      0	     95	     5f	switch-CHAIN-4.2.orig-HEAD.o
+     95	      0	      0	     95	     5f	switch-CHAIN-4.3-HEAD.o
+     95	      0	      0	     95	     5f	switch-CHAIN-4.3.orig-HEAD.o
+
+
+Content-Type: text/x-diff; charset=us-ascii
+Content-Disposition: attachment; filename="gcc-4.3.gcc-flatten-switch-stmt.00.diff"
+
+Index: gcc-4.2.0/gcc/stmt.c
+===================================================================
+--- gcc-4.2.0.orig/gcc/stmt.c	(revision 123843)
++++ gcc-4.2.0/gcc/stmt.c	(working copy)
+@@ -2517,7 +2517,11 @@ expand_case (tree exp)
+ 	  use_cost_table
+ 	    = (TREE_CODE (orig_type) != ENUMERAL_TYPE
+ 	       && estimate_case_costs (case_list));
+-	  balance_case_nodes (&case_list, NULL);
++	  /* When optimizing for size, we want a straight list to avoid
++	     jumps as much as possible. This basically creates an if-else
++	     chain.  */
++	  if (!optimize_size)
++	    balance_case_nodes (&case_list, NULL);
+ 	  emit_case_nodes (index, case_list, default_label, index_type);
+ 	  emit_jump (default_label);
+ 	}
+@@ -3075,6 +3079,7 @@ emit_case_nodes (rtx index, case_node_pt
+ 	    {
+ 	      if (!node_has_low_bound (node, index_type))
+ 		{
++		  if (!optimize_size) /* don't jl to the .default_label. */
+ 		  emit_cmp_and_jump_insns (index,
+ 					   convert_modes
+ 					   (mode, imode,
+
+
+Content-Type: text/x-csrc; charset=us-ascii
+Content-Disposition: attachment; filename="switch.c"
+
+int
+commutative_tree_code (int code)
+{
+#define CASE(val, ret) case val:/* __asm__("# val="#val ",ret="#ret);*/ return ret;
+#ifndef CHAIN
+  switch (code)
+    {
+# if 1
+  CASE(1,3)
+  CASE(3,2)
+  CASE(5,8)
+  CASE(7,1)
+  CASE(33,4)
+  CASE(44,9)
+  CASE(55,10)
+  CASE(66,-1)
+  CASE(77,99)
+  CASE(666,0)
+# else
+    case 1:
+      return 3;
+    case 3:
+      return 2;
+    case 5:
+      return 8;
+    case 7:
+      return 1;
+    case 33:
+      return 4;
+    case 44:
+      return 9;
+    case 55:
+      return 10;
+    case 66:
+      return -1;
+    case 77:
+      return 99;
+    case 666:
+      return 0;
+# endif
+    default:
+      break;
+    }
+  return 4711;
+
+#else
+   if (code == 1)
+	return 3;
+  else if (code == 3)
+	return 2;
+  else if (code == 5)
+	return 8;
+  else if (code == 7)
+	return 1;
+  else if (code == 33)
+	return 4;
+  else if (code == 44)
+	return 9;
+  else if (code == 55)
+	return 10;
+  else if (code == 66)
+	return -1;
+  else if (code == 77)
+	return 99;
+  else if (code == 666)
+	return 0;
+  else
+	return 4711;
+#endif
+}
+
+
+--AhhlLboLdkugWU4S--
+
============================================================
--- packages/gcc/gcc-4.2.1/200-uclibc-locale.patch	8e6037b6e0618f8cc3e60113d45ab7ea2e8eccd6
+++ packages/gcc/gcc-4.2.1/200-uclibc-locale.patch	28c039b24a03a717740c6985e40b5ea01e869378
@@ -1,14 +1,14 @@
 --- gcc/libstdc++-v3/acinclude.m4
 +++ gcc/libstdc++-v3/acinclude.m4
 @@ -1369,7 +1369,7 @@
-   AC_MSG_CHECKING([for C locale to use])
+ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
    GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
      [use MODEL for target locale package],
 -    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
 +    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
-   
-   # If they didn't use this option switch, or if they specified --enable
-   # with no specific model, we'll have to look for one.  If they
+ 
+   # Deal with gettext issues.  Default to not using it (=no) until we detect
+   # support for it later.  Let the user turn it off via --e/d, but let that
 @@ -1385,6 +1385,9 @@
    # Default to "generic".
    if test $enable_clocale_flag = auto; then
============================================================
--- packages/gcc/gcc_4.2.1.bb	2b150f642b32b1df6fc4941f7ff18dd8e8794a23
+++ packages/gcc/gcc_4.2.1.bb	bafb5bf9dabe0cd6e870dcebb72d25a26d2ff890
@@ -10,7 +10,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc
 
 SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
 	file://100-uclibc-conf.patch;patch=1 \
-#	file://200-uclibc-locale.patch;patch=1 \
+	file://200-uclibc-locale.patch;patch=1 \
 	file://300-libstdc++-pic.patch;patch=1 \
 	file://301-missing-execinfo_h.patch;patch=1 \
 	file://302-c99-snprintf.patch;patch=1 \
@@ -19,6 +19,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc
 	file://602-sdk-libstdc++-includes.patch;patch=1 \
 	file://740-sh-pr24836.patch;patch=1 \
 	file://800-arm-bigendian.patch;patch=1 \
+	file://904-flatten-switch-stmt-00.patch;patch=1 \
 	file://arm-nolibfloat.patch;patch=1 \
 	file://arm-softfloat.patch;patch=1 \
 	file://gcc41-configure.in.patch;patch=1 \






More information about the Openembedded-commits mailing list