On 28/03/14 00:20, DJ Delorie wrote:
This is OK after 4.9 branches (i.e. stage1).  I suspect we could add
AX to the first alternative, although I don't know if it will get
used.  We could add HL to the second alternative to complete the
replacement of the 'r' constraint.

Yes, the missing AX in the first alternative came to me later too. HL is already in the second alternative ('T').

Looking at it again, it probably makes sense to change the third alternative to 'shrw %0,8'. It's the same length as mov x,a/clrb a but it's a cycle shorter. It also makes it more like the extendqihi2_real insn, which isn't especially important, but does mean there's a certain symmetry about it.

2014-03-28  Richard Hulme  <pepe...@yahoo.com>

    * config/rl78/rl78-real.md (zero_extendqihi2_real):
    Minor optimizations to use clrb instruction where possible,
    which is 1 byte shorter than 'mov'ing #0, and shrw, which
    is 1 cycle less than a mov/clrb sequence.

---
 gcc/config/rl78/rl78-real.md |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/gcc/config/rl78/rl78-real.md b/gcc/config/rl78/rl78-real.md
index 27ff60f..5d5c598 100644
--- a/gcc/config/rl78/rl78-real.md
+++ b/gcc/config/rl78/rl78-real.md
@@ -77,12 +77,14 @@
 ;;---------- Conversions ------------------------

 (define_insn "*zero_extendqihi2_real"
-  [(set (match_operand:HI                 0 "nonimmediate_operand" "=rv,A")
-       (zero_extend:HI (match_operand:QI 1 "general_operand" "0,a")))]
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=ABv,DT,A,B")
+       (zero_extend:HI (match_operand:QI 1 "general_operand" "0,0,a,b")))]
   "rl78_real_insns_ok ()"
   "@
+   clrb\t%Q0
    mov\t%Q0, #0
-   mov\tx, a \;mov\ta, #0"
+   shrw\t%0, 8
+   shrw\t%0, 8"
   )

 (define_insn "*extendqihi2_real"
--
1.7.9.5


Reply via email to