public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Andy Walker <ja_walker@earthlink.net>
To: Michael S. Zick <mszick@goquest.com>, Tom Lord <lord@emf.net>,
	dewar@gnat.com
Cc: gcc@gcc.gnu.org
Subject: Re: An unusual Performance approach using Synthetic registers
Date: Tue, 07 Jan 2003 06:04:00 -0000	[thread overview]
Message-ID: <E18Vmla-0002Oa-00@pintail.mail.pas.earthlink.net> (raw)
In-Reply-To: <03010615591301.00737@localhost.localdomain>

On Monday 06 January 2003 03:59 pm, Michael S. Zick wrote:
> On Monday 06 January 2003 01:47 am, Andy Walker wrote:
> > The list of instructions that might operate on a Synthetic register is
> > short: mov, add, sub, neg, and, or, xor, ror, rol, ashl, ashr, and lshr
> > (sp?).  In addition, a synthetic register may be a source for a mul or
> > divmod.  For this short list of instructions, a Synthetic register can be
> > a source or destination, in conjunction with a register, or it may be a
> > destination in conjunction with an immediate value.
>
> Andy,
>
> Is it possible to define a two-ouput instruction?
> If so, add XCHG to your list, short, fast, works in any pipeline, and
> can substitute for a pair of moves. (Three, if you have to supply
> your own temporary.)
>
> Mike

Yes, it is possible to define a two-output instruction in the machine 
description.

XCHG tickled my fancy, no question.  It could be used as a SWAP, which is an 
instruction type in the i386 machine description.  It could also, and at the 
same time, be used as a preferred alternative when implementing a MOV 
instruction.  The very strong advantage from my point of view is severly 
reducing the need to clobber a natural register, then use the register as an 
intermediary, because there are no "memory" to "memory" instructions.  

I question whether or not your statement is true, that XCHG works in any 
pipeline.  Three things generate my pessimism. 

First, XCHG is what I think of as an Operating System instruction.  It is 
quite valuable because the exchange can be limited to a single process on a 
single processor in a multiprocessor system, in conjunction with the locking 
process.  It is one of the very reliable ways to implement semaphores.  

The other side of this coin is that the real memory may require an access, to 
check for someone else's lock.  If so, I cannot imagine anything other than a 
massive pipeline stall happening.  

Second, even though XCHG may be used between a register and memory, it is not 
implemented in the SWAP machine description.  Only register to register SWAPs 
are implemented.  That caught my attention when I saw it.  

Because it is not in SWAP, or anywhere else, it cannot be used by Reload.  
That instruction alone would have reduced much of the burden caused by 
Reload.  A lot of very bright people have walked away from this handy tool, 
as if it had the plague.  The developers here may not be able to use a 
crystal ball, but in every other respect, they are really wizards.

Third, I recall reading a posting on this list in the last year or so where 
one of the contributors was explaining why a particular instruction was never 
used, observing that using the memory version of the instruction caused 
horrible pipeline stalls.  

If I am wrong about this, PLEASE, enlighten me.  I would love to be able to 
use the instruction.

Andy 

  reply	other threads:[~2003-01-07  6:02 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-05 14:08 Robert Dewar
2003-01-05 16:50 ` Michael S. Zick
2003-01-06 19:42 ` Tom Lord
2003-01-06  8:06   ` Andy Walker
2003-01-06 22:45     ` Michael S. Zick
2003-01-07  6:04       ` Andy Walker [this message]
  -- strict thread matches above, loose matches on Subject: below --
2003-01-08 12:27 Robert Dewar
2003-01-08 12:13 Robert Dewar
2003-01-08 12:21 ` Lars Segerlund
2003-01-08  5:36 Robert Dewar
2003-01-07 21:01 Marcel Cox
2003-01-07 22:53 ` tm_gccmail
2003-01-08  1:05   ` tm_gccmail
2003-01-08  1:22   ` tm_gccmail
2003-01-08 11:45   ` Marcel Cox
2003-01-08 17:29   ` Marcel Cox
2003-01-07 17:19 Robert Dewar
2003-01-07 15:17 Robert Dewar
2003-01-07 17:02 ` Michael S. Zick
2003-01-08  6:56   ` Andy Walker
2003-01-08 12:14     ` Michael S. Zick
2003-01-07 12:32 Robert Dewar
2003-01-07 19:03 ` tm_gccmail
2003-01-07 19:20   ` tm_gccmail
2003-01-08  7:52     ` Andy Walker
2003-01-08 19:29       ` Michael S. Zick
2003-01-08 20:10         ` Michael S. Zick
2003-01-08 20:44         ` tm_gccmail
2003-01-08 21:34           ` Michael S. Zick
2003-01-08 22:05             ` tm_gccmail
2003-01-08  6:08 ` Andy Walker
2003-01-07 12:08 Robert Dewar
2003-01-07 12:10 ` Momchil Velikov
2003-01-06 20:59 Robert Dewar
2003-01-07  5:29 ` Andy Walker
2003-01-07 21:49   ` Marcel Cox
2003-01-07 21:55     ` Branko Čibej
2003-01-07 21:55       ` Marcel Cox
2003-01-08 17:32 ` Tom Lord
2003-01-05 15:47 Robert Dewar
2003-01-05 22:14 ` Tom Lord
2003-01-05 14:05 Robert Dewar
2003-01-06 19:42 ` Tom Lord
2003-01-06  6:49   ` Andy Walker
2003-01-05 13:13 Robert Dewar
2003-01-06  4:40 ` Andy Walker
2003-01-06 16:46   ` Michael S. Zick
2003-01-07  5:20     ` Andy Walker
2003-01-06 19:42 ` Tom Lord
2003-01-06  6:39   ` Andy Walker
2003-01-06  6:50     ` Daniel Berlin
2003-01-06  9:00       ` Andy Walker
2003-01-05 11:41 Robert Dewar
2003-01-05 16:30 ` Michael S. Zick
2003-01-06  4:53 ` Andy Walker
2003-01-06 19:50 ` Tom Lord
2003-01-06  6:29   ` Andy Walker
2003-01-06 21:53   ` Michael S. Zick
2003-01-07  6:02     ` Andy Walker
2003-01-07 17:41       ` Janis Johnson
2003-01-04 18:12 Robert Dewar
2003-01-04 14:50 Robert Dewar
2003-01-04 18:00 ` Denis Chertykov
2003-01-05  5:53   ` Andy Walker
2003-01-05  5:43 ` Andy Walker
2002-12-27  5:47 Chris Lattner
2002-12-29  0:35 ` Andy Walker
2002-12-29  5:58   ` Chris Lattner
2002-12-29  6:26     ` Alexandre Oliva
2002-12-29 12:04     ` Andy Walker
2002-12-29 13:58       ` Daniel Berlin
2002-12-29 22:41         ` Andy Walker
2002-12-29 15:50       ` Diego Novillo
2002-12-29 22:44         ` Andy Walker
2002-12-30  1:30           ` Zack Weinberg
2002-12-30  2:57             ` Andy Walker
2002-12-30  7:52             ` Michael S. Zick
2002-12-29  7:44   ` Daniel Egger
2002-12-29 12:10     ` Andy Walker
2002-12-30 20:58       ` James Mansion
2002-12-31  3:56         ` Michael S. Zick
2002-12-30  1:09     ` Michael S. Zick
2002-12-30  7:27       ` Daniel Egger
2002-12-30 10:25         ` Michael S. Zick
2002-12-30 20:50         ` Daniel Berlin

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=E18Vmla-0002Oa-00@pintail.mail.pas.earthlink.net \
    --to=ja_walker@earthlink.net \
    --cc=dewar@gnat.com \
    --cc=gcc@gcc.gnu.org \
    --cc=lord@emf.net \
    --cc=mszick@goquest.com \
    /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).