This is the mail archive of the crossgcc@cygnus.com mailing list for the crossgcc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Coldfire bug in GCC


 Ok, I raised my hands and put a 'brute force' fix to the "shift a 64 bit
long long 8 bits to the left"-problem into my egcs-1.1.1 sources...

-------------- clip ------------------------
*** m68k.md.orig	Wed Nov 18 15:18:56 1998
--- m68k.md	Sat Jan 23 13:42:01 1999
***************
*** 4567,4573 ****
    if (INTVAL (operands[2]) == 1)
      return \"add%.l %1,%1\;addx%.l %0,%0\";
    else if (INTVAL (operands[2]) == 8)
!     return \"rol%.l %#8,%1\;rol%.l %#8,%0\;move%.b %1,%0\;clr%.b %1\";
    else if (INTVAL (operands[2]) == 16)
      return \"swap %1\;swap %0\;move%.w %1,%0\;clr%.w %1\";
    else if (INTVAL (operands[2]) == 48)
--- 4567,4581 ----
    if (INTVAL (operands[2]) == 1)
      return \"add%.l %1,%1\;addx%.l %0,%0\";
    else if (INTVAL (operands[2]) == 8)
!     {
!     if (!TARGET_5200)
!       return \"rol%.l %#8,%1\;rol%.l %#8,%0\;move%.b %1,%0\;clr%.b %1\";
!     else
!       return \"add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0\;
! 	add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0\;
! 	add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0\;
! 	add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0\";
!     }
    else if (INTVAL (operands[2]) == 16)
      return \"swap %1\;swap %0\;move%.w %1,%0\;clr%.w %1\";
    else if (INTVAL (operands[2]) == 48)
------ clip ----------------------------

 If someone has a more elegant solution, please introduce it... If taking a 
third register in use, this could be optimized, but I don't know how to do 
it...

<       rol.l #8,%d3
<       rol.l #8,%d2
<       move.b %d3,%d2
<       clr.b %d3
---
>       add.l %d3,%d3
>       addx.l %d2,%d2
>       add.l %d3,%d3
>       addx.l %d2,%d2
>
>       add.l %d3,%d3
>       addx.l %d2,%d2
>       add.l %d3,%d3
>       addx.l %d2,%d2
>
>       add.l %d3,%d3
>       addx.l %d2,%d2
>       add.l %d3,%d3
>       addx.l %d2,%d2
>
>       add.l %d3,%d3
>       addx.l %d2,%d2
>       add.l %d3,%d3
>       addx.l %d2,%d2

 Cheers, Kai
_______________________________________________
New CrossGCC FAQ: http://www.objsw.com/CrossGCC
_______________________________________________
To remove yourself from the crossgcc list, send
mail to crossgcc-request@cygnus.com with the
text 'unsubscribe' (without the quotes) in the
body of the message.