public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Paulo J. Matos" <pocmatos@gmail.com>
To: gcc@gcc.gnu.org
Subject: splitting add instructions
Date: Mon, 18 Jul 2011 16:49:00 -0000	[thread overview]
Message-ID: <j01hrs$9ra$1@dough.gmane.org> (raw)

Hello,

I am trying to size-optimise one of our instructions. That's addhi3. 
HImode is 32 bits and QImode is 16bits, which is what our processor 
instructions work with.

So generally an addhi3 looks like:
(define_insn "addhi3"
    [(set (match_operand:HI 0 "nonimmediate_operand" "=c")
          (plus:HI (match_operand:HI 1 "general_operand" "%0")
                   (match_operand:HI 2 "general_operand" "cwmi")))]
    ""
    "add  %b0,%b2\;addc %t0,%t2")

Where the format specifiers b and t choose the top and bottom 16 bits of 
each operand. add is a 16bit addition operand and addc takes carry flag 
into consideration. Now, there are a lot of simple manipulations that 
can be made if I release GCC from always outputting these two 
instructions together. However, the problem is expanding an addhi3 into 
two QImode add insn (which look the same), one of each outputs addc 
instead of add.

I thought about using attributes but I am very unsure that it works or 
even if it is the way to go.

The problem is, if addhi3 expands into two insn:
(define_insn "addqi3"
    [(set (match_operand:HI 0 "nonimmediate_operand" "=c")
          (plus:HI (match_operand:HI 1 "general_operand" "%0")
                   (match_operand:HI 2 "general_operand" "cwmi")))]
    "get_attr_CARRY(insn) == 0"
    "add  %b0,%b2")

(define_insn "addqi3_carry"
    [(set (match_operand:HI 0 "nonimmediate_operand" "=c")
          (plus:HI (match_operand:HI 1 "general_operand" "%0")
                   (match_operand:HI 2 "general_operand" "cwmi")))]
    "get_attr_CARRY(insn) == 1"
    "addc %t0,%t2")

_One_ of the problems with this is that if GCC sees that op2 is 0, it 
will remove the insn because it will see: R0 = R0 + 0. However, it can't 
do this in this specific case because the plus is actually also adding 
the carry flag.

Any suggestions on how to deal with this situation?

Cheers,
--

PMatos

             reply	other threads:[~2011-07-18 15:01 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-18 16:49 Paulo J. Matos [this message]
2011-07-18 16:59 ` Richard Henderson
2011-07-18 17:31   ` Paul Koning
2011-07-18 21:20     ` Richard Henderson
2011-07-19  8:27       ` Paulo J. Matos
2011-07-19 10:21         ` Paulo J. Matos
2011-07-19 15:42           ` Richard Henderson
2011-07-19 15:58             ` Paulo J. Matos
2011-07-19 16:08             ` Paulo J. Matos
2011-07-19 16:43               ` Richard Henderson
2011-07-19 12:57         ` Paul Koning
2011-07-19  8:30   ` Paulo J. Matos
2011-07-19 10:30   ` Paulo J. Matos
2011-07-19 10:52     ` Paulo J. Matos
2011-07-19 15:06   ` Paulo J. Matos
2011-07-19 15:09     ` DJ Delorie
2011-07-19 15:21       ` Paulo J. Matos
2011-07-19 15:42         ` Richard Henderson
2011-07-19 15:42           ` Paulo J. Matos
2011-07-18 17:29 ` Ian Lance Taylor
2011-07-19  8:49   ` Paulo J. Matos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='j01hrs$9ra$1@dough.gmane.org' \
    --to=pocmatos@gmail.com \
    --cc=gcc@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).