public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "marekm at amelek dot gda dot pl" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/18251] unable to find a register to spill in class `POINTER_REGS'
Date: Sun, 13 Mar 2005 10:11:00 -0000	[thread overview]
Message-ID: <20050313101102.15518.qmail@sourceware.org> (raw)
In-Reply-To: <20041031125117.18251.ralf_corsepius@rtems.org>


------- Additional Comments From marekm at amelek dot gda dot pl  2005-03-13 10:10 -------
Subject: Re:  unable to find a register to spill in class `POINTER_REGS'

On Sun, Mar 13, 2005 at 02:44:51AM -0000, andrewhutchinson at cox dot net wrote:

> And with oxffff is wrong. As is trying to handle the variable count 
> case. That is fixing something that is not broke.

Does this look OK?  Now "movmemhi" will only handle positive constant
counts, and FAIL for the other cases (zero, negative or variable) to
let GCC handle them by itself.

Hopefully this is the final version, committed to mainline - 4.0 and
3.4 will follow soon if there are no problems, please test.

Thanks,
Marek

;; move string (like memcpy)
;; implement as RTL loop

(define_expand "movmemhi"
  [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
          (match_operand:BLK 1 "memory_operand" ""))
          (use (match_operand:HI 2 "const_int_operand" ""))
          (use (match_operand:HI 3 "const_int_operand" ""))])]
  ""
  "{
  int prob;
  HOST_WIDE_INT count;
  enum machine_mode mode;
  rtx label = gen_label_rtx ();
  rtx loop_reg;
  rtx jump;

  /* Copy pointers into new psuedos - they will be changed.  */
  rtx addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
  rtx addr1 = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));

  /* Create rtx for tmp register - we use this as scratch.  */
  rtx tmp_reg_rtx  = gen_rtx_REG (QImode, TMP_REGNO);

  if (GET_CODE (operands[2]) != CONST_INT)
    FAIL;

  count = INTVAL (operands[2]);
  if (count <= 0)
    FAIL;

  /* Work out branch probability for latter use.  */
  prob = REG_BR_PROB_BASE - REG_BR_PROB_BASE / count;

  /* See if constant fit 8 bits.  */
  mode = (count < 0x100) ? QImode : HImode;
  /* Create loop counter register.  */
  loop_reg = copy_to_mode_reg (mode, gen_int_mode (count, mode));

  /* Now create RTL code for move loop.  */
  /* Label at top of loop.  */
  emit_label (label);

  /* Move one byte into scratch and inc pointer.  */
  emit_move_insn (tmp_reg_rtx, gen_rtx_MEM (QImode, addr1));
  emit_move_insn (addr1, gen_rtx_PLUS (Pmode, addr1, const1_rtx));

  /* Move to mem and inc pointer.  */
  emit_move_insn (gen_rtx_MEM (QImode, addr0), tmp_reg_rtx);
  emit_move_insn (addr0, gen_rtx_PLUS (Pmode, addr0, const1_rtx));

  /* Decrement count.  */
  emit_move_insn (loop_reg, gen_rtx_PLUS (mode, loop_reg, constm1_rtx));

  /* Compare with zero and jump if not equal. */
  emit_cmp_and_jump_insns (loop_reg, const0_rtx, NE, NULL_RTX, mode, 1,
                           label);
  /* Set jump probability based on loop count.  */
  jump = get_last_insn ();
  REG_NOTES (jump) = gen_rtx_EXPR_LIST (REG_BR_PROB,
                    GEN_INT (prob),
                    REG_NOTES (jump));
  DONE;
}")



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18251


  parent reply	other threads:[~2005-03-13 10:11 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-31 12:51 [Bug target/18251] New: " ralf_corsepius at rtems dot org
2004-10-31 12:53 ` [Bug target/18251] " ralf_corsepius at rtems dot org
2004-10-31 12:54 ` ralf_corsepius at rtems dot org
2004-10-31 14:47 ` pinskia at gcc dot gnu dot org
2005-02-08 19:17 ` pinskia at gcc dot gnu dot org
2005-02-10  0:35 ` bjoern dot m dot haase at web dot de
2005-02-10  1:16 ` bjoern dot m dot haase at web dot de
2005-02-12 16:56 ` andrewhutchinson at cox dot net
2005-02-14  0:04 ` giovannibajo at libero dot it
2005-02-22 16:04 ` dieterbmeier at yahoo dot com
2005-02-22 17:13 ` andrewhutchinson at cox dot net
2005-02-22 17:25 ` ericw at evcohs dot com
2005-03-05  9:33 ` dieterbmeier at yahoo dot com
2005-03-10 20:50 ` joel at gcc dot gnu dot org
2005-03-10 21:30 ` ericw at evcohs dot com
2005-03-12 20:39 ` marekm at amelek dot gda dot pl
2005-03-12 21:20 ` andrewhutchinson at cox dot net
2005-03-13  0:31 ` marekm at amelek dot gda dot pl
2005-03-13  1:20 ` andrewhutchinson at cox dot net
2005-03-13  2:07 ` schlie at comcast dot net
2005-03-13  2:44 ` andrewhutchinson at cox dot net
2005-03-13  3:39 ` schlie at comcast dot net
2005-03-13  4:05 ` andrewhutchinson at cox dot net
2005-03-13  4:18 ` schlie at comcast dot net
2005-03-13 10:10 ` cvs-commit at gcc dot gnu dot org
2005-03-13 10:11 ` marekm at amelek dot gda dot pl [this message]
2005-03-19 15:45 ` cvs-commit at gcc dot gnu dot org
2005-03-19 15:46 ` cvs-commit at gcc dot gnu dot org
2005-04-22 16:10 ` eisvogel at seitics dot de
     [not found] <bug-18251-8160@http.gcc.gnu.org/bugzilla/>
2005-12-05 18:53 ` berndtrog at yahoo dot com
2007-04-29  6:00 ` j at uriah dot heep dot sax dot de
2007-05-02 13:07 ` ralf_corsepius at rtems dot org
2007-05-02 13:16 ` ralf_corsepius at rtems dot org
2007-05-30 20:55 ` eweddington at cso dot atmel dot com
2007-05-30 20:59 ` eweddington at cso dot atmel dot com
2007-08-29 10:01 ` sdepagnier at avidyne dot com
2007-08-29 18:06 ` eweddington at cso dot atmel dot com
2008-03-14 16:39 ` rguenth at gcc dot gnu dot org
     [not found] <bug-18251-4@http.gcc.gnu.org/bugzilla/>
2014-02-16 13:14 ` jackie.rosen at hushmail dot com
2021-11-05 23:18 ` timturnerc at yahoo dot com

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=20050313101102.15518.qmail@sourceware.org \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@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).