[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [patch] m68k extendqidi2 fix



Richard Zidlicky writes:
> Hi,
> 
> the problem has been already discussed some time
> ago "upstream", now ocatve triggered the bug so
> it seems the fix should be backported to 3.3
> 
> octave problem
>   http://lists.debian.org/debian-68k/2005/02/msg00049.html

that message has another (.extbf) patch in it.

> gcc discussion
>   http://gcc.gnu.org/ml/gcc/2004-03/msg00940.html
>   http://gcc.gnu.org/ml/gcc/2004-03/msg01007.html
>   http://gcc.gnu.org/ml/gcc/2004-03/msg01011.html
> 
> Attached patches, one per 3.3 and 3.4. I am leaving
> tomorrow so the patches are essentially untested
> although I have used very similar patch for 3.4 
> since almost a year.

I'm applying the patch for 3.4 now, debian-m68k, should the patch
applied without testing to 3.3 as well? 

	Matthias

> --- gcc-3.3.1/gcc/config/m68k/m68k.md.rz	Wed Mar  2 00:49:35 2005
> +++ gcc-3.3.1/gcc/config/m68k/m68k.md	Wed Mar  2 01:06:29 2005
> @@ -1750,11 +1750,20 @@
>    "*
>  {
>    CC_STATUS_INIT;
> -  operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
> -  if (TARGET_68020 || TARGET_5200)
> -    return \"move%.b %1,%2\;extb%.l %2\;smi %0\;extb%.l %0\";
> +  if (ADDRESS_REG_P(operands[1]))
> +    {
> +      if (TARGET_68020 || TARGET_5200)
> +        return \"move%.w %1,%R0\;extb%.l %R0\;smi %0\;extb%.l %0\";
> +      else
> +        return \"move%.w %1,%R0\;ext%.w %R0\;ext%.l %R0\;move%.l %R0,%0\;smi %0\";
> +    }
>    else
> -    return \"move%.b %1,%2\;ext%.w %0\;ext%.l %2\;move%.l %2,%0\;smi %0\";
> +    {
> +      if (TARGET_68020 || TARGET_5200)
> +        return \"move%.b %1,%R0\;extb%.l %R0\;smi %0\;extb%.l %0\";
> +      else
> +        return \"move%.b %1,%R0\;ext%.w %R0\;ext%.l %R0\;move%.l %R0,%0\;smi %0\";
> +    }
>  }")
>  
>  (define_insn "extendhidi2"
> --- gcc-3.4-20040218/gcc/config/m68k/m68k.md.rz	Wed Mar  2 00:17:11 2005
> +++ gcc-3.4-20040218/gcc/config/m68k/m68k.md	Wed Mar  2 00:21:36 2005
> @@ -1454,11 +1454,20 @@
>    ""
>  {
>    CC_STATUS_INIT;
> -  operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
> -  if (TARGET_68020 || TARGET_COLDFIRE)
> -    return "move%.b %1,%2\;extb%.l %2\;smi %0\;extb%.l %0";
> +  if (ADDRESS_REG_P(operands[1]))
> +    {
> +      if (TARGET_68020 || TARGET_COLDFIRE)
> +        return "move%.w %1,%R0\;extb%.l %R0\;smi %0\;extb%.l %0";
> +      else
> +        return "move%.w %1,%R0\;ext%.w %R0\;ext%.l %R0\;move%.l %R0,%0\;smi %0";
> +    }
>    else
> -    return "move%.b %1,%2\;ext%.w %0\;ext%.l %2\;move%.l %2,%0\;smi %0";
> +    {
> +      if (TARGET_68020 || TARGET_COLDFIRE)
> +        return "move%.b %1,%R0\;extb%.l %R0\;smi %0\;extb%.l %0";
> +      else
> +        return "move%.b %1,%R0\;ext%.w %R0\;ext%.l %R0\;move%.l %R0,%0\;smi %0";
> +    }
>  })
>  
>  (define_insn "extendhidi2"



Reply to: