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: 2.8 gcc on m68k


In article <19980227044641.29015.qmail.cygnus.crossgcc@ragnarok.mlb.dmt.csiro.au>,
Robin Kirkham <Robin.Kirkham@mlb.dmt.csiro.au> wrote:
>
>Someone said (I've lost the original):
>
>> > I noticed that a particular set of operations was slower in the new 2.8
>> > compiler.  Does anybody know what could be done to get back the 2.7.2.1
>> > speed, and still have the 68060 support?
>> >
>> > It appears that in general
>> > move rX(nn), rX(mm)
>> > has been replaced with
>> > move rX(nn), rY
>> > move rY, rX(mm)
>> 

I have looked into this problem.  It has nothing to do with the coldfire
support.  It stems from a change to the machine independent part of the
compiler with how it handles some kinds of structures.  As a result of this,
the compiler is now treating this particular structure as if it were a long
long instead of treating it as if it were an 8 byte block of memory.  We end
up with worse code because of an inefficiency in the m68k long long support.

I am still thinking about how best to solve the problem, but I have a quick
hack to make it go away.

Thu Feb 26 15:20:16 1998  Jim Wilson  <wilson@cygnus.com>

	* m68k.md (movdi): Add o/o alternative.

Index: m68k.md
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/m68k/m68k.md,v
retrieving revision 1.5
diff -p -r1.5 m68k.md
*** m68k.md	1997/11/02 21:18:40	1.5
--- m68k.md	1998/02/26 23:20:08
***************
*** 1284,1291 ****
  ;; movdi can apply to fp regs in some cases
  (define_insn ""
    ;; Let's see if it really still needs to handle fp regs, and, if so, why.
!   [(set (match_operand:DI 0 "general_operand" "=rm,r,&ro<>,y,rm,!*x,!rm")
! 	(match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))]
  ;  [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
  ;	(match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))]
  ;  [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f")
--- 1284,1291 ----
  ;; movdi can apply to fp regs in some cases
  (define_insn ""
    ;; Let's see if it really still needs to handle fp regs, and, if so, why.
!   [(set (match_operand:DI 0 "general_operand" "=rm,r,&ro<>,y,rm,!*x,!rm,o")
! 	(match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x,o"))]
  ;  [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
  ;	(match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))]
  ;  [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f")