[gnu.g++.bug] GNU C++ 1.36.2 test release

tiemann@arkesden.eng.sun.com (Michael Tiemann) (11/28/89)

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

schmidt@zola.ics.uci.edu (Doug Schmidt) (11/28/89)

In article <8911271938.AA22115@arkesden.sun.com>, tiemann@arkesden (Michael Tiemann) writes:
>interviews.stanford.edu:~ftp/g++.ytar.Z.  

Actually, ~ftp/pub/g++.ytar.Z!

Doug
--
----------------------------------------
"The fundamental principle of science, the definition almost, is this:
the sole test of the validity of any idea is experiment." -- R. P. Feynman