gcc-4.2.3 patch testing

Discuss the development of new homebrew software, tools and libraries.

Moderators: cheriff, TyRaNiD

Post Reply
gauri
Posts: 35
Joined: Sun Jan 20, 2008 11:17 pm
Location: Belarus

gcc-4.2.3 patch testing

Post by gauri »

I've ported the patches to gcc-4.2.3. Looks OK to me, my code compiles and runs without problems. Anyone please test it with yours. :-)
Yes, binutils-2.16.1 still do... Didn't manage to port all the changes to 2.18.

UPD: fixed for -mpreferred-stack-boundary... sorry, took the wrong patch.

Code: Select all

diff -burN gcc-4.2.3/config.sub gcc-4.2.3-psp/config.sub
--- gcc-4.2.3/config.sub	2006-10-16 06:27:17.000000000 +0300
+++ gcc-4.2.3-psp/config.sub	2008-03-12 21:52:04.375000000 +0200
@@ -267,6 +267,7 @@
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
+	| mipsallegrex | mipsallegrexel \
 	| mn10200 | mn10300 \
 	| mt \
 	| msp430 \
@@ -348,6 +349,7 @@
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipstx39-* | mipstx39el-* \
+	| mipsallegrex-* | mipsallegrexel-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
@@ -690,6 +692,10 @@
 		basic_machine=m68k-atari
 		os=-mint
 		;;
+	psp)
+		basic_machine=mipsallegrexel-psp
+		os=-elf
+		;;
 	mips3*-*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
 		;;
diff -burN gcc-4.2.3/gcc/c-incpath.c gcc-4.2.3-psp/gcc/c-incpath.c
--- gcc-4.2.3/gcc/c-incpath.c	2007-09-01 18:28:30.000000000 +0300
+++ gcc-4.2.3-psp/gcc/c-incpath.c	2008-03-12 21:52:04.375000000 +0200
@@ -340,13 +340,18 @@
   cpp_dir *p;
 
 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  /* Convert all backslashes to slashes.  The native CRT stat()
-     function does not recognize a directory that ends in a backslash
-     (unless it is a drive root dir, such "c:\").  Forward slashes,
-     trailing or otherwise, cause no problems for stat().  */
-  char* c;
-  for (c = path; *c; c++)
-    if (*c == '\\') *c = '/';
+  /* Remove unnecessary trailing slashes.  On some versions of MS
+     Windows, trailing  _forward_ slashes cause no problems for stat().
+     On newer versions, stat() does not recognise a directory that ends
+     in a '\\' or '/', unless it is a drive root dir, such as "c:/",
+     where it is obligatory.  */
+  int pathlen = strlen (path);
+  char* end = path + pathlen - 1;
+  /* Preserve the lead '/' or lead "c:/".  */
+  char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
+   
+  for (; end > start && IS_DIR_SEPARATOR (*end); end--)
+    *end = 0;
 #endif
 
   p = XNEW (cpp_dir);
diff -burN gcc-4.2.3/gcc/config/mips/allegrex.md gcc-4.2.3-psp/gcc/config/mips/allegrex.md
--- gcc-4.2.3/gcc/config/mips/allegrex.md	1970-01-01 02:00:00.000000000 +0200
+++ gcc-4.2.3-psp/gcc/config/mips/allegrex.md	2008-03-12 21:52:04.390625000 +0200
@@ -0,0 +1,183 @@
+;; Sony ALLEGREX instructions.
+;; Copyright (C) 2005 Free Software Foundation, Inc.
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; GCC is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING.  If not, write to
+;; the Free Software Foundation, 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+; Multiply Add and Subtract.
+
+(define_insn "allegrex_madd"
+  [(set (match_operand:SI 0 "register_operand" "+l")
+      	(plus:SI (mult:SI (match_operand:SI 1 "register_operand" "d")
+			  (match_operand:SI 2 "register_operand" "d"))
+		 (match_dup 0)))
+   (clobber (match_scratch:SI 3 "=h"))]
+  "TARGET_ALLEGREX"
+  "madd\t%1,%2"
+  [(set_attr "type"	"imadd")
+   (set_attr "mode"	"SI")])
+
+(define_insn "allegrex_msub"
+  [(set (match_operand:SI 0 "register_operand" "+l")
+      	(minus:SI (match_dup 0)
+		  (mult:SI (match_operand:SI 1 "register_operand" "d")
+			   (match_operand:SI 2 "register_operand" "d"))))
+   (clobber (match_scratch:SI 3 "=h"))]
+  "TARGET_ALLEGREX"
+  "msub\t%1,%2"
+  [(set_attr "type"	"imadd")
+   (set_attr "mode"	"SI")])
+
+
+; Min and max.
+
+(define_insn "sminsi3"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+        (smin:SI (match_operand:SI 1 "register_operand" "d")
+                 (match_operand:SI 2 "register_operand" "d")))]
+  "TARGET_ALLEGREX"
+  "min\t%0,%1,%2"
+  [(set_attr "type"	"arith")
+   (set_attr "mode"	"SI")])
+
+(define_insn "smaxsi3"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+        (smax:SI (match_operand:SI 1 "register_operand" "d")
+                 (match_operand:SI 2 "register_operand" "d")))]
+  "TARGET_ALLEGREX"
+  "max\t%0,%1,%2"
+  [(set_attr "type"	"arith")
+   (set_attr "mode"	"SI")])
+
+
+; Extended shift instructions.
+
+(define_insn "allegrex_bitrev"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+	(unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+		   UNSPEC_BITREV))]
+  "TARGET_ALLEGREX"
+  "bitrev\t%0,%1"
+  [(set_attr "type"	"arith")
+   (set_attr "mode"	"SI")])
+
+(define_insn "allegrex_wsbh"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+	(unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+		   UNSPEC_WSBH))]
+  "TARGET_ALLEGREX"
+  "wsbh\t%0,%1"
+  [(set_attr "type"	"arith")
+   (set_attr "mode"	"SI")])
+
+(define_insn "allegrex_wsbw"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+	(unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+		   UNSPEC_WSBW))]
+  "TARGET_ALLEGREX"
+  "wsbw\t%0,%1"
+  [(set_attr "type"	"arith")
+   (set_attr "mode"	"SI")])
+
+
+; Count leading ones, count trailing zeros, and count trailing ones (clz is
+; already defined).
+
+(define_insn "allegrex_clo"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+      	(unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+		   UNSPEC_CLO))]
+  "TARGET_ALLEGREX"
+  "clo\t%0,%1"
+  [(set_attr "type"	"clz")
+   (set_attr "mode"	"SI")])
+
+(define_expand "ctzsi2"
+  [(set (match_operand:SI 0 "register_operand")
+      	(ctz:SI (match_operand:SI 1 "register_operand")))]
+  "TARGET_ALLEGREX"
+{
+  rtx r1;
+
+  r1 = gen_reg_rtx (SImode);
+  emit_insn (gen_allegrex_bitrev (r1, operands[1]));
+  emit_insn (gen_clzsi2 (operands[0], r1));
+  DONE;
+})
+
+(define_expand "allegrex_cto"
+  [(set (match_operand:SI 0 "register_operand")
+      	(unspec:SI [(match_operand:SI 1 "register_operand")]
+		   UNSPEC_CTO))]
+  "TARGET_ALLEGREX"
+{
+  rtx r1;
+
+  r1 = gen_reg_rtx (SImode);
+  emit_insn (gen_allegrex_bitrev (r1, operands[1]));
+  emit_insn (gen_allegrex_clo (operands[0], r1));
+  DONE;
+})
+
+
+; Misc.
+
+(define_insn "allegrex_sync"
+  [(unspec_volatile [(const_int 0)] UNSPEC_SYNC)]
+  "TARGET_ALLEGREX"
+  "sync"
+  [(set_attr "type"	"unknown")
+   (set_attr "mode"	"none")])
+
+(define_insn "allegrex_cache"
+  [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "")
+		     (match_operand:SI 1 "register_operand" "d")]
+		    UNSPEC_CACHE)]
+  "TARGET_ALLEGREX"
+  "cache\t%0,0(%1)"
+  [(set_attr "type"	"unknown")
+   (set_attr "mode"	"none")])
+
+
+; Floating-point builtins.
+
+(define_insn "allegrex_ceil_w_s"
+  [(set (match_operand:SI 0 "register_operand" "=f")
+      	(unspec:SI [(match_operand:SF 1 "register_operand" "f")]
+		   UNSPEC_CEIL_W_S))]
+  "TARGET_ALLEGREX"
+  "ceil.w.s\t%0,%1"
+  [(set_attr "type"	"fcvt")
+   (set_attr "mode"	"SF")])
+
+(define_insn "allegrex_floor_w_s"
+  [(set (match_operand:SI 0 "register_operand" "=f")
+      	(unspec:SI [(match_operand:SF 1 "register_operand" "f")]
+		   UNSPEC_FLOOR_W_S))]
+  "TARGET_ALLEGREX"
+  "floor.w.s\t%0,%1"
+  [(set_attr "type"	"fcvt")
+   (set_attr "mode"	"SF")])
+
+(define_insn "allegrex_round_w_s"
+  [(set (match_operand:SI 0 "register_operand" "=f")
+      	(unspec:SI [(match_operand:SF 1 "register_operand" "f")]
+		   UNSPEC_ROUND_W_S))]
+  "TARGET_ALLEGREX"
+  "round.w.s\t%0,%1"
+  [(set_attr "type"	"fcvt")
+   (set_attr "mode"	"SF")])
diff -burN gcc-4.2.3/gcc/config/mips/mips.c gcc-4.2.3-psp/gcc/config/mips/mips.c
--- gcc-4.2.3/gcc/config/mips/mips.c	2007-10-24 20:54:40.000000000 +0300
+++ gcc-4.2.3-psp/gcc/config/mips/mips.c	2008-03-12 21:57:54.812500000 +0200
@@ -179,6 +179,12 @@
   MIPS_VOID_FTYPE_V2HI_V2HI,
   MIPS_VOID_FTYPE_V4QI_V4QI,
 
+  /* For the Sony ALLEGREX.  */
+  MIPS_SI_FTYPE_QI,
+  MIPS_SI_FTYPE_HI,
+  MIPS_VOID_FTYPE_VOID,
+  MIPS_SI_FTYPE_SF,
+
   /* The last type.  */
   MIPS_MAX_FTYPE_MAX
 };
@@ -220,6 +226,11 @@
   /* As above, but the instruction only sets a single $fcc register.  */
   MIPS_BUILTIN_CMP_SINGLE,
 
+  /* The builtin corresponds to the ALLEGREX cache instruction.  Operand 0
+     is the function code (must be less than 32) and operand 1 is the base
+     address.  */
+  MIPS_BUILTIN_CACHE,
+
   /* For generating bposge32 branch instructions in MIPS32 DSP ASE.  */
   MIPS_BUILTIN_BPOSGE32
 };
@@ -404,6 +415,7 @@
 static rtx mips_expand_builtin_compare (enum mips_builtin_type,
 					enum insn_code, enum mips_fp_condition,
 					rtx, tree);
+static rtx mips_expand_builtin_cache (enum insn_code icode, rtx, tree);
 static rtx mips_expand_builtin_bposge (enum mips_builtin_type, rtx);
 static void mips_encode_section_info (tree, rtx, int);
 static void mips_extra_live_on_entry (bitmap);
@@ -601,6 +613,10 @@
    should arrange to call mips32 hard floating point code.  */
 int mips16_hard_float;
 
+/* Preferred stack boundary for proper stack vars alignment */
+unsigned int mips_preferred_stack_boundary;
+unsigned int mips_preferred_stack_align;
+
 /* The architecture selected by -mipsN.  */
 static const struct mips_cpu_info *mips_isa_info;
 
@@ -719,6 +735,7 @@
 
   /* MIPS II */
   { "r6000", PROCESSOR_R6000, 2 },
+  { "allegrex", PROCESSOR_ALLEGREX, 2 },
 
   /* MIPS III */
   { "r4000", PROCESSOR_R4000, 3 },
@@ -5187,6 +5204,22 @@
       mips_lo_relocs[SYMBOL_GOTOFF_LOADGP] = "%lo(%neg(%gp_rel(";
     }
 
+  /* Validate -mpreferred-stack-boundary= value, or provide default.
+     The default of 128-bit is for newABI else 64-bit.  */
+  mips_preferred_stack_boundary = (TARGET_NEWABI ? 128 : 64);
+  mips_preferred_stack_align = (TARGET_NEWABI ? 16 : 8);
+  if (mips_preferred_stack_boundary_string)
+    {
+      i = atoi (mips_preferred_stack_boundary_string);
+      if &#40;i < 2 || i > 12&#41;
+		error &#40;"-mpreferred-stack-boundary=%d is not between 2 and 12", i&#41;;
+      else
+        &#123;
+          mips_preferred_stack_align = &#40;1 << i&#41;;
+          mips_preferred_stack_boundary = mips_preferred_stack_align * 8;
+        &#125;
+    &#125;
+
   /* Thread-local relocation operators.  */
   mips_lo_relocs&#91;SYMBOL_TLSGD&#93; = "%tlsgd&#40;";
   mips_lo_relocs&#91;SYMBOL_TLSLDM&#93; = "%tlsldm&#40;";
@@ -10446,6 +10479,67 @@
   BPOSGE_BUILTIN &#40;32, MASK_DSP&#41;
 &#125;;
 
+/* Builtin functions for the Sony ALLEGREX processor.
+
+   These have the `__builtin_allgrex_' prefix instead of `__builtin_mips_'
+   to maintain compatibility with Sony's ALLEGREX GCC port.
+
+   Some of the builtins may seem redundant, but they are the same as the
+   builtins defined in the Sony compiler.  I chose to map redundant and
+   trivial builtins to the original instruction instead of creating
+   duplicate patterns specifically for the ALLEGREX &#40;as Sony does&#41;.  */
+
+/* Define a MIPS_BUILTIN_DIRECT function for instruction CODE_FOR_allegrex_<INSN>.
+   FUNCTION_TYPE and TARGET_FLAGS are builtin_description fields.  */
+#define DIRECT_ALLEGREX_BUILTIN&#40;INSN, FUNCTION_TYPE, TARGET_FLAGS&#41;	\
+  &#123; CODE_FOR_allegrex_ ## INSN, 0, "__builtin_allegrex_" #INSN,		\
+    MIPS_BUILTIN_DIRECT, FUNCTION_TYPE, TARGET_FLAGS &#125;
+
+/* Same as the above, but mapped to an instruction that doesn't share the
+   NAME.  NAME is the name of the builtin without the builtin prefix.  */
+#define DIRECT_ALLEGREX_NAMED_BUILTIN&#40;NAME, INSN, FUNCTION_TYPE, TARGET_FLAGS&#41;	\
+  &#123; CODE_FOR_ ## INSN, 0, "__builtin_allegrex_" #NAME,				\
+    MIPS_BUILTIN_DIRECT, FUNCTION_TYPE, TARGET_FLAGS &#125;
+
+/* Define a MIPS_BUILTIN_DIRECT_NO_TARGET function for instruction
+   CODE_FOR_allegrex_<INSN>.  FUNCTION_TYPE and TARGET_FLAGS are
+   builtin_description fields.  */
+#define DIRECT_ALLEGREX_NO_TARGET_BUILTIN&#40;INSN, FUNCTION_TYPE, TARGET_FLAGS&#41;	\
+  &#123; CODE_FOR_allegrex_ ## INSN, 0, "__builtin_allegrex_" #INSN,			\
+    MIPS_BUILTIN_DIRECT_NO_TARGET, FUNCTION_TYPE, TARGET_FLAGS &#125;
+
+/* Define a builtin with a specific function TYPE.  */
+#define SPECIAL_ALLEGREX_BUILTIN&#40;TYPE, INSN, FUNCTION_TYPE, TARGET_FLAGS&#41;	\
+  &#123; CODE_FOR_allegrex_ ## INSN, 0, "__builtin_allegrex_" #INSN,			\
+    MIPS_BUILTIN_ ## TYPE, FUNCTION_TYPE, TARGET_FLAGS &#125;
+
+static const struct builtin_description allegrex_bdesc&#91;&#93; =
+&#123;
+  DIRECT_ALLEGREX_BUILTIN&#40;bitrev, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;wsbh, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;wsbw, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;clz, clzsi2, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;clo, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;ctz, ctzsi2, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;cto, MIPS_SI_FTYPE_SI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;rotr, rotrsi3, MIPS_SI_FTYPE_SI_SI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;rotl, rotlsi3, MIPS_SI_FTYPE_SI_SI, 0&#41;,
+
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;seb, extendqisi2, MIPS_SI_FTYPE_QI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;seh, extendhisi2, MIPS_SI_FTYPE_HI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;max, smaxsi3, MIPS_SI_FTYPE_SI_SI, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;min, sminsi3, MIPS_SI_FTYPE_SI_SI, 0&#41;,
+
+  DIRECT_ALLEGREX_NO_TARGET_BUILTIN&#40;sync, MIPS_VOID_FTYPE_VOID, 0&#41;,
+  SPECIAL_ALLEGREX_BUILTIN&#40;CACHE, cache, MIPS_VOID_FTYPE_SI_SI, 0&#41;,
+
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;sqrt_s, sqrtsf2, MIPS_SF_FTYPE_SF, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;ceil_w_s, MIPS_SI_FTYPE_SF, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;floor_w_s, MIPS_SI_FTYPE_SF, 0&#41;,
+  DIRECT_ALLEGREX_BUILTIN&#40;round_w_s, MIPS_SI_FTYPE_SF, 0&#41;,
+  DIRECT_ALLEGREX_NAMED_BUILTIN&#40;trunc_w_s, fix_truncsfsi2_insn, MIPS_SI_FTYPE_SF, 0&#41;
+&#125;;
+
 /* This helps provide a mapping from builtin function codes to bdesc
    arrays.  */
 
@@ -10466,6 +10560,7 @@
 &#123;
   &#123; mips_bdesc, ARRAY_SIZE &#40;mips_bdesc&#41;, PROCESSOR_MAX &#125;,
   &#123; sb1_bdesc, ARRAY_SIZE &#40;sb1_bdesc&#41;, PROCESSOR_SB1 &#125;,
+  &#123; allegrex_bdesc, ARRAY_SIZE &#40;allegrex_bdesc&#41;, PROCESSOR_ALLEGREX &#125;,
   &#123; dsp_bdesc, ARRAY_SIZE &#40;dsp_bdesc&#41;, PROCESSOR_MAX &#125;
 &#125;;
 
@@ -10569,6 +10664,9 @@
     case MIPS_BUILTIN_BPOSGE32&#58;
       return mips_expand_builtin_bposge &#40;type, target&#41;;
 
+    case MIPS_BUILTIN_CACHE&#58;
+      return mips_expand_builtin_cache &#40;icode, target, arglist&#41;;
+
     default&#58;
       return 0;
     &#125;
@@ -10587,8 +10685,8 @@
   tree V4QI_type_node;
   unsigned int offset;
 
-  /* We have only builtins for -mpaired-single, -mips3d and -mdsp.  */
-  if &#40;!TARGET_PAIRED_SINGLE_FLOAT && !TARGET_DSP&#41;
+  /* We have only builtins for -mpaired-single, -mips3d and -mdsp and the Sony ALLEGREX.  */
+  if &#40;!TARGET_PAIRED_SINGLE_FLOAT && !TARGET_DSP && !TARGET_ALLEGREX&#41;
     return;
 
   if &#40;TARGET_PAIRED_SINGLE_FLOAT&#41;
@@ -10653,6 +10751,44 @@
 				    double_type_node, double_type_node, NULL_TREE&#41;;
     &#125;
 
+   if &#40;TARGET_ALLEGREX&#41;
+     &#123;
+       types&#91;MIPS_SI_FTYPE_QI&#93;
+ 	= build_function_type_list &#40;intSI_type_node,
+ 				    intQI_type_node,
+ 				    NULL_TREE&#41;;
+ 
+       types&#91;MIPS_SI_FTYPE_HI&#93;
+ 	= build_function_type_list &#40;intSI_type_node,
+ 				    intHI_type_node,
+ 				    NULL_TREE&#41;;
+ 
+       types&#91;MIPS_SI_FTYPE_SI&#93;
+ 	= build_function_type_list &#40;intSI_type_node,
+ 				    intSI_type_node,
+ 				    NULL_TREE&#41;;
+ 
+       types&#91;MIPS_SI_FTYPE_SI_SI&#93;
+ 	= build_function_type_list &#40;intSI_type_node,
+ 				    intSI_type_node, intSI_type_node,
+ 				    NULL_TREE&#41;;
+ 
+       types&#91;MIPS_VOID_FTYPE_VOID&#93;
+ 	= build_function_type_list &#40;void_type_node, void_type_node, NULL_TREE&#41;;
+ 
+       types&#91;MIPS_VOID_FTYPE_SI_SI&#93;
+ 	= build_function_type_list &#40;void_type_node,
+ 				    intSI_type_node, intSI_type_node, NULL_TREE&#41;;
+ 
+       types&#91;MIPS_SF_FTYPE_SF&#93;
+ 	= build_function_type_list &#40;float_type_node,
+ 				    float_type_node, NULL_TREE&#41;;
+ 
+       types&#91;MIPS_SI_FTYPE_SF&#93;
+ 	= build_function_type_list &#40;intSI_type_node,
+ 				    float_type_node, NULL_TREE&#41;;
+     &#125;
+
   if &#40;TARGET_DSP&#41;
     &#123;
       V2HI_type_node = build_vector_type_for_mode &#40;intHI_type_node, V2HImode&#41;;
@@ -10834,6 +10970,10 @@
 
   switch &#40;i&#41;
     &#123;
+    case 0&#58;
+      emit_insn &#40;GEN_FCN &#40;icode&#41; &#40;0&#41;&#41;;
+      break;
+
     case 2&#58;
       emit_insn &#40;GEN_FCN &#40;icode&#41; &#40;ops&#91;0&#93;, ops&#91;1&#93;&#41;&#41;;
       break;
@@ -11035,4 +11175,28 @@
   return UNKNOWN;
 &#125;
 
+
+/* Expand a __builtin_allegrex_cache&#40;&#41; function.  Make sure the passed
+   cache function code is less than 32.  */
+
+static rtx
+mips_expand_builtin_cache &#40;enum insn_code icode, rtx target, tree arglist&#41;
+&#123;
+  rtx op0, op1;
+
+  op0 = mips_prepare_builtin_arg &#40;icode, 0, &arglist&#41;;
+  op1 = mips_prepare_builtin_arg &#40;icode, 1, &arglist&#41;;
+
+  if &#40;GET_CODE &#40;op0&#41; == CONST_INT&#41;
+    if &#40;INTVAL &#40;op0&#41; < 0 || INTVAL &#40;op0&#41; > 0x1f&#41;
+      &#123;
+	error &#40;"invalid function code '%d'", INTVAL &#40;op0&#41;&#41;;
+	return const0_rtx;
+      &#125;
+
+  emit_insn &#40;GEN_FCN &#40;icode&#41; &#40;op0, op1&#41;&#41;;
+  return target;
+&#125;
+
+
 #include "gt-mips.h"
diff -burN gcc-4.2.3/gcc/config/mips/mips.h gcc-4.2.3-psp/gcc/config/mips/mips.h
--- gcc-4.2.3/gcc/config/mips/mips.h	2007-09-01 18&#58;28&#58;30.000000000 +0300
+++ gcc-4.2.3-psp/gcc/config/mips/mips.h	2008-03-12 22&#58;02&#58;23.937500000 +0200
@@ -59,6 +59,7 @@
   PROCESSOR_SB1,
   PROCESSOR_SB1A,
   PROCESSOR_SR71000,
+  PROCESSOR_ALLEGREX,
   PROCESSOR_MAX
 &#125;;
 
@@ -211,6 +212,7 @@
 #define TARGET_SB1                  &#40;mips_arch == PROCESSOR_SB1		\
 				     || mips_arch == PROCESSOR_SB1A&#41;
 #define TARGET_SR71K                &#40;mips_arch == PROCESSOR_SR71000&#41;
+#define TARGET_ALLEGREX             &#40;mips_arch == PROCESSOR_ALLEGREX&#41;
 
 /* Scheduling target defines.  */
 #define TUNE_MIPS3000               &#40;mips_tune == PROCESSOR_R3000&#41;
@@ -226,6 +228,7 @@
 #define TUNE_MIPS9000               &#40;mips_tune == PROCESSOR_R9000&#41;
 #define TUNE_SB1                    &#40;mips_tune == PROCESSOR_SB1		\
 				     || mips_tune == PROCESSOR_SB1A&#41;
+#define TUNE_ALLEGREX               &#40;mips_tune == PROCESSOR_ALLEGREX&#41;
 
 /* True if the pre-reload scheduler should try to create chains of
    multiply-add or multiply-subtract instructions.  For example,
@@ -598,6 +601,9 @@
                                  && !TARGET_MIPS5500                    \
 				 && !TARGET_MIPS16&#41;
 
+/* ISA has just the integer condition move instructions &#40;movn,movz&#41; */
+#define ISA_HAS_INT_CONDMOVE	&#40;TARGET_ALLEGREX&#41;
+
 /* ISA has the mips4 FP condition code instructions&#58; FP-compare to CC,
    branch on CC, and move &#40;both FP and non-FP&#41; on CC.  */
 #define ISA_HAS_8CC		&#40;ISA_MIPS4				\
@@ -614,7 +620,8 @@
 
 /* ISA has conditional trap instructions.  */
 #define ISA_HAS_COND_TRAP	&#40;!ISA_MIPS1				\
-				 && !TARGET_MIPS16&#41;
+				 && !TARGET_MIPS16			\
+				 && !TARGET_ALLEGREX&#41; 
 
 /* ISA has integer multiply-accumulate instructions, madd and msub.  */
 #define ISA_HAS_MADD_MSUB       &#40;&#40;ISA_MIPS32				\
@@ -632,6 +639,7 @@
 #define ISA_HAS_CLZ_CLO         &#40;&#40;ISA_MIPS32				\
                                   || ISA_MIPS32R2			\
                                   || ISA_MIPS64				\
+                                  || TARGET_ALLEGREX			\
                                  &#41; && !TARGET_MIPS16&#41;
 
 /* ISA has double-word count leading zeroes/ones instruction &#40;not
@@ -679,6 +687,7 @@
                                      || TARGET_MIPS5400                 \
                                      || TARGET_MIPS5500                 \
                                      || TARGET_SR71K                    \
+                                     || TARGET_ALLEGREX                 \
                                      &#41;&#41;
 
 /* ISA has 64-bit rotate right instruction.  */
@@ -712,11 +721,13 @@
 /* ISA includes the MIPS32r2 seb and seh instructions.  */
 #define ISA_HAS_SEB_SEH         &#40;!TARGET_MIPS16                        \
                                  && &#40;ISA_MIPS32R2                      \
+                                     || TARGET_ALLEGREX                 \
                                      &#41;&#41;
 
 /* ISA includes the MIPS32/64 rev 2 ext and ins instructions.  */
 #define ISA_HAS_EXT_INS         &#40;!TARGET_MIPS16                        \
                                  && &#40;ISA_MIPS32R2                      \
+                                     || TARGET_ALLEGREX                 \
                                      &#41;&#41;
 
 /* True if the result of a load is not available to the next instruction.
@@ -747,7 +758,8 @@
 #define ISA_HAS_HILO_INTERLOCKS	&#40;ISA_MIPS32				\
 				 || ISA_MIPS32R2			\
 				 || ISA_MIPS64				\
-				 || TARGET_MIPS5500&#41;
+				 || TARGET_MIPS5500			\
+				 || TARGET_ALLEGREX&#41;
 
 /* Add -G xx support.  */
 
@@ -1816,7 +1828,7 @@
    `current_function_outgoing_args_size'.  */
 #define OUTGOING_REG_PARM_STACK_SPACE
 
-#define STACK_BOUNDARY &#40;TARGET_NEWABI ? 128 &#58; 64&#41;
+#define STACK_BOUNDARY &#40;mips_preferred_stack_boundary&#41;
 
 #define RETURN_POPS_ARGS&#40;FUNDECL,FUNTYPE,SIZE&#41; 0
 
@@ -1972,7 +1984,7 @@
 /* Treat LOC as a byte offset from the stack pointer and round it up
    to the next fully-aligned offset.  */
 #define MIPS_STACK_ALIGN&#40;LOC&#41; \
-  &#40;TARGET_NEWABI ? &#40;&#40;LOC&#41; + 15&#41; & -16 &#58; &#40;&#40;LOC&#41; + 7&#41; & -8&#41;
+  &#40;&#40;LOC&#41; + &#40;mips_preferred_stack_align - 1&#41; & -&#40;mips_preferred_stack_align&#41;&#41;
 
 
 /* Implement `va_start' for varargs and stdarg.  */
@@ -2705,6 +2717,10 @@
 #endif
 #endif
 
+extern unsigned int mips_preferred_stack_boundary;
+extern unsigned int mips_preferred_stack_align;
+extern const char *mips_preferred_stack_boundary_string;
+
 #ifndef HAVE_AS_TLS
 #define HAVE_AS_TLS 0
 #endif
diff -burN gcc-4.2.3/gcc/config/mips/mips.md gcc-4.2.3-psp/gcc/config/mips/mips.md
--- gcc-4.2.3/gcc/config/mips/mips.md	2007-10-22 23&#58;09&#58;07.000000000 +0300
+++ gcc-4.2.3-psp/gcc/config/mips/mips.md	2008-03-12 21&#58;52&#58;04.390625000 +0200
@@ -144,6 +144,21 @@
    &#40;UNSPEC_MTHLIP		365&#41;
    &#40;UNSPEC_WRDSP		366&#41;
    &#40;UNSPEC_RDDSP		367&#41;
+
+   ;; Sony ALLEGREX instructions
+   &#40;UNSPEC_WSBH 		401&#41;
+   &#40;UNSPEC_WSBW 		402&#41;
+
+   &#40;UNSPEC_CLO			403&#41;
+   &#40;UNSPEC_CTO			404&#41;
+
+   &#40;UNSPEC_CACHE		405&#41;
+   &#40;UNSPEC_SYNC 		406&#41;
+
+   &#40;UNSPEC_CEIL_W_S		407&#41;
+   &#40;UNSPEC_FLOOR_W_S		408&#41;
+   &#40;UNSPEC_ROUND_W_S		409&#41;
+
   &#93;
 &#41;
 
@@ -1616,9 +1631,9 @@
 	   &#40;mult&#58;DI
 	      &#40;any_extend&#58;DI &#40;match_operand&#58;SI 1 "register_operand" "d"&#41;&#41;
 	      &#40;any_extend&#58;DI &#40;match_operand&#58;SI 2 "register_operand" "d"&#41;&#41;&#41;&#41;&#41;&#93;
-  "!TARGET_64BIT && ISA_HAS_MSAC"
+  "!TARGET_64BIT && &#40;ISA_HAS_MSAC || TARGET_ALLEGREX&#41;"
 &#123;
-  if &#40;TARGET_MIPS5500&#41;
+  if &#40;TARGET_MIPS5500 || TARGET_ALLEGREX&#41;
     return "msub<u>\t%1,%2";
   else
     return "msac<u>\t$0,%1,%2";
@@ -1733,12 +1748,12 @@
 	 &#40;mult&#58;DI &#40;any_extend&#58;DI &#40;match_operand&#58;SI 1 "register_operand" "d"&#41;&#41;
 		  &#40;any_extend&#58;DI &#40;match_operand&#58;SI 2 "register_operand" "d"&#41;&#41;&#41;
 	 &#40;match_operand&#58;DI 3 "register_operand" "0"&#41;&#41;&#41;&#93;
-  "&#40;TARGET_MAD || ISA_HAS_MACC&#41;
+  "&#40;TARGET_MAD || ISA_HAS_MACC || TARGET_ALLEGREX&#41;
    && !TARGET_64BIT"
 &#123;
   if &#40;TARGET_MAD&#41;
     return "mad<u>\t%1,%2";
-  else if &#40;TARGET_MIPS5500&#41;
+  else if &#40;TARGET_MIPS5500 || TARGET_ALLEGREX&#41;
     return "madd<u>\t%1,%2";
   else
     /* See comment in *macc.  */
@@ -2018,6 +2033,32 @@
 ;;
 ;;  ....................
 ;;
+;;	FIND FIRST BIT INSTRUCTION
+;;
+;;  ....................
+;;
+
+&#40;define_expand "ffs<mode>2"
+  &#91;&#40;set &#40;match_operand&#58;GPR 0 "register_operand" ""&#41;
+	&#40;ffs&#58;GPR &#40;match_operand&#58;GPR 1 "register_operand" ""&#41;&#41;&#41;&#93;
+  "ISA_HAS_CLZ_CLO"
+&#123;
+  rtx r1, r2, r3, r4;
+
+  r1 = gen_reg_rtx &#40;<MODE>mode&#41;;
+  r2 = gen_reg_rtx &#40;<MODE>mode&#41;;
+  r3 = gen_reg_rtx &#40;<MODE>mode&#41;;
+  r4 = gen_reg_rtx &#40;<MODE>mode&#41;;
+  emit_insn &#40;gen_neg<mode>2 &#40;r1, operands&#91;1&#93;&#41;&#41;;
+  emit_insn &#40;gen_and<mode>3 &#40;r2, operands&#91;1&#93;, r1&#41;&#41;;
+  emit_insn &#40;gen_clz<mode>2 &#40;r3, r2&#41;&#41;;
+  emit_move_insn &#40;r4, GEN_INT &#40;GET_MODE_BITSIZE &#40;<MODE>mode&#41;&#41;&#41;;
+  emit_insn &#40;gen_sub<mode>3 &#40;operands&#91;0&#93;, r4, r3&#41;&#41;;
+  DONE;
+&#125;&#41;
+;;
+;;  ....................
+;;
 ;;	NEGATION and ONE'S COMPLEMENT
 ;;
 ;;  ....................
@@ -4280,6 +4321,25 @@
   &#91;&#40;set_attr "type" "shift"&#41;
    &#40;set_attr "mode" "<MODE>"&#41;&#93;&#41;
 
+&#40;define_expand "rotl<mode>3"
+  &#91;&#40;set &#40;match_operand&#58;GPR 0 "register_operand"&#41;
+      	&#40;rotate&#58;GPR &#40;match_operand&#58;GPR 1 "register_operand"&#41;
+		    &#40;match_operand&#58;SI 2 "arith_operand"&#41;&#41;&#41;&#93;
+  "ISA_HAS_ROTR_<MODE>"
+&#123;
+  rtx temp;
+
+  if &#40;GET_CODE &#40;operands&#91;2&#93;&#41; == CONST_INT&#41;
+    temp = GEN_INT &#40;GET_MODE_BITSIZE &#40;<MODE>mode&#41; - INTVAL &#40;operands&#91;2&#93;&#41;&#41;;
+  else
+    &#123;
+      temp = gen_reg_rtx &#40;<MODE>mode&#41;;
+      emit_insn &#40;gen_neg<mode>2 &#40;temp, operands&#91;2&#93;&#41;&#41;;
+    &#125;
+  emit_insn &#40;gen_rotr<mode>3 &#40;operands&#91;0&#93;, operands&#91;1&#93;, temp&#41;&#41;;
+  DONE;
+&#125;&#41;
+
 ;;
 ;;  ....................
 ;;
@@ -5370,7 +5430,7 @@
 		 &#40;const_int 0&#41;&#93;&#41;
 	 &#40;match_operand&#58;GPR 2 "reg_or_0_operand" "dJ,0"&#41;
 	 &#40;match_operand&#58;GPR 3 "reg_or_0_operand" "0,dJ"&#41;&#41;&#41;&#93;
-  "ISA_HAS_CONDMOVE"
+  "ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
   "@
     mov%T4\t%0,%z2,%1
     mov%t4\t%0,%z3,%1"
@@ -5400,8 +5460,12 @@
 	&#40;if_then_else&#58;GPR &#40;match_dup 5&#41;
 			  &#40;match_operand&#58;GPR 2 "reg_or_0_operand"&#41;
 			  &#40;match_operand&#58;GPR 3 "reg_or_0_operand"&#41;&#41;&#41;&#93;
-  "ISA_HAS_CONDMOVE"
+  "ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
 &#123;
+  if &#40;ISA_HAS_INT_CONDMOVE
+      && GET_MODE_CLASS &#40;GET_MODE &#40;cmp_operands&#91;0&#93;&#41;&#41; == MODE_FLOAT&#41;
+    FAIL;
+
   gen_conditional_move &#40;operands&#41;;
   DONE;
 &#125;&#41;
@@ -5495,3 +5559,6 @@
 ; The MIPS DSP Instructions.
 
 &#40;include "mips-dsp.md"&#41;
+
+; Sony ALLEGREX instructions.
+&#40;include "allegrex.md"&#41;
diff -burN gcc-4.2.3/gcc/config/mips/mips.opt gcc-4.2.3-psp/gcc/config/mips/mips.opt
--- gcc-4.2.3/gcc/config/mips/mips.opt	2007-09-01 18&#58;28&#58;30.000000000 +0300
+++ gcc-4.2.3-psp/gcc/config/mips/mips.opt	2008-03-12 22&#58;03&#58;21.453125000 +0200
@@ -219,3 +219,7 @@
 mxgot
 Target Report Var&#40;TARGET_XGOT&#41;
 Lift restrictions on GOT size
+
+mpreferred-stack-boundary=
+Target RejectNegative Joined Var&#40;mips_preferred_stack_boundary_string&#41;
+Attempt to keep stack aligned to this power of 2
diff -burN gcc-4.2.3/gcc/config/mips/psp.h gcc-4.2.3-psp/gcc/config/mips/psp.h
--- gcc-4.2.3/gcc/config/mips/psp.h	1970-01-01 02&#58;00&#58;00.000000000 +0200
+++ gcc-4.2.3-psp/gcc/config/mips/psp.h	2008-03-12 21&#58;52&#58;04.406250000 +0200
@@ -0,0 +1,31 @@
+/* Support for Sony's Playstation Portable &#40;PSP&#41;.
+   Copyright &#40;C&#41; 2005 Free Software Foundation, Inc.
+   Contributed by Marcus R. Brown <mrbrown@ocgnet.org>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or &#40;at your option&#41;
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Override the startfile spec to include crt0.o. */
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s"
+
+#undef SUBTARGET_CPP_SPEC
+#define SUBTARGET_CPP_SPEC "-DPSP=1 -D__psp__=1 -D_PSP=1"
+
+/* Get rid of the .pdr section. */
+#undef SUBTARGET_ASM_SPEC
+#define SUBTARGET_ASM_SPEC "-mno-pdr"
diff -burN gcc-4.2.3/gcc/config/mips/t-allegrex gcc-4.2.3-psp/gcc/config/mips/t-allegrex
--- gcc-4.2.3/gcc/config/mips/t-allegrex	1970-01-01 02&#58;00&#58;00.000000000 +0200
+++ gcc-4.2.3-psp/gcc/config/mips/t-allegrex	2008-03-12 21&#58;52&#58;04.406250000 +0200
@@ -0,0 +1,29 @@
+# Suppress building libgcc1.a, since the MIPS compiler port is complete
+# and does not need anything from libgcc1.a.
+LIBGCC1 =
+CROSS_LIBGCC1 =
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o
+# Don't let CTOR_LIST end up in sdata section.
+CRTSTUFF_T_CFLAGS = -G 0
+
+# Assemble startup files.
+$&#40;T&#41;crti.o&#58; $&#40;srcdir&#41;/config/mips/crti.asm $&#40;GCC_PASSES&#41;
+	$&#40;GCC_FOR_TARGET&#41; $&#40;GCC_CFLAGS&#41; $&#40;MULTILIB_CFLAGS&#41; $&#40;INCLUDES&#41; \
+	-c -o $&#40;T&#41;crti.o -x assembler-with-cpp $&#40;srcdir&#41;/config/mips/crti.asm
+
+$&#40;T&#41;crtn.o&#58; $&#40;srcdir&#41;/config/mips/crtn.asm $&#40;GCC_PASSES&#41;
+	$&#40;GCC_FOR_TARGET&#41; $&#40;GCC_CFLAGS&#41; $&#40;MULTILIB_CFLAGS&#41; $&#40;INCLUDES&#41; \
+	-c -o $&#40;T&#41;crtn.o -x assembler-with-cpp $&#40;srcdir&#41;/config/mips/crtn.asm
+
+# We must build libgcc2.a with -G 0, in case the user wants to link
+# without the $gp register.
+TARGET_LIBGCC2_CFLAGS = -G 0
+
+# Build the libraries for both hard and soft floating point
+
+MULTILIB_OPTIONS = 
+MULTILIB_DIRNAMES = 
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
diff -burN gcc-4.2.3/gcc/config.gcc gcc-4.2.3-psp/gcc/config.gcc
--- gcc-4.2.3/gcc/config.gcc	2007-12-27 11&#58;45&#58;20.000000000 +0200
+++ gcc-4.2.3-psp/gcc/config.gcc	2008-03-12 21&#58;52&#58;04.406250000 +0200
@@ -1652,6 +1652,18 @@
 	tmake_file=mips/t-r3900
 	use_fixproto=yes
 	;;
+mipsallegrex-*-elf* | mipsallegrexel-*-elf*&#41;
+	tm_file="elfos.h $&#123;tm_file&#125; mips/elf.h"
+	tmake_file=mips/t-allegrex
+	target_cpu_default="MASK_SINGLE_FLOAT|MASK_DIVIDE_BREAKS"
+	tm_defines="MIPS_ISA_DEFAULT=2 MIPS_CPU_STRING_DEFAULT=\\\"allegrex\\\" MIPS_ABI_DEFAULT=ABI_EABI"
+	case $&#123;target&#125; in
+	mipsallegrex*-psp-elf*&#41;	
+		tm_file="$&#123;tm_file&#125; mips/psp.h"
+		;;
+	esac
+	use_fixproto=yes
+	;;
 mmix-knuth-mmixware&#41;
 	need_64bit_hwint=yes
 	;;
diff -burN gcc-4.2.3/gcc/version.c gcc-4.2.3-psp/gcc/version.c
--- gcc-4.2.3/gcc/version.c	2005-03-16 08&#58;04&#58;10.000000000 +0200
+++ gcc-4.2.3-psp/gcc/version.c	2008-03-12 21&#58;52&#58;04.406250000 +0200
@@ -8,7 +8,7 @@
    in parentheses.  You may also wish to include a number indicating
    the revision of your modified compiler.  */
 
-#define VERSUFFIX ""
+#define VERSUFFIX " &#40;PSPDEV 20080312-gauri&#41;"
 
 /* This is the location of the online document giving instructions for
    reporting bugs.  If you distribute a modified version of GCC,
@@ -17,7 +17,7 @@
    forward us bugs reported to you, if you determine that they are
    not bugs in your modifications.&#41;  */
 
-const char bug_report_url&#91;&#93; = "<URL&#58;http&#58;//gcc.gnu.org/bugs.html>";
+const char bug_report_url&#91;&#93; = "<URL&#58;http&#58;//wiki.pspdev.org/psp&#58;toolchain#bugs>";
 
 /* The complete version string, assembled from several pieces.
    BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile.  */
Last edited by gauri on Sat Mar 22, 2008 8:40 pm, edited 1 time in total.
Freelance game industry veteran. 8]
hlide
Posts: 739
Joined: Sun Sep 10, 2006 2:31 am

Post by hlide »

gauri, I really hope i wouldn't need to add the -mpreferred-stack-boundary every times someone wants to upgrade to a new gcc version. The last 2.1.0 patch on SVN here does have it now. Why don't you use the last patch as a start patch to adapt for 4.2.3 ?

Another thing, 4.2.x has more bugs than 4.1.x.

If we need a serious upgrade, you must consider 4.3.0 because the number of bugs are less than 4.2.x to start. Not only that, there is some serious and interesting MIPS backend changes. There is also a new option to free the use of $gp, where the actual psp-gcc still "suck" to do so (-G 0 is not enough). And so on, and so on...

Of course, I made a new PSP patch for gcc 4.3.0 but I still have some deal to install two new needed libraries (gmp and gprf) on my cygwin machine so I can build this gcc. Some help may be welcomed.
gauri
Posts: 35
Joined: Sun Jan 20, 2008 11:17 pm
Location: Belarus

Post by gauri »

considering the -mpreferred-stack-boundary... sorry, i've posted old patch :( surely, i've added this option, but on my another machine... my fail.

about 4.3.0 -- they say 4.3.1 will be soon out... maybe we should wait for it? but surely i'll look into patching 4.3.0 too.

does 4.3.0 build with 2.16 binutils?
Freelance game industry veteran. 8]
hlide
Posts: 739
Joined: Sun Sep 10, 2006 2:31 am

Post by hlide »

gauri wrote:considering the -mpreferred-stack-boundary... sorry, i've posted old patch :( surely, i've added this option, but on my another machine... my fail.

about 4.3.0 -- they say 4.3.1 will be soon out... maybe we should wait for it? but surely i'll look into patching 4.3.0 too.

does 4.3.0 build with 2.16 binutils?
I can't tell you that because I still failed to install those damned external libraries (GPM and MPRF which are new up to 4.3.0). If someone here knows how to install them on cygwin, I'd be glad to hear his/her advices.
gauri
Posts: 35
Joined: Sun Jan 20, 2008 11:17 pm
Location: Belarus

Post by gauri »

(I've patched 4.3.0 at least, now building it)

strange, they should build and install without any problems...
for now, you can try the following...

script for gmp-4.2

Code: Select all

#!/bin/bash

echo "***"
echo "*** Building gmp-4.2"
echo "***"

 if &#91; ! -d gmp-4.2 &#93;
 then
  rm -Rf gmp-4.2
  if tar xfvj gmp-4.2.tar.bz2
   then exit 1
  fi
 fi

 cd gmp-4.2
 rm -Rf build-psp

 mkdir -p build-psp && cd build-psp || &#123; exit 1; &#125;

 ../configure --prefix="../../gcc_libs" --build=i686-pc-cygwin --disable-nls || &#123; exit 1; &#125;

 make -j 2 && make install && make clean || &#123; exit 1; &#125;
script for mpfr-2.3.1

Code: Select all

#!/bin/sh

echo "***"
echo "*** Building mpfr-2.3.1"
echo "***"

 if &#91; ! -d mpfr-2.3.1 &#93;
 then
  rm -Rf mpfr-2.3.1
  if tar xfvj mpfr-2.3.1.tar.bz2
   then exit 1
  fi
 fi

 cd mpfr-2.3.1
 rm -Rf build-psp

 mkdir -p build-psp && cd build-psp || &#123; exit 1; &#125;

 ../configure --prefix="../../gcc_libs" --build=i686-pc-cygwin --with-gmp="../../gcc_libs" --disable-nls || &#123; exit 1; &#125;

 make -j 2 && make install && make clean || &#123; exit 1; &#125;
then you tell gcc to look for them in ../../gcc_libs with, like, --with-gmp="../../gcc_libs" --with-mpfr="../../gcc_libs"
Freelance game industry veteran. 8]
gauri
Posts: 35
Joined: Sun Jan 20, 2008 11:17 pm
Location: Belarus

Post by gauri »

hmm, configure refuses to --prefix with relative path. damn it. :) use some absolute path then..
Freelance game industry veteran. 8]
hlide
Posts: 739
Joined: Sun Sep 10, 2006 2:31 am

Post by hlide »

where should i put and run those scripts ? there is no indication about it, and i don't have any idea where ../../gcc_libs may reside.
hlide
Posts: 739
Joined: Sun Sep 10, 2006 2:31 am

Post by hlide »

DELETED (I took the wrong patch)
gauri
Posts: 35
Joined: Sun Jan 20, 2008 11:17 pm
Location: Belarus

Post by gauri »

In fact, you can tell them to install anywhere. All that is needed is to tell gcc's configure where to find them.
A good idea would be to just let them configure with default prefix and install over current cygwin libraries -- you'll just update your own system. Then nothing will be necessary to be done to make gcc use correct libs.
Freelance game industry veteran. 8]
Post Reply