[I've moved to gcc-patches because this includes a patch anyway.]

Thomas Schwinge <tho...@codesourcery.com> wrote:
>     /scratch/tschwing/FM_sh64-elf/src/gcc-mainline/libgcc/libgcc2.c: In 
> function '__powisf2':
>     /scratch/tschwing/FM_sh64-elf/src/gcc-mainline/libgcc/libgcc2.c:1779:1: 
> error: unrecognizable insn:
>     (insn 10 9 11 3 (set (reg:SI 162 [ D.2769 ])
>             (abs:SI (reg/v:SI 168 [ m ]))) 
> /scratch/tschwing/FM_sh64-elf/src/gcc-mainline/libgcc/libgcc2.c:1770 -1
>          (nil))
>     /scratch/tschwing/FM_sh64-elf/src/gcc-mainline/libgcc/libgcc2.c:1779:1: 
> internal compiler error: in extract_insn, at recog.c:2123

BTW, I have a patch below which restores sh64-elf build on trunk.
The hunks for sh_dwarf_register_span and abssi2 are almost obvious.
Those for sh_register_move_cost and CASE_USE_BIT_TESTS would be
suspicious, though.

Regards,
        kaz
--
diff -up ORIG/trunk/gcc/config/sh/sh.c trunk/gcc/config/sh/sh.c
--- ORIG/trunk/gcc/config/sh/sh.c       2011-12-30 09:22:01.000000000 +0900
+++ trunk/gcc/config/sh/sh.c    2012-02-23 21:23:44.000000000 +0900
@@ -8133,10 +8133,8 @@ sh_dwarf_register_span (rtx reg)
   return
     gen_rtx_PARALLEL (VOIDmode,
                      gen_rtvec (2,
-                                gen_rtx_REG (SFmode,
-                                             DBX_REGISTER_NUMBER (regno+1)),
-                                gen_rtx_REG (SFmode,
-                                             DBX_REGISTER_NUMBER (regno))));
+                                gen_rtx_REG (SFmode, regno + 1),
+                                gen_rtx_REG (SFmode, regno)));
 }
 
 static enum machine_mode
@@ -11499,7 +11497,7 @@ sh_register_move_cost (enum machine_mode
        && REGCLASS_HAS_GENERAL_REG (srcclass))
       || (REGCLASS_HAS_GENERAL_REG (dstclass)
          && REGCLASS_HAS_FP_REG (srcclass)))
-    return ((TARGET_SHMEDIA ? 4 : TARGET_FMOVD ? 8 : 12)
+    return (((TARGET_SHMEDIA ? 4 : TARGET_FMOVD ? 8 : 12) + 64)
            * ((GET_MODE_SIZE (mode) + 7) / 8U));
 
   if ((dstclass == FPUL_REGS
diff -up ORIG/trunk/gcc/config/sh/sh.h trunk/gcc/config/sh/sh.h
--- ORIG/trunk/gcc/config/sh/sh.h       2011-12-30 09:22:01.000000000 +0900
+++ trunk/gcc/config/sh/sh.h    2012-02-23 20:54:23.000000000 +0900
@@ -2435,6 +2435,10 @@ extern int current_function_interrupt;
 #define MD_CAN_REDIRECT_BRANCH(INSN, SEQ) \
   sh_can_redirect_branch ((INSN), (SEQ))
 
+#define CASE_USE_BIT_TESTS  (!TARGET_SHMEDIA \
+                            && (optab_handler (ashl_optab, word_mode) \
+                                != CODE_FOR_nothing))
+
 #define DWARF_FRAME_RETURN_COLUMN \
   (TARGET_SH5 ? DWARF_FRAME_REGNUM (PR_MEDIA_REG) : DWARF_FRAME_REGNUM 
(PR_REG))
 
diff -up ORIG/trunk/gcc/config/sh/sh.md trunk/gcc/config/sh/sh.md
--- ORIG/trunk/gcc/config/sh/sh.md      2012-02-23 15:20:01.000000000 +0900
+++ trunk/gcc/config/sh/sh.md   2012-02-23 15:20:29.000000000 +0900
@@ -4464,7 +4464,7 @@ label:
   [(set (match_operand:SI 0 "arith_reg_dest" "")
        (abs:SI (match_operand:SI 1 "arith_reg_operand" "")))
    (clobber (reg:SI T_REG))]
-  ""
+  "TARGET_SH1"
   "")
 
 (define_insn_and_split "*abssi2"

Reply via email to