Path: 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 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