This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


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

Re: m68k/regclass/regmove fun



Another couple of fp tweaks I tried on 68k were:

- Allowing !*r as a source operand for all DF & XF
operations in the (moto) fpu.  I think we'll still
get DF & XF (!) operands in a/d regs, e.g. because the
ABI might require DF to be returned in d0:d1.  By allowing
!*r as a source operand, we can lose the move from the stack
to the Fp reg - the pop can be folded into the operation.
Not sure if this would have helped daxpy though.

- Allowing DF/XF constants which can be *exactly* represented
in single precision as immediate operands, in single precision,
rather than outputing them into the constant pool as double
or extended values.  Had some tweaks to this to make the right
choices on 68881/68882, which have constant roms.

- Adding combiner patterns for operations which extend their
operands.  E.g. 68040 can add an "rmf" SFmode operand
into a DFmode reg, with a DFmode result. 

John.




Jeffrey A Law wrote:
> 
[...]
> 
>         * m68k.md (movdf): Hide GPR sources & destinations from regclass.
> 
> Index: m68k.md
> ===================================================================
> RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/m68k/m68k.md,v
> retrieving revision 1.26
> diff -c -3 -p -r1.26 m68k.md
> *** m68k.md     1999/01/27 01:43:08     1.26
> --- m68k.md     1999/03/29 10:17:04
> ***************
> *** 1147,1154 ****
>     "")
> 
>   (define_insn ""
> !   [(set (match_operand:DF 0 "general_operand" "=rm,rf,rf,&rof<>,y,rm,x,!x,!rm")
> !       (match_operand:DF 1 "general_operand" "rf,m,0,rofE<>,rmE,y,xH,rm,x"))]
>   ;  [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>")
>   ;     (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))]
>     "!TARGET_5200"
> --- 1147,1156 ----
>     "")
> 
>   (define_insn ""
> !   [(set (match_operand:DF 0 "general_operand"
> !                               "=*rm,*rf,*rf,&*rof<>,y,*rm,x,!x,!*rm")
> !       (match_operand:DF 1 "general_operand"
> !                               "*rf,m,0,*rofE<>,*rmE,y,xH,*rm,x"))]
>   ;  [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>")
>   ;     (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))]
>     "!TARGET_5200"


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