🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.g++.bug
Article #626

GNU C++ 1.36.2 test release

#626
From: Michael Tiemann
Date: Mon, 27 Nov 1989 19:38
137 lines
5265 bytes
It looks like its time to do another test release: lots of bugs are
being reported which I have already fixed.  There are still some bugs
I want to work on, but in the mean time, I might as well give people
the chance to try out what will be 1.36.2 or 1.37.0, whichever comes
sooner.

A change in the implementation of exception handling (don't ask me for
a paper yet--it's in progress, and will probably be available by
anonymous ftp when I have it done), required a smarter implementation
of inlining.  The version of inlining broke the 1.36 code generator
for the Sun4, but it is easily fixed with the following diffs (which
are going into 1.37).  Similar problems may bite similar code
generators.  If GNU C++ all of a sudden starts generating
unrecognizable insns, chances are your md file needs a fix similar to
the one given here.

    arkesden% diff -c2 config/sparc.md~ config/sparc.md
    *** config/sparc.md~	Fri Sep  1 17:46:40 1989
    --- config/sparc.md	Sat Nov 18 09:04:10 1989
    ***************
    *** 1011,1015 ****
	  return \"sll %1,0x10,%0\;srl %0,0x10,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     abort ();
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    --- 1011,1020 ----
	  return \"sll %1,0x10,%0\;srl %0,0x10,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     {
    !       operands[1] = gen_rtx (CONST_INT, VOIDmode,
    ! 			     INTVAL (operands[1]) & 0xffff);
    !       output_asm_insn (\"set %1,%0\", operands);
    !       return \"\";
    !     }
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    ***************
    *** 1032,1036 ****
	  return \"and %1,0xff,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     abort ();
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    --- 1037,1046 ----
	  return \"and %1,0xff,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     {
    !       operands[1] = gen_rtx (CONST_INT, VOIDmode,
    ! 			     INTVAL (operands[1]) & 0xff);
    !       output_asm_insn (\"set %1,%0\", operands);
    !       return \"\";
    !     }
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    ***************
    *** 1053,1057 ****
	  return \"and %1,0xff,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     abort ();
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    --- 1063,1072 ----
	  return \"and %1,0xff,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     {
    !       operands[1] = gen_rtx (CONST_INT, VOIDmode,
    ! 			     INTVAL (operands[1]) & 0xff);
    !       output_asm_insn (\"set %1,%0\", operands);
    !       return \"\";
    !     }
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    ***************
    *** 1078,1082 ****
	  return \"sll %1,0x10,%0\;sra %0,0x10,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     abort ();
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    --- 1093,1102 ----
	  return \"sll %1,0x10,%0\;sra %0,0x10,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     {
    !       int i = (short)INTVAL (operands[1]);
    !       operands[1] = gen_rtx (CONST_INT, VOIDmode, i);
    !       output_asm_insn (\"set %1,%0\", operands);
    !       return \"\";
    !     }
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    ***************
    *** 1099,1103 ****
	  return \"sll %1,0x18,%0\;sra %0,0x18,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     abort ();
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    --- 1119,1128 ----
	  return \"sll %1,0x18,%0\;sra %0,0x18,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     {
    !       int i = (char)INTVAL (operands[1]);
    !       operands[1] = gen_rtx (CONST_INT, VOIDmode, i);
    !       output_asm_insn (\"set %1,%0\", operands);
    !       return \"\";
    !     }
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    ***************
    *** 1120,1124 ****
	  return \"sll %1,0x18,%0\;sra %0,0x18,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     abort ();
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    --- 1145,1154 ----
	  return \"sll %1,0x18,%0\;sra %0,0x18,%0\";
	if (GET_CODE (operands[1]) == CONST_INT)
    !     {
    !       int i = (char)INTVAL (operands[1]);
    !       operands[1] = gen_rtx (CONST_INT, VOIDmode, i);
    !       output_asm_insn (\"set %1,%0\", operands);
    !       return \"\";
    !     }
	if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
	  {
    arkesden% 

Since labrea is down, I am making these diffs available from
interviews.stanford.edu:~ftp/g++.ytar.Z.  Note that this is where you
can get the InterViews 2.6 prerelease if you are interested, from the
file iv-snapshot.tar.Z.  I'm running it right now.

Have at it,

Michael
Technical Details
Message-ID: <8911271938.AA22115@arkesden.sun.com>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!arkesden.eng.sun.com!tiemann

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!arkesden.eng.sun.com!tiemann
From: tiemann@arkesden.eng.sun.com (Michael Tiemann)
Newsgroups: gnu.g++.bug
Subject: GNU C++ 1.36.2 test release
Message-ID: <8911271938.AA22115@arkesden.sun.com>
Date: 27 Nov 89 19:38:22 GMT
Sender: daemon@tut.cis.ohio-state.edu
Reply-To: tiemann@sun.com
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 137