Fix gv for long longs
commitf45654ba4541f5ee1ae1c5d3a02d48eab547991c
authorDaniel Glöckner <daniel-gl@gmx.net>
Fri, 5 Sep 2008 19:08:48 +0000 (5 21:08 +0200)
committerKirill Smelkov <kirr@landau.phys.spbu.ru>
Sat, 6 Sep 2008 08:54:29 +0000 (6 12:54 +0400)
tree43785caa9cc75b496297464b6cc69e86da2bd362
parent0e392fadb996d5d5d141b91f3cbfa52460870380
Fix gv for long longs

long long a();
long long b() {
  return a();
}

At the end of b there will be some useless register shuffling.
This is because return wants to have the result of a in REG_IRET.
gv checks if this is the case for BOTH registers of the long long.
After this test it uses REG_LRET for the second register if the
first is supposed to be REG_IRET. In other cases it uses RC_INT.

The patch compares the second register against the class it will
have in the end instead of the register class the first register
will have.

At this point I would like to remind those who pick up the patches
that there are two other mails by me with uncommitted fixes:
http://lists.gnu.org/archive/html/tinycc-devel/2003-10/msg00044.html
http://lists.gnu.org/archive/html/tinycc-devel/2008-08/msg00007.html

  Daniel
tcc.c