RE: [PATCH] [MIPS] Support microMIPS HI/QI moves

2013-05-01 Thread Maciej W. Rozycki
On Mon, 22 Apr 2013, Moore, Catherine wrote:

   Dumb question: what's the difference between all and * in the
  compression attribute?
 
 The port defines the compression and enabled attributes like this:
 
 (define_attr compression none,all,micromips
   (const_string none)) 
 
 (define_attr enabled no,yes
   (if_then_else (ior (eq_attr compression all,none)
  (and (eq_attr compression micromips)
   (match_test TARGET_MICROMIPS)))
 (const_string yes)
 (const_string no)))
 
 The all setting is used for register-to-register moves where the 
 alternative is compressed if compiling for micromips code or 
 uncompressed otherwise.
 
 The default (*) is none meaning this particular alternative will never 
 be compressed.

 Fair enough, thanks.  I find it a bit backwards with * being the usual 
glob character and therefore intuitively interpreted as all, but I can 
recognise the space saving this solution gives a benefit of.

  Maciej


Re: [PATCH] [MIPS] Support microMIPS HI/QI moves

2013-04-22 Thread Richard Sandiford
Moore, Catherine catherine_mo...@mentor.com writes:
 2013-04-01  Catherine Moore  c...@codesourcery.com

 * config/mips/mips.md (*movhi_internal, *movqi_internal): New
 operands.  Record compression.

OK, thanks.

Note that LBU and LHU also appear in *zero_extendSHORT:modeGPR:mode2,
*zero_extendqihi2 and *andmode3.

Richard


Re: [PATCH] [MIPS] Support microMIPS HI/QI moves

2013-04-22 Thread Maciej W. Rozycki
On Mon, 1 Apr 2013, Moore, Catherine wrote:

  (define_insn *movhi_internal
 -  [(set (match_operand:HI 0 nonimmediate_operand =d,d,d,m,*a,*d)
 -   (match_operand:HI 1 move_operand d,I,m,dJ,*d*J,*a))]
 +  [(set (match_operand:HI 0 nonimmediate_operand =d,!u,d,!u,d,ZU,m,*a,*d)
 +   (match_operand:HI 1 move_operand 
 d,J,I,ZU,m,!u,dJ,*d*J,*a))]
!TARGET_MIPS16
  (register_operand (operands[0], HImode)
 || reg_or_0_operand (operands[1], HImode))
{ return mips_output_move (operands[0], operands[1]); }
 -  [(set_attr move_type move,const,load,store,mtlo,mflo)
 +  [(set_attr move_type move,const,const,load,load,store,store,mtlo,mflo)
 +   (set_attr compression all,micromips,*,micromips,*,micromips,*,*,*)
 (set_attr mode HI)])

 Dumb question: what's the difference between all and * in the 
compression attribute?

  Maciej


RE: [PATCH] [MIPS] Support microMIPS HI/QI moves

2013-04-22 Thread Moore, Catherine

 -Original Message-
 From: Maciej W. Rozycki [mailto:ma...@codesourcery.com]
 Sent: Monday, April 22, 2013 5:09 PM
 To: Moore, Catherine
 Cc: rdsandif...@googlemail.com; gcc-patches@gcc.gnu.org
 Subject: Re: [PATCH] [MIPS] Support microMIPS HI/QI moves
 
 On Mon, 1 Apr 2013, Moore, Catherine wrote:
 
   (define_insn *movhi_internal
  -  [(set (match_operand:HI 0 nonimmediate_operand =d,d,d,m,*a,*d)
  -   (match_operand:HI 1 move_operand d,I,m,dJ,*d*J,*a))]
  +  [(set (match_operand:HI 0 nonimmediate_operand
 =d,!u,d,!u,d,ZU,m,*a,*d)
  +   (match_operand:HI 1 move_operand
 d,J,I,ZU,m,!u,dJ,*d*J,*a))]
 !TARGET_MIPS16
   (register_operand (operands[0], HImode)
  || reg_or_0_operand (operands[1], HImode))
 { return mips_output_move (operands[0], operands[1]); }
  -  [(set_attr move_type move,const,load,store,mtlo,mflo)
  +  [(set_attr move_type
 move,const,const,load,load,store,store,mtlo,mflo)
  +   (set_attr compression
  + all,micromips,*,micromips,*,micromips,*,*,*)
  (set_attr mode HI)])
 
  Dumb question: what's the difference between all and * in the
 compression attribute?
 
Hi Maciej, 

The port defines the compression and enabled attributes like this:

(define_attr compression none,all,micromips
  (const_string none)) 

(define_attr enabled no,yes
  (if_then_else (ior (eq_attr compression all,none)
 (and (eq_attr compression micromips)
  (match_test TARGET_MICROMIPS)))
(const_string yes)
(const_string no)))

The all setting is used for register-to-register moves where the alternative 
is compressed if compiling for micromips code or uncompressed otherwise.  
The default (*) is none meaning this particular alternative will never be 
compressed.
Catherine





[PATCH] [MIPS] Support microMIPS HI/QI moves

2013-04-01 Thread Moore, Catherine
2013-04-01  Catherine Moore  c...@codesourcery.com

* config/mips/mips.md (*movhi_internal, *movqi_internal): New
operands.  Record compression.

Index: mips.md
===
--- mips.md (revision 197114)
+++ mips.md (working copy)
@@ -4538,13 +4538,14 @@
 })

 (define_insn *movhi_internal
-  [(set (match_operand:HI 0 nonimmediate_operand =d,d,d,m,*a,*d)
-   (match_operand:HI 1 move_operand d,I,m,dJ,*d*J,*a))]
+  [(set (match_operand:HI 0 nonimmediate_operand =d,!u,d,!u,d,ZU,m,*a,*d)
+   (match_operand:HI 1 move_operand d,J,I,ZU,m,!u,dJ,*d*J,*a))]
   !TARGET_MIPS16
 (register_operand (operands[0], HImode)
|| reg_or_0_operand (operands[1], HImode))
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr move_type move,const,load,store,mtlo,mflo)
+  [(set_attr move_type move,const,const,load,load,store,store,mtlo,mflo)
+   (set_attr compression all,micromips,*,micromips,*,micromips,*,*,*)
(set_attr mode HI)])

 (define_insn *movhi_mips16
@@ -4613,13 +4614,14 @@
 })

 (define_insn *movqi_internal
-  [(set (match_operand:QI 0 nonimmediate_operand =d,d,d,m,*a,*d)
-   (match_operand:QI 1 move_operand d,I,m,dJ,*d*J,*a))]
+  [(set (match_operand:QI 0 nonimmediate_operand =d,!u,d,!u,d,ZV,m,*a,*d)
+   (match_operand:QI 1 move_operand d,J,I,ZW,m,!u,dJ,*d*J,*a))]
   !TARGET_MIPS16
 (register_operand (operands[0], QImode)
|| reg_or_0_operand (operands[1], QImode))
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr move_type move,const,load,store,mtlo,mflo)
+  [(set_attr move_type move,const,const,load,load,store,store,mtlo,mflo)
+   (set_attr compression all,micromips,*,micromips,*,micromips,*,*,*)
(set_attr mode QI)])

 (define_insn *movqi_mips16