From gcc-patches-return-74817-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 08:52:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25272 invoked by alias); 1 Jan 2003 08:52:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25264 invoked from network); 1 Jan 2003 08:52:23 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 1 Jan 2003 08:52:23 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18Tebh-0002rE-00; Wed, 01 Jan 2003 08:52:09 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18Tebg-00031M-00; Wed, 01 Jan 2003 08:52:08 +0000 Date: Wed, 1 Jan 2003 08:52:05 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Neil Booth cc: Subject: Re: Update cp/.cvsignore In-Reply-To: <20021231221242.GA23223@daikokuya.co.uk> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Tue, 31 Dec 2002, Neil Booth wrote: > -parse.h > -parse.c > g++int.info* g++int.info* is obsolete long ago, the file should just be removed. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74818-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 10:03:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9260 invoked by alias); 1 Jan 2003 10:03:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9251 invoked from network); 1 Jan 2003 10:03:06 -0000 Received: from unknown (HELO smtp4.wanadoo.nl) (194.134.35.175) by 209.249.29.67 with SMTP; 1 Jan 2003 10:03:06 -0000 Received: from steven.lr-s.tudelft.nl (3eea1517.cable.wanadoo.nl [62.234.21.23]) by smtp4.wanadoo.nl (Postfix) with ESMTP id 22B693E84C for ; Wed, 1 Jan 2003 11:02:54 +0100 (CET) Subject: [wwwdocs] Mention new C++ parser on homepage and in gcc-3.4 changes page From: Steven Bosscher To: gcc-patches@gcc.gnu.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 01 Jan 2003 11:03:54 +0100 Message-Id: <1041415435.857.7.camel@steven> Mime-Version: 1.0 This announces the new C++ parser on the home page. Also updates gcc-3.4/changes.html. Greetz Steven Index: htdocs/index.html =================================================================== RCS file: /cvsroot/gcc/wwwdocs/htdocs/index.html,v retrieving revision 1.349 diff -c -r1.349 index.html *** htdocs/index.html 19 Dec 2002 16:29:52 -0000 1.349 --- htdocs/index.html 1 Jan 2003 09:57:59 -0000 *************** *** 82,87 **** --- 82,96 ----

News/Announcements

+
December 27, 2002
+
+ Mark Mitchell of CodeSourcery has contributed a + new, hand-crafted + recursive-descent C++ parser. The new parser is more standard + conforming and fixes many known bugs from the old YACC-derived + parser. +
+
December 4, 2002
Nathan Sidwell of CodeSourcery has contributed an implementation of Index: htdocs/gcc-3.4/changes.html =================================================================== RCS file: /cvsroot/gcc/wwwdocs/htdocs/gcc-3.4/changes.html,v retrieving revision 1.3 diff -c -r1.3 changes.html *** htdocs/gcc-3.4/changes.html 14 Dec 2002 06:15:57 -0000 1.3 --- htdocs/gcc-3.4/changes.html 1 Jan 2003 09:57:59 -0000 *************** *** 38,43 **** --- 38,50 ----

C++

    +
  • A hand-written recursive-descent C++ parser has replaced the + YACC-derived C++ parser from previous GCC releases. The new + parser contains much improved infrastructure needed for better + parsing of C++ source codes, handling of extensions, and clean + separation (where possible) between proper semantics analysis + and parsing. The new parser fixes many bugs that were found + in the old parser.

Objective-C

From gcc-patches-return-74819-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 11:19:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23154 invoked by alias); 1 Jan 2003 11:19:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23143 invoked from network); 1 Jan 2003 11:19:04 -0000 Received: from unknown (HELO smtp4.wanadoo.nl) (194.134.35.175) by 209.249.29.67 with SMTP; 1 Jan 2003 11:19:04 -0000 Received: from steven.lr-s.tudelft.nl (3eea1517.cable.wanadoo.nl [62.234.21.23]) by smtp4.wanadoo.nl (Postfix) with ESMTP id A6FF13EB96 for ; Wed, 1 Jan 2003 12:18:48 +0100 (CET) Subject: [C++ Patch] Replace "GNU CC" with "GCC" in copyright headers. From: Steven Bosscher To: gcc-patches@gcc.gnu.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 01 Jan 2003 12:19:49 +0100 Message-Id: <1041419989.896.19.camel@steven> Mime-Version: 1.0 OK, with some of the branches merged this seems like a good time to try again. This is for C++ only. Diffstat says: 29 files changed, 7 deletions and 248 modifications. Comment changes only, Note that some of the "GNU CC"s showed up in new files such as parser.c. Maybe the start of the new year is a good moment to update all your templates? :-) Greetz Steven 2002-12-31 Steven Bosscher * call.c, class.c, cp-lang.c, cp-tree.h, cvt.c, dump.c, error.c, except.c, expr.c friend.c, g++spec.c, init.c, lang-options.h, lang-specs.h, lex.c mangle.c, method.c, optimize.c, parser.c, pt.c, ptree.c, repo.c rtti.c, search.c, semantics.c, tree.c, typeck.c, typeck2.c: Replace "GNU CC" with "GCC" in the copyright header. * lex.h: parse.y is dead, so don't mention it. Also replace the copyright header with the default GNU copyright header. Index: call.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/call.c,v retrieving revision 1.347 diff -c -r1.347 call.c *** call.c 28 Dec 2002 08:03:38 -0000 1.347 --- call.c 1 Jan 2003 10:19:19 -0000 *************** *** 4,23 **** Contributed by Michael Tiemann (tiemann@cygnus.com) and modified by Brendan Kehoe (brendan@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,23 ---- Contributed by Michael Tiemann (tiemann@cygnus.com) and modified by Brendan Kehoe (brendan@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: class.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/class.c,v retrieving revision 1.506 diff -c -r1.506 class.c *** class.c 31 Dec 2002 19:43:14 -0000 1.506 --- class.c 1 Jan 2003 10:19:36 -0000 *************** *** 3,22 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: cp-lang.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/cp-lang.c,v retrieving revision 1.45 diff -c -r1.45 cp-lang.c *** cp-lang.c 29 Dec 2002 14:53:04 -0000 1.45 --- cp-lang.c 1 Jan 2003 10:19:37 -0000 *************** *** 2,21 **** Copyright 2001, 2002 Free Software Foundation, Inc. Contributed by Alexandre Oliva ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright 2001, 2002 Free Software Foundation, Inc. Contributed by Alexandre Oliva ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: cp-tree.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/cp-tree.h,v retrieving revision 1.792 diff -c -r1.792 cp-tree.h *** cp-tree.h 1 Jan 2003 03:16:14 -0000 1.792 --- cp-tree.h 1 Jan 2003 10:19:50 -0000 *************** *** 3,22 **** 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: cvt.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/cvt.c,v retrieving revision 1.129 diff -c -r1.129 cvt.c *** cvt.c 28 Dec 2002 14:38:37 -0000 1.129 --- cvt.c 1 Jan 2003 10:19:52 -0000 *************** *** 3,22 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: dump.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/dump.c,v retrieving revision 1.67 diff -c -r1.67 dump.c *** dump.c 30 Dec 2002 13:39:43 -0000 1.67 --- dump.c 1 Jan 2003 10:19:53 -0000 *************** *** 2,21 **** Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Mitchell ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Mitchell ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: error.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/error.c,v retrieving revision 1.194 diff -c -r1.194 error.c *** error.c 28 Dec 2002 08:03:40 -0000 1.194 --- error.c 1 Jan 2003 10:19:58 -0000 *************** *** 2,21 **** This code is non-reentrant. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- This code is non-reentrant. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: except.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/except.c,v retrieving revision 1.150 diff -c -r1.150 except.c *** except.c 16 Dec 2002 18:22:13 -0000 1.150 --- except.c 1 Jan 2003 10:20:00 -0000 *************** *** 5,24 **** Rewritten by Mike Stump , based upon an initial re-implementation courtesy Tad Hunt. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 5,24 ---- Rewritten by Mike Stump , based upon an initial re-implementation courtesy Tad Hunt. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: expr.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/expr.c,v retrieving revision 1.68 diff -c -r1.68 expr.c *** expr.c 28 Dec 2002 08:03:40 -0000 1.68 --- expr.c 1 Jan 2003 10:20:00 -0000 *************** *** 3,22 **** Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: friend.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/friend.c,v retrieving revision 1.79 diff -c -r1.79 friend.c *** friend.c 19 Dec 2002 15:11:27 -0000 1.79 --- friend.c 1 Jan 2003 10:20:01 -0000 *************** *** 1,20 **** /* Help friends in C++. Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Help friends in C++. Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: g++spec.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/g++spec.c,v retrieving revision 1.32 diff -c -r1.32 g++spec.c *** g++spec.c 16 Dec 2002 18:22:14 -0000 1.32 --- g++spec.c 1 Jan 2003 10:20:01 -0000 *************** *** 1,20 **** /* Specific flags and argument handling of the C++ front-end. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Specific flags and argument handling of the C++ front-end. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: init.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/init.c,v retrieving revision 1.302 diff -c -r1.302 init.c *** init.c 28 Dec 2002 14:38:38 -0000 1.302 --- init.c 1 Jan 2003 10:20:08 -0000 *************** *** 3,22 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: lang-options.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lang-options.h,v retrieving revision 1.43 diff -c -r1.43 lang-options.h *** lang-options.h 15 Dec 2001 20:06:12 -0000 1.43 --- lang-options.h 1 Jan 2003 10:20:08 -0000 *************** *** 2,21 **** Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: lang-specs.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lang-specs.h,v retrieving revision 1.54 diff -c -r1.54 lang-specs.h *** lang-specs.h 19 Dec 2002 20:34:42 -0000 1.54 --- lang-specs.h 1 Jan 2003 10:20:08 -0000 *************** *** 2,21 **** Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: lex.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lex.c,v retrieving revision 1.296 diff -c -r1.296 lex.c *** lex.c 30 Dec 2002 19:02:09 -0000 1.296 --- lex.c 1 Jan 2003 10:20:10 -0000 *************** *** 3,22 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: mangle.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/mangle.c,v retrieving revision 1.65 diff -c -r1.65 mangle.c *** mangle.c 30 Dec 2002 13:39:44 -0000 1.65 --- mangle.c 1 Jan 2003 10:20:16 -0000 *************** *** 2,21 **** Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Alex Samuel ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Alex Samuel ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: method.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/method.c,v retrieving revision 1.241 diff -c -r1.241 method.c *** method.c 30 Dec 2002 13:39:44 -0000 1.241 --- method.c 1 Jan 2003 10:20:17 -0000 *************** *** 4,23 **** 1999, 2000 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,23 ---- 1999, 2000 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: optimize.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/optimize.c,v retrieving revision 1.86 diff -c -r1.86 optimize.c *** optimize.c 16 Dec 2002 18:22:17 -0000 1.86 --- optimize.c 1 Jan 2003 10:20:18 -0000 *************** *** 2,21 **** Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Michell (mark@codesourcery.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Michell (mark@codesourcery.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: parser.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.11 diff -c -r1.11 parser.c *** parser.c 1 Jan 2003 03:16:15 -0000 1.11 --- parser.c 1 Jan 2003 10:20:48 -0000 *************** *** 2,21 **** Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: pt.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/pt.c,v retrieving revision 1.640 diff -c -r1.640 pt.c *** pt.c 31 Dec 2002 18:58:06 -0000 1.640 --- pt.c 1 Jan 2003 10:21:09 -0000 *************** *** 4,23 **** Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing. Rewritten by Jason Merrill (jason@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,23 ---- Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing. Rewritten by Jason Merrill (jason@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: ptree.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/ptree.c,v retrieving revision 1.30 diff -c -r1.30 ptree.c *** ptree.c 29 Dec 2002 14:53:05 -0000 1.30 --- ptree.c 1 Jan 2003 10:21:09 -0000 *************** *** 3,22 **** 1999 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: repo.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/repo.c,v retrieving revision 1.44 diff -c -r1.44 repo.c *** repo.c 29 Dec 2002 14:53:05 -0000 1.44 --- repo.c 1 Jan 2003 10:21:10 -0000 *************** *** 2,21 **** Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: rtti.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/rtti.c,v retrieving revision 1.150 diff -c -r1.150 rtti.c *** rtti.c 29 Dec 2002 14:53:05 -0000 1.150 --- rtti.c 1 Jan 2003 10:21:13 -0000 *************** *** 3,22 **** Free Software Foundation, Inc. Mostly written by Jason Merrill (jason@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- Free Software Foundation, Inc. Mostly written by Jason Merrill (jason@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: search.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/search.c,v retrieving revision 1.245 diff -c -r1.245 search.c *** search.c 28 Dec 2002 08:03:42 -0000 1.245 --- search.c 1 Jan 2003 10:21:19 -0000 *************** *** 4,23 **** 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,23 ---- 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: semantics.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/semantics.c,v retrieving revision 1.290 diff -c -r1.290 semantics.c *** semantics.c 31 Dec 2002 18:58:06 -0000 1.290 --- semantics.c 1 Jan 2003 10:21:24 -0000 *************** *** 7,26 **** Written by Mark Mitchell (mmitchell@usa.net) based on code found formerly in parse.y and pt.c. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 7,26 ---- Written by Mark Mitchell (mmitchell@usa.net) based on code found formerly in parse.y and pt.c. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: tree.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/tree.c,v retrieving revision 1.310 diff -c -r1.310 tree.c *** tree.c 31 Dec 2002 18:58:06 -0000 1.310 --- tree.c 1 Jan 2003 10:21:29 -0000 *************** *** 3,22 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: typeck.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/typeck.c,v retrieving revision 1.441 diff -c -r1.441 typeck.c *** typeck.c 28 Dec 2002 14:38:37 -0000 1.441 --- typeck.c 1 Jan 2003 10:21:43 -0000 *************** *** 3,22 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: typeck2.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/typeck2.c,v retrieving revision 1.133 diff -c -r1.133 typeck2.c *** typeck2.c 16 Dec 2002 18:22:21 -0000 1.133 --- typeck2.c 1 Jan 2003 10:21:45 -0000 *************** *** 4,23 **** 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 4,23 ---- 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: lex.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lex.h,v retrieving revision 1.19 diff -c -r1.19 lex.h *** lex.h 30 Dec 2002 19:02:09 -0000 1.19 --- lex.h 1 Jan 2003 10:20:11 -0000 *************** *** 1,25 **** ! /* Define constants and variables for communication with parse.y. Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) and by Brendan Kehoe (brendan@cygnus.com). ! This file is part of GNU CC. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY. No author or distributor ! accepts responsibility to anyone for the consequences of using it ! or for whether it serves any particular purpose or works at all, ! unless he says so in writing. Refer to the GNU CC General Public ! License for full details. - Everyone is granted permission to copy, modify and redistribute - GNU CC, but only under the conditions described in the - GNU CC General Public License. A copy of this license is - supposed to have been given to you along with GNU CC so you - can know your rights and responsibilities. It should be in a - file named COPYING. Among other things, the copyright notice - and this notice must be preserved on all copies. */ #ifndef GCC_CP_LEX_H #define GCC_CP_LEX_H --- 1,26 ---- ! /* Define constants and variables for communication with the parser. Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) and by Brendan Kehoe (brendan@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! ! GCC is distributed in the hope that it will be useful, but ! WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! General Public License for more details. ! ! You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifndef GCC_CP_LEX_H #define GCC_CP_LEX_H From gcc-patches-return-74820-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 11:48:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28004 invoked by alias); 1 Jan 2003 11:48:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27997 invoked from network); 1 Jan 2003 11:48:40 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 11:48:40 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18ThLX-0007UT-00; Wed, 01 Jan 2003 11:47:39 +0000 Date: Wed, 1 Jan 2003 11:47:39 +0000 From: Neil Booth To: Steven Bosscher Cc: gcc-patches@gcc.gnu.org Subject: Re: [C++ Patch] Replace "GNU CC" with "GCC" in copyright headers. Message-ID: <20030101114739.GA28771@daikokuya.co.uk> References: <1041419989.896.19.camel@steven> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1041419989.896.19.camel@steven> User-Agent: Mutt/1.4i Steven Bosscher wrote:- > OK, with some of the branches merged this seems like a good time to try > again. > > This is for C++ only. Diffstat says: 29 files changed, 7 deletions and > 248 modifications. Comment changes only, > > Note that some of the "GNU CC"s showed up in new files such as parser.c. > Maybe the start of the new year is a good moment to update all your > templates? :-) I think the templates are simply other files. So once they're all done, the problem should go away (modulo branch merges) 8-) FWIW IMO you shouldn't need approval and can commit this as obvious. Neil. From gcc-patches-return-74821-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 11:53:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29967 invoked by alias); 1 Jan 2003 11:53:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29949 invoked from network); 1 Jan 2003 11:53:47 -0000 Received: from unknown (HELO smtp4.wanadoo.nl) (194.134.35.175) by 209.249.29.67 with SMTP; 1 Jan 2003 11:53:47 -0000 Received: from steven.lr-s.tudelft.nl (3eea1517.cable.wanadoo.nl [62.234.21.23]) by smtp4.wanadoo.nl (Postfix) with ESMTP id 9CF173EC3E; Wed, 1 Jan 2003 12:53:34 +0100 (CET) Subject: Re: [C++ Patch] Replace "GNU CC" with "GCC" in copyright headers. From: Steven Bosscher To: Neil Booth Cc: gcc-patches@gcc.gnu.org In-Reply-To: <20030101114739.GA28771@daikokuya.co.uk> References: <1041419989.896.19.camel@steven> <20030101114739.GA28771@daikokuya.co.uk> Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 01 Jan 2003 12:54:35 +0100 Message-Id: <1041422075.857.23.camel@steven> Mime-Version: 1.0 Op wo 01-01-2003, om 12:47 schreef Neil Booth: > Steven Bosscher wrote:- > > > OK, with some of the branches merged this seems like a good time to try > > again. > > > > This is for C++ only. Diffstat says: 29 files changed, 7 deletions and > > 248 modifications. Comment changes only, > > > > Note that some of the "GNU CC"s showed up in new files such as parser.c. > > Maybe the start of the new year is a good moment to update all your > > templates? :-) > > I think the templates are simply other files. So once they're all done, > the problem should go away (modulo branch merges) 8-) > > FWIW IMO you shouldn't need approval and can commit this as obvious. I don't have write access :-) It would be nice if somebody could commit this patch soon, or 2003 will be added to the copyright years soon, and the patch won't apply anymore. Greetz Steven From gcc-patches-return-74822-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:00:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5562 invoked by alias); 1 Jan 2003 12:00:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5478 invoked from network); 1 Jan 2003 12:00:40 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 12:00:40 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18ThXA-0007Wg-00; Wed, 01 Jan 2003 11:59:40 +0000 Date: Wed, 1 Jan 2003 11:59:40 +0000 From: Neil Booth To: Steven Bosscher Cc: gcc-patches@gcc.gnu.org Subject: Re: [C++ Patch] Replace "GNU CC" with "GCC" in copyright headers. Message-ID: <20030101115940.GA28870@daikokuya.co.uk> References: <1041419989.896.19.camel@steven> <20030101114739.GA28771@daikokuya.co.uk> <1041422075.857.23.camel@steven> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1041422075.857.23.camel@steven> User-Agent: Mutt/1.4i Steven Bosscher wrote:- > > I think the templates are simply other files. So once they're all done, > > the problem should go away (modulo branch merges) 8-) > > > > FWIW IMO you shouldn't need approval and can commit this as obvious. > > I don't have write access :-) > > It would be nice if somebody could commit this patch soon, or 2003 will > be added to the copyright years soon, and the patch won't apply anymore. I've applied it, thanks. Neil. From gcc-patches-return-74823-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:00:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5861 invoked by alias); 1 Jan 2003 12:00:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5813 invoked from network); 1 Jan 2003 12:00:48 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 12:00:48 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18ThXI-0007Wp-00; Wed, 01 Jan 2003 11:59:48 +0000 Date: Wed, 1 Jan 2003 11:59:48 +0000 From: Neil Booth To: "Joseph S. Myers" Cc: gcc-patches@gcc.gnu.org Subject: Re: Update cp/.cvsignore Message-ID: <20030101115948.GB28870@daikokuya.co.uk> References: <20021231221242.GA23223@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i Joseph S. Myers wrote:- > On Tue, 31 Dec 2002, Neil Booth wrote: > > > -parse.h > > -parse.c > > g++int.info* > > g++int.info* is obsolete long ago, the file should just be removed. Done. Neil. From gcc-patches-return-74824-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:03:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12495 invoked by alias); 1 Jan 2003 12:03:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12488 invoked from network); 1 Jan 2003 12:03:53 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 1 Jan 2003 12:03:53 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 71EBB14682; Wed, 1 Jan 2003 13:03:41 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18Thb1-0005Pc-00; Wed, 01 Jan 2003 13:03:39 +0100 Mail-Copies-To: never To: Steven Bosscher Cc: Neil Booth , gcc-patches@gcc.gnu.org Subject: Re: [C++ Patch] Replace "GNU CC" with "GCC" in copyright headers. From: Andreas Jaeger Date: Wed, 01 Jan 2003 13:03:39 +0100 In-Reply-To: <1041422075.857.23.camel@steven> (Steven Bosscher's message of "01 Jan 2003 12:54:35 +0100") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: <1041419989.896.19.camel@steven> <20030101114739.GA28771@daikokuya.co.uk> <1041422075.857.23.camel@steven> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Steven Bosscher writes: > Op wo 01-01-2003, om 12:47 schreef Neil Booth: >> Steven Bosscher wrote:- >> >> > OK, with some of the branches merged this seems like a good time to try >> > again. >> > >> > This is for C++ only. Diffstat says: 29 files changed, 7 deletions and >> > 248 modifications. Comment changes only, >> > >> > Note that some of the "GNU CC"s showed up in new files such as parser.c. >> > Maybe the start of the new year is a good moment to update all your >> > templates? :-) >> >> I think the templates are simply other files. So once they're all done, >> the problem should go away (modulo branch merges) 8-) >> >> FWIW IMO you shouldn't need approval and can commit this as obvious. > > I don't have write access :-) :-( > It would be nice if somebody could commit this patch soon, or 2003 will > be added to the copyright years soon, and the patch won't apply anymore. The question is whether we need to add 2003 to all those files now since we changed them or not. Ok, I'll commit your patch as is directly now and we can later add the 2003 if needed, Happy New Year! Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74825-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:23:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14403 invoked by alias); 1 Jan 2003 12:23:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14373 invoked from network); 1 Jan 2003 12:22:58 -0000 Received: from unknown (HELO smtp6.wanadoo.nl) (194.134.35.177) by 209.249.29.67 with SMTP; 1 Jan 2003 12:22:58 -0000 Received: from steven.lr-s.tudelft.nl (3eea1517.cable.wanadoo.nl [62.234.21.23]) by smtp6.wanadoo.nl (Postfix) with ESMTP id EB309709E5 for ; Wed, 1 Jan 2003 13:22:44 +0100 (CET) Subject: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. From: Steven Bosscher To: gcc-patches@gcc.gnu.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 01 Jan 2003 13:23:45 +0100 Message-Id: <1041423825.857.31.camel@steven> Mime-Version: 1.0 Again very mechanical; comment changes only. This also adds 2003 as a copyright year to the headers. Let's be pedantic... Greetz Steven 2002-12-31 Steven Bosscher * objc/Make-lang.in, objc/config-lang.in, objc/lang-options.h, objc/lang-specs.h, objc/objc-act.c, objc/objc-act.h, objc/objc-lang.c, objc/objc-tree.def: Replace "GNU CC" with "GCC" in the copyright header. Index: Make-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/Make-lang.in,v retrieving revision 1.50 diff -c -r1.50 Make-lang.in *** Make-lang.in 16 Dec 2002 18:22:37 -0000 1.50 --- Make-lang.in 1 Jan 2003 12:14:45 -0000 *************** *** 1,20 **** # Top level -*- makefile -*- fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! #This file is part of GNU CC. ! #GNU CC is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2, or (at your option) #any later version. ! #GNU CC is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License ! #along with GNU CC; see the file COPYING. If not, write to #the Free Software Foundation, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. --- 1,20 ---- # Top level -*- makefile -*- fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc. ! #This file is part of GCC. ! #GCC is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2, or (at your option) #any later version. ! #GCC is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License ! #along with GCC; see the file COPYING. If not, write to #the Free Software Foundation, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. Index: config-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/config-lang.in,v retrieving revision 1.8 diff -c -r1.8 config-lang.in *** config-lang.in 14 Jul 2002 01:59:15 -0000 1.8 --- config-lang.in 1 Jan 2003 12:14:45 -0000 *************** *** 1,20 **** # Top level configure fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! #This file is part of GNU CC. ! #GNU CC is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2, or (at your option) #any later version. ! #GNU CC is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License ! #along with GNU CC; see the file COPYING. If not, write to #the Free Software Foundation, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. --- 1,20 ---- # Top level configure fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc. ! #This file is part of GCC. ! #GCC is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2, or (at your option) #any later version. ! #GCC is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License ! #along with GCC; see the file COPYING. If not, write to #the Free Software Foundation, 59 Temple Place - Suite 330, #Boston, MA 02111-1307, USA. Index: lang-options.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/lang-options.h,v retrieving revision 1.5 diff -c -r1.5 lang-options.h *** lang-options.h 26 May 2001 05:28:26 -0000 1.5 --- lang-options.h 1 Jan 2003 12:14:45 -0000 *************** *** 1,20 **** /* Switch definitions for the GNU compiler for the Objective-C language. ! Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Switch definitions for the GNU compiler for the Objective-C language. ! Copyright (C) 2000, 2003 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: lang-specs.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/lang-specs.h,v retrieving revision 1.26 diff -c -r1.26 lang-specs.h *** lang-specs.h 10 Aug 2002 20:58:45 -0000 1.26 --- lang-specs.h 1 Jan 2003 12:14:46 -0000 *************** *** 1,20 **** /* Definitions for specs for Objective-C. ! Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Definitions for specs for Objective-C. ! Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: objc-act.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/objc-act.c,v retrieving revision 1.161 diff -c -r1.161 objc-act.c *** objc-act.c 16 Dec 2002 18:22:38 -0000 1.161 --- objc-act.c 1 Jan 2003 12:14:59 -0000 *************** *** 1,22 **** /* Implement classes and message passing for Objective C. ! Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Steve Naroff. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,22 ---- /* Implement classes and message passing for Objective C. ! Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, ! 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Steve Naroff. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: objc-act.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/objc-act.h,v retrieving revision 1.13 diff -c -r1.13 objc-act.h *** objc-act.h 20 Aug 2002 01:27:38 -0000 1.13 --- objc-act.h 1 Jan 2003 12:15:00 -0000 *************** *** 1,20 **** /* Declarations for objc-act.c. ! Copyright (C) 1990, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Declarations for objc-act.c. ! Copyright (C) 1990, 2000, 2001, 2003 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: objc-lang.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/objc-lang.c,v retrieving revision 1.27 diff -c -r1.27 objc-lang.c *** objc-lang.c 16 Dec 2002 18:22:38 -0000 1.27 --- objc-lang.c 1 Jan 2003 12:15:00 -0000 *************** *** 1,21 **** /* Language-dependent hooks for Objective-C. ! Copyright 2001, 2002 Free Software Foundation, Inc. Contributed by Ziemowit Laski ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,21 ---- /* Language-dependent hooks for Objective-C. ! Copyright 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Ziemowit Laski ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Index: objc-tree.def =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/objc-tree.def,v retrieving revision 1.6 diff -c -r1.6 objc-tree.def *** objc-tree.def 3 Oct 2001 22:05:57 -0000 1.6 --- objc-tree.def 1 Jan 2003 12:15:00 -0000 *************** *** 1,23 **** /* This file contains the definitions and documentation for the additional tree codes used in the Objective C front end (see tree.def for the standard codes). ! Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,23 ---- /* This file contains the definitions and documentation for the additional tree codes used in the Objective C front end (see tree.def for the standard codes). ! Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ From gcc-patches-return-74826-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:27:00 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15607 invoked by alias); 1 Jan 2003 12:26:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15586 invoked from network); 1 Jan 2003 12:26:57 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 12:26:57 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18ThwV-0007d1-00 for ; Wed, 01 Jan 2003 12:25:51 +0000 Date: Wed, 1 Jan 2003 12:25:49 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: Get rid of cpplib.h dependency on c-pragma.h Message-ID: <20030101122549.GA29299@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i This is an old and unnecessary dependency, which gets in the way, particularly as we want to move cpplib.h out of the gcc/ directory. The patch is little more than a search/replace. Bootstrapped x86 Linux and on compiled on a powerpc-eabisim cross, applied. Neil. * c-pragma.c (c_register_pragma): New. (init_pragma): Use it. * c-pragma.h (cpp_register_pragma): Don't declare. (c_register_pragma): New. * cpplib.h: Remove #ifdef GCC_C_PRAGMA_H. * config/darwin.h (REGISTER_TARGET_PRAGMAS): Update. * config/arm/arm.h (REGISTER_TARGET_PRAGMAS): Update. * config/c4x/c4x.h (REGISTER_TARGET_PRAGMAS): Update. * config/h8300/h8300.h (REGISTER_TARGET_PRAGMAS): Update. * config/i370/i370.h (REGISTER_TARGET_PRAGMAS): Update. * config/i960/i960.h (REGISTER_TARGET_PRAGMAS): Update. * config/ia64/hpux.h (REGISTER_TARGET_PRAGMAS): Update. * config/rs6000/rs6000.h (REGISTER_TARGET_PRAGMAS): Update. * config/sh/sh.h (REGISTER_TARGET_PRAGMAS): Update. * config/v850/v850.h (REGISTER_TARGET_PRAGMAS): Update. * doc/tm.texi (REGISTER_TARGET_PRAGMAS): Update cp: * lex.c: Remove superfluous include of cpplib.h. (CONSTRAINT): Define without conditions. (init_cp_pragma): Use c_register_pragma. ============================================================ Index: gcc/c-pragma.c --- gcc/c-pragma.c 16 Dec 2002 18:19:04 -0000 1.55 +++ gcc/c-pragma.c 1 Jan 2003 12:22:33 -0000 @@ -1,5 +1,5 @@ /* Handle #pragma, system V.4 style. Supports #pragma weak and #pragma pack. - Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. @@ -483,26 +483,36 @@ maybe_apply_renaming_pragma (decl, asmna return asmname; } +/* Front-end wrapper for pragma registration to avoid dragging + cpplib.h in almost everywhere. */ +void +c_register_pragma (space, name, handler) + const char *space; + const char *name; + void (*handler) PARAMS ((struct cpp_reader *)); +{ + cpp_register_pragma (parse_in, space, name, handler); +} + +/* Set up front-end pragmas. */ void init_pragma () { #ifdef HANDLE_PRAGMA_PACK - cpp_register_pragma (parse_in, 0, "pack", handle_pragma_pack); + c_register_pragma (0, "pack", handle_pragma_pack); #endif #ifdef HANDLE_PRAGMA_WEAK - cpp_register_pragma (parse_in, 0, "weak", handle_pragma_weak); + c_register_pragma (0, "weak", handle_pragma_weak); #endif #ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME - cpp_register_pragma (parse_in, 0, "redefine_extname", - handle_pragma_redefine_extname); + c_register_pragma (0, "redefine_extname", handle_pragma_redefine_extname); #endif #ifdef HANDLE_PRAGMA_EXTERN_PREFIX - cpp_register_pragma (parse_in, 0, "extern_prefix", - handle_pragma_extern_prefix); + c_register_pragma (0, "extern_prefix", handle_pragma_extern_prefix); #endif #ifdef REGISTER_TARGET_PRAGMAS - REGISTER_TARGET_PRAGMAS (parse_in); + REGISTER_TARGET_PRAGMAS (); #endif } ============================================================ Index: gcc/c-pragma.h --- gcc/c-pragma.h 8 Jul 2002 17:53:24 -0000 1.31 +++ gcc/c-pragma.h 1 Jan 2003 12:22:33 -0000 @@ -1,5 +1,5 @@ /* Pragma related interfaces. - Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. @@ -50,16 +50,11 @@ extern struct cpp_reader* parse_in; extern void init_pragma PARAMS ((void)); -/* Duplicate prototypes for the register_pragma stuff and the typedef for - cpp_reader, to avoid dragging cpplib.h in almost everywhere... */ -#ifndef GCC_CPPLIB_H -typedef struct cpp_reader cpp_reader; - -extern void cpp_register_pragma PARAMS ((cpp_reader *, - const char *, const char *, - void (*) PARAMS ((cpp_reader *)))); -#endif - +/* Front-end wrapper for pragma registration to avoid dragging + cpplib.h in almost everywhere. */ +extern void c_register_pragma + PARAMS ((const char *, const char *, + void (*) PARAMS ((struct cpp_reader *)))); extern void maybe_apply_pragma_weak PARAMS ((tree)); extern tree maybe_apply_renaming_pragma PARAMS ((tree, tree)); extern void add_to_renaming_pragma_list PARAMS ((tree, tree)); ============================================================ Index: gcc/cpplib.h --- gcc/cpplib.h 16 Dec 2002 18:19:18 -0000 1.238 +++ gcc/cpplib.h 1 Jan 2003 12:22:34 -0000 @@ -1,5 +1,5 @@ /* Definitions for CPP library. - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Written by Per Bothner, 1994-95. @@ -31,10 +31,7 @@ Foundation, 59 Temple Place - Suite 330, extern "C" { #endif -/* For complex reasons, cpp_reader is also typedefed in c-pragma.h. */ -#ifndef GCC_C_PRAGMA_H typedef struct cpp_reader cpp_reader; -#endif typedef struct cpp_buffer cpp_buffer; typedef struct cpp_options cpp_options; typedef struct cpp_token cpp_token; ============================================================ Index: gcc/config/darwin.h --- gcc/config/darwin.h 19 Dec 2002 23:46:48 -0000 1.45 +++ gcc/config/darwin.h 1 Jan 2003 12:22:34 -0000 @@ -1,5 +1,5 @@ /* Target definitions for Darwin (Mac OS X) systems. - Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002 + Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Apple Computer Inc. @@ -793,12 +793,12 @@ enum machopic_addr_class { #define TARGET_TERMINATE_DW2_EH_FRAME_INFO false -#define DARWIN_REGISTER_TARGET_PRAGMAS(PFILE) \ - do { \ - cpp_register_pragma (PFILE, 0, "mark", darwin_pragma_ignore); \ - cpp_register_pragma (PFILE, 0, "options", darwin_pragma_options); \ - cpp_register_pragma (PFILE, 0, "segment", darwin_pragma_ignore); \ - cpp_register_pragma (PFILE, 0, "unused", darwin_pragma_unused); \ +#define DARWIN_REGISTER_TARGET_PRAGMAS() \ + do { \ + c_register_pragma (0, "mark", darwin_pragma_ignore); \ + c_register_pragma (0, "options", darwin_pragma_options); \ + c_register_pragma (0, "segment", darwin_pragma_ignore); \ + c_register_pragma (0, "unused", darwin_pragma_unused); \ } while (0) #undef ASM_APP_ON ============================================================ Index: gcc/config/arm/arm.h --- gcc/config/arm/arm.h 16 Dec 2002 18:20:56 -0000 1.169 +++ gcc/config/arm/arm.h 1 Jan 2003 12:22:35 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler, for ARM. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002 Free Software Foundation, Inc. + 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). More major hacks by Richard Earnshaw (rearnsha@arm.com) @@ -2438,10 +2438,10 @@ extern const char * arm_pic_register_str extern int making_const_table; /* Handle pragmas for compatibility with Intel's compilers. */ -#define REGISTER_TARGET_PRAGMAS(PFILE) do { \ - cpp_register_pragma (PFILE, 0, "long_calls", arm_pr_long_calls); \ - cpp_register_pragma (PFILE, 0, "no_long_calls", arm_pr_no_long_calls); \ - cpp_register_pragma (PFILE, 0, "long_calls_off", arm_pr_long_calls_off); \ +#define REGISTER_TARGET_PRAGMAS() do { \ + c_register_pragma (0, "long_calls", arm_pr_long_calls); \ + c_register_pragma (0, "no_long_calls", arm_pr_no_long_calls); \ + c_register_pragma (0, "long_calls_off", arm_pr_long_calls_off); \ } while (0) /* Condition code information. */ ============================================================ Index: gcc/config/c4x/c4x.h --- gcc/config/c4x/c4x.h 20 Dec 2002 04:30:41 -0000 1.118 +++ gcc/config/c4x/c4x.h 1 Jan 2003 12:22:36 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. TMS320C[34]x - Copyright (C) 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl). @@ -1837,18 +1837,17 @@ do { \ #define PRINT_OPERAND_ADDRESS(FILE, X) c4x_print_operand_address(FILE, X) /* C4x specific pragmas. */ -#define REGISTER_TARGET_PRAGMAS(PFILE) do { \ - cpp_register_pragma (PFILE, 0, "CODE_SECTION", c4x_pr_CODE_SECTION); \ - cpp_register_pragma (PFILE, 0, "DATA_SECTION", c4x_pr_DATA_SECTION); \ - cpp_register_pragma (PFILE, 0, "FUNC_CANNOT_INLINE", c4x_pr_ignored); \ - cpp_register_pragma (PFILE, 0, "FUNC_EXT_CALLED", c4x_pr_ignored); \ - cpp_register_pragma (PFILE, 0, "FUNC_IS_PURE", c4x_pr_FUNC_IS_PURE); \ - cpp_register_pragma (PFILE, 0, "FUNC_IS_SYSTEM", c4x_pr_ignored); \ - cpp_register_pragma (PFILE, 0, "FUNC_NEVER_RETURNS", \ - c4x_pr_FUNC_NEVER_RETURNS); \ - cpp_register_pragma (PFILE, 0, "FUNC_NO_GLOBAL_ASG", c4x_pr_ignored); \ - cpp_register_pragma (PFILE, 0, "FUNC_NO_IND_ASG", c4x_pr_ignored); \ - cpp_register_pragma (PFILE, 0, "INTERRUPT", c4x_pr_INTERRUPT); \ +#define REGISTER_TARGET_PRAGMAS() do { \ + c_register_pragma (0, "CODE_SECTION", c4x_pr_CODE_SECTION); \ + c_register_pragma (0, "DATA_SECTION", c4x_pr_DATA_SECTION); \ + c_register_pragma (0, "FUNC_CANNOT_INLINE", c4x_pr_ignored); \ + c_register_pragma (0, "FUNC_EXT_CALLED", c4x_pr_ignored); \ + c_register_pragma (0, "FUNC_IS_PURE", c4x_pr_FUNC_IS_PURE); \ + c_register_pragma (0, "FUNC_IS_SYSTEM", c4x_pr_ignored); \ + c_register_pragma (0, "FUNC_NEVER_RETURNS", c4x_pr_FUNC_NEVER_RETURNS); \ + c_register_pragma (0, "FUNC_NO_GLOBAL_ASG", c4x_pr_ignored); \ + c_register_pragma (0, "FUNC_NO_IND_ASG", c4x_pr_ignored); \ + c_register_pragma (0, "INTERRUPT", c4x_pr_INTERRUPT); \ } while (0) /* Assembler Commands for Alignment. */ ============================================================ Index: gcc/config/h8300/h8300.h --- gcc/config/h8300/h8300.h 31 Dec 2002 18:31:59 -0000 1.128 +++ gcc/config/h8300/h8300.h 1 Jan 2003 12:22:36 -0000 @@ -1,7 +1,7 @@ /* Definitions of target machine for GNU compiler. Hitachi H8/300 version generating coff Copyright (C) 1992, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, - 2000, 2001, 2002 Free Software Foundation, Inc. + 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). @@ -1257,12 +1257,12 @@ struct cum_arg #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) /* H8300 specific pragmas. */ -#define REGISTER_TARGET_PRAGMAS(PFILE) \ - do \ - { \ - cpp_register_pragma (PFILE, 0, "saveall", h8300_pr_saveall); \ - cpp_register_pragma (PFILE, 0, "interrupt", h8300_pr_interrupt); \ - } \ +#define REGISTER_TARGET_PRAGMAS() \ + do \ + { \ + c_register_pragma (0, "saveall", h8300_pr_saveall); \ + c_register_pragma (0, "interrupt", h8300_pr_interrupt); \ + } \ while (0) #define FINAL_PRESCAN_INSN(insn, operand, nop) \ ============================================================ Index: gcc/config/i370/i370.h --- gcc/config/i370/i370.h 16 Dec 2002 18:21:16 -0000 1.54 +++ gcc/config/i370/i370.h 1 Jan 2003 12:22:37 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. System/370 version. - Copyright (C) 1989, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 - Free Software Foundation, Inc. + Copyright (C) 1989, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) Hacked for Linux-ELF/390 by Linas Vepstas (linas@linas.org) @@ -150,8 +150,7 @@ extern int mvs_function_name_length; #ifdef TARGET_HLASM /* HLASM requires #pragma map. */ -#define REGISTER_TARGET_PRAGMAS(PFILE) \ - cpp_register_pragma (PFILE, 0, "map", i370_pr_map) +#define REGISTER_TARGET_PRAGMAS() c_register_pragma (0, "map", i370_pr_map) #endif /* TARGET_HLASM */ /* Define maximum length of page minus page escape overhead. */ ============================================================ Index: gcc/config/i960/i960.h --- gcc/config/i960/i960.h 16 Dec 2002 18:21:23 -0000 1.70 +++ gcc/config/i960/i960.h 1 Jan 2003 12:22:37 -0000 @@ -130,9 +130,9 @@ Boston, MA 02111-1307, USA. */ extern int i960_maxbitalignment; extern int i960_last_maxbitalignment; -#define REGISTER_TARGET_PRAGMAS(PFILE) do { \ - cpp_register_pragma (PFILE, 0, "align", i960_pr_align); \ - cpp_register_pragma (PFILE, 0, "noalign", i960_pr_noalign); \ +#define REGISTER_TARGET_PRAGMAS() do { \ + c_register_pragma (0, "align", i960_pr_align); \ + c_register_pragma (0, "noalign", i960_pr_noalign); \ } while (0) /* Run-time compilation parameters selecting different hardware subsets. */ ============================================================ Index: gcc/config/ia64/hpux.h --- gcc/config/ia64/hpux.h 9 Dec 2002 18:07:58 -0000 1.20 +++ gcc/config/ia64/hpux.h 1 Jan 2003 12:22:37 -0000 @@ -1,5 +1,5 @@ /* Definitions of target machine GNU compiler. IA-64 version. - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Steve Ellcey and Reva Cuthbertson @@ -130,8 +130,8 @@ do { \ #undef PAD_VARARGS_DOWN #define PAD_VARARGS_DOWN (!AGGREGATE_TYPE_P (type)) -#define REGISTER_TARGET_PRAGMAS(PFILE) \ - cpp_register_pragma (PFILE, 0, "builtin", ia64_hpux_handle_builtin_pragma) +#define REGISTER_TARGET_PRAGMAS() \ + c_register_pragma (0, "builtin", ia64_hpux_handle_builtin_pragma) /* Tell ia64.c that we are using the HP linker and we should delay output of function extern declarations so that we don't output them for functions ============================================================ Index: gcc/config/rs6000/rs6000.h --- gcc/config/rs6000/rs6000.h 31 Dec 2002 01:05:21 -0000 1.241 +++ gcc/config/rs6000/rs6000.h 1 Jan 2003 12:22:38 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler, for IBM RS/6000. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002 Free Software Foundation, Inc. + 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GNU CC. @@ -460,8 +460,8 @@ extern int rs6000_default_long_calls; #define CAN_DEBUG_WITHOUT_FP /* Target pragma. */ -#define REGISTER_TARGET_PRAGMAS(PFILE) do { \ - cpp_register_pragma (PFILE, 0, "longcall", rs6000_pragma_longcall); \ +#define REGISTER_TARGET_PRAGMAS() do { \ + c_register_pragma (0, "longcall", rs6000_pragma_longcall); \ } while (0) /* Target #defines. */ ============================================================ Index: gcc/config/sh/sh.h --- gcc/config/sh/sh.h 16 Dec 2002 18:21:55 -0000 1.181 +++ gcc/config/sh/sh.h 1 Jan 2003 12:22:40 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler for Hitachi / SuperH SH. - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 - Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). @@ -3165,10 +3165,10 @@ extern enum mdep_reorg_phase_e mdep_reor #define TARGET_MEM_FUNCTIONS /* Handle Hitachi compiler's pragmas. */ -#define REGISTER_TARGET_PRAGMAS(PFILE) do { \ - cpp_register_pragma (PFILE, 0, "interrupt", sh_pr_interrupt); \ - cpp_register_pragma (PFILE, 0, "trapa", sh_pr_trapa); \ - cpp_register_pragma (PFILE, 0, "nosave_low_regs", sh_pr_nosave_low_regs); \ +#define REGISTER_TARGET_PRAGMAS() do { \ + c_register_pragma (0, "interrupt", sh_pr_interrupt); \ + c_register_pragma (0, "trapa", sh_pr_trapa); \ + c_register_pragma (0, "nosave_low_regs", sh_pr_nosave_low_regs); \ } while (0) /* Set when processing a function with pragma interrupt turned on. */ ============================================================ Index: gcc/config/v850/v850.h --- gcc/config/v850/v850.h 16 Dec 2002 18:22:02 -0000 1.76 +++ gcc/config/v850/v850.h 1 Jan 2003 12:22:40 -0000 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. NEC V850 series - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Jeff Law (law@cygnus.com). @@ -1413,15 +1413,15 @@ zbss_section () \ #define FUNCTION_MODE QImode /* Tell compiler we want to support GHS pragmas */ -#define REGISTER_TARGET_PRAGMAS(PFILE) do { \ - cpp_register_pragma (PFILE, "ghs", "interrupt", ghs_pragma_interrupt); \ - cpp_register_pragma (PFILE, "ghs", "section", ghs_pragma_section); \ - cpp_register_pragma (PFILE, "ghs", "starttda", ghs_pragma_starttda); \ - cpp_register_pragma (PFILE, "ghs", "startsda", ghs_pragma_startsda); \ - cpp_register_pragma (PFILE, "ghs", "startzda", ghs_pragma_startzda); \ - cpp_register_pragma (PFILE, "ghs", "endtda", ghs_pragma_endtda); \ - cpp_register_pragma (PFILE, "ghs", "endsda", ghs_pragma_endsda); \ - cpp_register_pragma (PFILE, "ghs", "endzda", ghs_pragma_endzda); \ +#define REGISTER_TARGET_PRAGMAS() do { \ + c_register_pragma ("ghs", "interrupt", ghs_pragma_interrupt); \ + c_register_pragma ("ghs", "section", ghs_pragma_section); \ + c_register_pragma ("ghs", "starttda", ghs_pragma_starttda); \ + c_register_pragma ("ghs", "startsda", ghs_pragma_startsda); \ + c_register_pragma ("ghs", "startzda", ghs_pragma_startzda); \ + c_register_pragma ("ghs", "endtda", ghs_pragma_endtda); \ + c_register_pragma ("ghs", "endsda", ghs_pragma_endsda); \ + c_register_pragma ("ghs", "endzda", ghs_pragma_endzda); \ } while (0) /* enum GHS_SECTION_KIND is an enumeration of the kinds of sections that ============================================================ Index: gcc/cp/lex.c --- gcc/cp/lex.c 1 Jan 2003 11:58:57 -0000 1.297 +++ gcc/cp/lex.c 1 Jan 2003 12:22:40 -0000 @@ -1,6 +1,6 @@ /* Separate lexical analyzer for GNU C++. Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GCC. @@ -61,13 +61,7 @@ static void init_operators PARAMS ((void static void copy_lang_type PARAMS ((tree)); /* A constraint that can be tested at compile time. */ -#ifdef __STDC__ #define CONSTRAINT(name, expr) extern int constraint_##name [(expr) ? 1 : -1] -#else -#define CONSTRAINT(name, expr) extern int constraint_/**/name [(expr) ? 1 : -1] -#endif - -#include "cpplib.h" /* Functions and data structures for #pragma interface. @@ -403,18 +397,13 @@ init_reswords () static void init_cp_pragma () { - cpp_register_pragma (parse_in, 0, "vtable", handle_pragma_vtable); - cpp_register_pragma (parse_in, 0, "unit", handle_pragma_unit); - - cpp_register_pragma (parse_in, 0, "interface", handle_pragma_interface); - cpp_register_pragma (parse_in, 0, "implementation", - handle_pragma_implementation); - - cpp_register_pragma (parse_in, "GCC", "interface", handle_pragma_interface); - cpp_register_pragma (parse_in, "GCC", "implementation", - handle_pragma_implementation); - cpp_register_pragma (parse_in, "GCC", "java_exceptions", - handle_pragma_java_exceptions); + c_register_pragma (0, "vtable", handle_pragma_vtable); + c_register_pragma (0, "unit", handle_pragma_unit); + c_register_pragma (0, "interface", handle_pragma_interface); + c_register_pragma (0, "implementation", handle_pragma_implementation); + c_register_pragma ("GCC", "interface", handle_pragma_interface); + c_register_pragma ("GCC", "implementation", handle_pragma_implementation); + c_register_pragma ("GCC", "java_exceptions", handle_pragma_java_exceptions); } /* Initialize the C++ front end. This function is very sensitive to ============================================================ Index: gcc/doc/tm.texi --- gcc/doc/tm.texi 23 Dec 2002 16:39:36 -0000 1.185 +++ gcc/doc/tm.texi 1 Jan 2003 12:22:44 -0000 @@ -1,5 +1,5 @@ -@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002 -@c Free Software Foundation, Inc. +@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001, +@c 2002, 2003 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -8785,11 +8785,10 @@ This macro is no longer supported. You @findex REGISTER_TARGET_PRAGMAS @findex #pragma @findex pragma -@item REGISTER_TARGET_PRAGMAS (@var{pfile}) +@item REGISTER_TARGET_PRAGMAS () Define this macro if you want to implement any target-specific pragmas. If defined, it is a C expression which makes a series of calls to -@code{cpp_register_pragma} for each pragma, with @var{pfile} passed as -the first argument to to these functions. The macro may also do any +@code{c_register_pragma} for each pragma. The macro may also do any setup required for the pragmas. The primary reason to define this macro is to provide compatibility with @@ -8803,9 +8802,9 @@ Preprocessor macros that appear on pragm @samp{#pragma} directives that do not match any registered pragma are silently ignored, unless the user specifies @option{-Wunknown-pragmas}. -@deftypefun void cpp_register_pragma (cpp_reader *@var{pfile}, const char *@var{space}, const char *@var{name}, void (*@var{callback}) (cpp_reader *)) +@deftypefun void c_register_pragma (const char *@var{space}, const char *@var{name}, void (*@var{callback}) (struct cpp_reader *)) -Each call to @code{cpp_register_pragma} establishes one pragma. The +Each call to @code{c_register_pragma} establishes one pragma. The @var{callback} routine will be called when the preprocessor encounters a pragma of the form From gcc-patches-return-74827-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:37:31 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17795 invoked by alias); 1 Jan 2003 12:37:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17787 invoked from network); 1 Jan 2003 12:37:27 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 1 Jan 2003 12:37:27 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01CbFk07575 for ; Wed, 1 Jan 2003 07:37:15 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Ti6E-0007Sd-00 for ; Wed, 01 Jan 2003 07:35:54 -0500 Date: Wed, 1 Jan 2003 07:35:54 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/8982 Message-ID: <20030101123554.GA27335@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/parse/operator1.C: New test. Index: operator1.C =================================================================== RCS file: operator1.C diff -N operator1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ operator1.C 1 Jan 2003 12:30:57 -0000 @@ -0,0 +1,11 @@ +/* PR c++/8982 */ +/* { dg-do compile } */ +namespace foo { + template + int operator- (X x); +} + +int main() { + using foo::operator-; // syntax error under gcc 3.2 +} + From gcc-patches-return-74828-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:49:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19661 invoked by alias); 1 Jan 2003 12:49:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19654 invoked from network); 1 Jan 2003 12:49:30 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 12:49:30 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18TiIQ-0007ex-00; Wed, 01 Jan 2003 12:48:30 +0000 Date: Wed, 1 Jan 2003 12:48:30 +0000 From: Neil Booth To: Steven Bosscher Cc: gcc-patches@gcc.gnu.org Subject: Re: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. Message-ID: <20030101124830.GA29431@daikokuya.co.uk> References: <1041423825.857.31.camel@steven> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1041423825.857.31.camel@steven> User-Agent: Mutt/1.4i Steven Bosscher wrote:- > Again very mechanical; comment changes only. This also adds 2003 as a > copyright year to the headers. Let's be pedantic... > > Greetz > Steven Done, thanks. Neil. From gcc-patches-return-74829-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 12:53:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20468 invoked by alias); 1 Jan 2003 12:53:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20461 invoked from network); 1 Jan 2003 12:53:48 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 1 Jan 2003 12:53:48 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01CraF16332 for ; Wed, 1 Jan 2003 07:53:36 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TiM3-0007SG-00 for ; Wed, 01 Jan 2003 07:52:15 -0500 Date: Wed, 1 Jan 2003 07:52:15 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/250 Message-ID: <20030101125215.GA26628@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/lookup/scope-operator1.C: New test. Index: g++.dg/lookup/scope-operator1.C =================================================================== RCS file: g++.dg/lookup/scope-operator1.C diff -N g++.dg/lookup/scope-operator1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/lookup/scope-operator1.C 1 Jan 2003 12:52:24 -0000 @@ -0,0 +1,20 @@ +/* PR c++/250 */ +/* { dg-do compile } */ + +template void Bar(T *p) +{ +} + +template class Foo +{ +public: + Foo(T *p) { Bar(p); } + // The global scope operator wasn't respected in this case under gcc 3.0 + void Bar(T *p) { ::Bar(p); } +}; + +int main() +{ + double* d; + Foo f(d); +} From gcc-patches-return-74830-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 13:24:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30621 invoked by alias); 1 Jan 2003 13:24:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30611 invoked from network); 1 Jan 2003 13:24:16 -0000 Received: from unknown (HELO smtp6.wanadoo.nl) (194.134.35.177) by 209.249.29.67 with SMTP; 1 Jan 2003 13:24:16 -0000 Received: from steven.lr-s.tudelft.nl (3eea1fe0.cable.wanadoo.nl [62.234.31.224]) by smtp6.wanadoo.nl (Postfix) with ESMTP id DF82871268 for ; Wed, 1 Jan 2003 14:24:02 +0100 (CET) Subject: [Java Patch] Fix copyright headers for Java From: Steven Bosscher To: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-AJXMg3XAtRwMAbOA1i4C" Date: 01 Jan 2003 14:25:02 +0100 Message-Id: <1041427503.896.42.camel@steven> Mime-Version: 1.0 --=-AJXMg3XAtRwMAbOA1i4C Content-Type: text/plain Content-Transfer-Encoding: 7bit This patch fixes all those "GNU CC"s in the Java front end, and updates the copyright years with 2003. I also changed some files to say "This file is part of GCC", that seemed like the right thing to do but I'm not sure about it. Greetz Steven 2003-01-01 Steven Bosscher * Make-lang.in, boehm.c, buffer.c, buffer.h, builtins.c, class.c, config-lang.in, constants.c, convert.h, decl.c, except.c, expr.c, java-except.h, java-tree.h, javaop.def, jcf-parse.c, jcf-write.c, jv-scan.c, jvgenmain.c, jvspec.c, keyword.gperf, keyword.h, lang-options.h, lang-specs.h, lang.c, lex.c, lex.h, mangle.c, mangle_name.c, parse-scan.y, parse.h, parse.y, typeck.c, verify.c, xref.c, xref.h: Replace "GNU CC" with "GCC" in the copyright header. * check-init.c, gjavah.c, javaop.h, jcf-depend.c, jcf-dump.c, jcf-io.c, jcf-path.c, jcf-reader.c, jcf.h, zextract.c, zipfile.h: These files are "part of GCC". Also say "GCC" not "GNU CC". --=-AJXMg3XAtRwMAbOA1i4C Content-Disposition: attachment; filename=patch.gz Content-Type: application/x-gzip; name=patch.gz Content-Transfer-Encoding: base64 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 --=-AJXMg3XAtRwMAbOA1i4C-- From gcc-patches-return-74831-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:13:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26540 invoked by alias); 1 Jan 2003 14:13:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26514 invoked from network); 1 Jan 2003 14:13:00 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 1 Jan 2003 14:13:00 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01EClF02551 for ; Wed, 1 Jan 2003 09:12:47 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Tjah-0000gN-00 for ; Wed, 01 Jan 2003 09:11:27 -0500 Date: Wed, 1 Jan 2003 09:11:26 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/8237: Review wanted! Message-ID: <20030101141126.GA1352@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode I intend to apply this. But I wanted to check with the list first. I think that this test case can probably be simplified to one which doesn't mess around with printf and stdio.h. I would like help doing that, if it's considered a good idea. See PR c++/8237 for further information. * g++.dg/parse/parens1.C: New test. Index: g++.dg/parse/parens1.C =================================================================== RCS file: g++.dg/parse/parens1.C diff -N g++.dg/parse/parens1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parens1.C 1 Jan 2003 14:06:33 -0000 @@ -0,0 +1,20 @@ +/* PR c++/8237 */ +/* { dg-do compile } */ +#include + +class A { +public: + A() { printf("Acon\n"); } +}; + +class B { +public: + B(A a) { printf("BAcon\n"); } + void form() { printf("Bform\n"); } +}; + +int main() { + // This used to give a parse error. + B(A()).form(); +} + From gcc-patches-return-74832-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:19:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27339 invoked by alias); 1 Jan 2003 14:19:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27331 invoked from network); 1 Jan 2003 14:19:22 -0000 Received: from unknown (HELO smtp1.cp.tin.it) (212.216.176.221) by 209.249.29.67 with SMTP; 1 Jan 2003 14:19:22 -0000 Received: from unitus.it (62.211.201.69) by smtp1.cp.tin.it (6.5.029) id 3DEDBCA0009CB8D8; Wed, 1 Jan 2003 15:19:08 +0100 Message-ID: <3E12F942.7000100@unitus.it> Date: Wed, 01 Jan 2003 15:20:50 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Nathanael Nerode CC: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/8237: Review wanted! References: <20030101141126.GA1352@doctormoo> In-Reply-To: <20030101141126.GA1352@doctormoo> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Nathanael Nerode wrote: >I intend to apply this. > >But I wanted to check with the list first. I think that this test case can >probably be simplified to one which doesn't mess around with printf and >stdio.h. I would like help doing that, if it's considered a good idea. > What about (this is the common practice for such cases in the testsuite): extern "C" int printf (const char *, ...); class A { public: A() { printf("Acon\n"); } }; class B { public: B(A a) { printf("BAcon\n"); } void form() { printf("Bform\n"); } }; int main() { // This used to give a parse error. B(A()).form(); } ??? Paolo. From gcc-patches-return-74833-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:31:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28996 invoked by alias); 1 Jan 2003 14:31:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28989 invoked from network); 1 Jan 2003 14:31:20 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.169) by 209.249.29.67 with SMTP; 1 Jan 2003 14:31:20 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01EV7F17094 for ; Wed, 1 Jan 2003 09:31:07 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TjsR-0001zs-00 for ; Wed, 01 Jan 2003 09:29:47 -0500 Date: Wed, 1 Jan 2003 09:29:47 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/3406 Message-ID: <20030101142947.GA7677@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. Note that I'm waiting for some decisions on how to do parens1.C. :-) * g++.dg/parse/parens2.C: New test. Index: g++.dg/parse/parens2.C =================================================================== RCS file: g++.dg/parse/parens2.C diff -N g++.dg/parse/parens2.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parens2.C 1 Jan 2003 14:29:05 -0000 @@ -0,0 +1,9 @@ +/* PR c++/3406 */ +/* { dg-do compile } */ +int main() +{ + // The parentheses around the expression caused parse errors before 3.4. + ( int() > int() ); + return 0; +} + From gcc-patches-return-74834-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:36:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30375 invoked by alias); 1 Jan 2003 14:36:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30368 invoked from network); 1 Jan 2003 14:36:49 -0000 Received: from unknown (HELO smtp3.cp.tin.it) (212.216.176.223) by 209.249.29.67 with SMTP; 1 Jan 2003 14:36:49 -0000 Received: from unitus.it (62.211.201.69) by smtp3.cp.tin.it (6.5.029) id 3DDD788200F33371; Wed, 1 Jan 2003 15:36:35 +0100 Message-ID: <3E12FD59.6080705@unitus.it> Date: Wed, 01 Jan 2003 15:38:17 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Nathanael Nerode CC: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/3406 References: <20030101142947.GA7677@doctormoo> In-Reply-To: <20030101142947.GA7677@doctormoo> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Nathanael Nerode wrote: >Applied. Note that I'm waiting for some decisions on how to do parens1.C. > ;) Ok, so you don't like at all 'printf'... Next try: /* PR c++/8237 */ /* { dg-do compile } */ class A { public: A() {} }; class B { public: B(A a) {} void form() {} }; int main() { // This used to give a parse error. B(A()).form(); } From gcc-patches-return-74835-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:39:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31516 invoked by alias); 1 Jan 2003 14:39:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31507 invoked from network); 1 Jan 2003 14:39:01 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 1 Jan 2003 14:39:01 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h01EcH1F032661; Wed, 1 Jan 2003 15:38:17 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h01EcGvF032660; Wed, 1 Jan 2003 15:38:16 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Nathanael Nerode Cc: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/3406 References: <20030101142947.GA7677@doctormoo> From: Gabriel Dos Reis In-Reply-To: <20030101142947.GA7677@doctormoo> Organization: Integrable Solutions Date: 01 Jan 2003 15:38:16 +0100 Message-ID: Lines: 10 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: | Applied. Note that I'm waiting for some decisions on how to do parens1.C. | :-) This testcase is already extistent in the testsuite. See http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01439.html -- Gaby From gcc-patches-return-74836-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:44:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 849 invoked by alias); 1 Jan 2003 14:44:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 839 invoked from network); 1 Jan 2003 14:44:37 -0000 Received: from unknown (HELO ngate.noida.hcltech.com) (202.54.110.230) by 209.249.29.67 with SMTP; 1 Jan 2003 14:44:37 -0000 Received: from exch-01.noida.hcltech.com (exch-01 [204.160.254.29]) by ngate.noida.hcltech.com (8.9.3/8.9.3) with ESMTP id UAA12208; Wed, 1 Jan 2003 20:14:53 +0530 Received: by exch-01.noida.hcltech.com with Internet Mail Service (5.5.2656.59) id ; Wed, 1 Jan 2003 20:08:52 +0530 Message-ID: From: "Naveen Sharma, Noida" To: gcc-patches@gcc.gnu.org Cc: Zack Weinberg , Jan Hubicka , Joern Rennecke , Alexandre Oliva , Gary Funck , Joe Buck Subject: Stack Reorganization Patch Date: Wed, 1 Jan 2003 20:08:51 +0530 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2B1A3.80C25440" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2B1A3.80C25440 Content-Type: text/plain; charset="iso-8859-1" Hi Everyone, Some time back we had a discussion on layout of locals on stack at (http://gcc.gnu.org/ml/gcc/2002-05/threads.html#02838). With that in mind, here is a patch which delays assignment of hard stack slots till after register allocation. It works as follows. A call to assign_stack_local_1 is intercepted and we return a rtx of the form (mem:mode reg/f/c:Pmode regno) for each requested stack slot instead of normal form (mem:mode (plus:Pmode fp const_int offset)). Note that the special flag /c is used to tell that this is stack address pseudo. The register allocator should not try to allocate any hard reg for this because it is already a known stack slot.After register allocation, we sort the allocated stack slots by size and number of references and convert it to normal "fp + offset" form. We also have to mark them live at end of each basic block. I get some improvements in some benchmarks (5-6%) (but unfortunately some regressions too)with this patch and would like that people have a look at it and It would be great if it makes a useful feature. I have added the -fstack-reorg option to enable this patch at the moment so that it does not cause any problem with existing scheme of things and can be tested separately. In addition to using -fstack-reorg we need to define TARGET_REORGANIZE_STACK_P for a particular target to enable this feature. I would like to thank Zack Weinberg for the basic idea. And I would also thank Joern Rennecke, Alexandre Oliva, Joe Buck, Gary Funck, Richard Kenner, Jan Hubicka for useful inputs. Please let me know the issues, changes required so that this patch can be put in GCC. This part of the patch contains changes in existing gcc files. A new file gcc/stack_reorg.c is added. KNOWN PROBLEMS: * The feature does not work with "-fnew-ra" option at present. It can be fixed. I will be working on it. * Nested functions, Non Local Labels cannot be supported. So locals will not be reorganized if function contains nested functions or is itself a nested function. Please find attached gzip of the ChangeLog, the patch to existing files and the new file gcc/stack_reorg.c. Thanks for your precious attention. Best Regards, Naveen Sharma. ------_=_NextPart_000_01C2B1A3.80C25440 Content-Type: application/octet-stream; name="stack_reorg.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="stack_reorg.tar.gz" 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 GSAnwpuLqNA0Dm0oMWMT7lKkl++7jfMeUOleo/2qWW8ji0VnyjfOmYKNZh2URLPL9lw5b/65IUcK LXQzivLHZroWPg8ZJJBzmcu0Y8EDw3XjAkaQukLu0WKzV1I8DfrAEKtinLkYAIR9laRHGDf8mWq0 GqdV8tclVb562Tg56zR45PFdzTfDdsr/IbN8/QQNIHKLaxbMXBQOpyEDiegInoHxBqNYTxQ4nk01 BlpPg67A7JhCtuP+ZSEyYlkWwMVwFI6rgcL/1UoFY/xLCdWjRELtyDGNDbFYTbNNOPNVZtBqORwa vMYa8GU1efX2tKhN4qhh4Y/HVY+FCqv6CgjrqK2uo6brqPl11Jw6qNPwGivWvBh9AabVnLs/NoDF n7Fi/2vxUAz/tuxz3Dvcfn203WfTfdxuWU6QFXH5qvOOvgn7v0TaPwx9XygYj1k3xgGSyIi7TaXr vOVqPrvl22TAsM9N9Op5NWmhIoMqFimSq5bKVUvnonuSap5ZB9ls1PLeAluqNzmFvW9j1NFzrK8E W8hLgYmEY7RcxZBDpm2iyqYK/IYIGRfsJvyRyO4xiKZZGcL/khG0hQy9qQ+HJJLMF9qpio2zUBVh PAtbZwIOQOJbzLSGnQodq1JrsppSK2TZFZJiwVig4zQatQLSQTQbZBenmchcZl3MHAHB6g3kcs51 FdB2KhkqBuvrBa2i7QxZwc9oaJ9zTwpJ23eKR+Sa0SbtZoFxNtU5BkJG2HaDl1MT976lQ8LazlxG Ra5a5bPNGESb8tDF80RuB+3C54KsR3bHOSmaIzx+WWPX90mGJIWRxXVMCczeLH1kBdNHKyDrnvga lI++ysiN/OxpjD5qHYLeB9n6Ihz+fzQsx/pZP+tn/ayf9bN+1s/6WT/rZ/2sn/WzftbP+lk/62f9 rJ/1s37Wz/pZP+tn/ayf9bN+1s/6WT/rZ/2sn/WzftZP7vO/mlNrZwDwAAA= ------_=_NextPart_000_01C2B1A3.80C25440-- From gcc-patches-return-74837-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 14:58:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6937 invoked by alias); 1 Jan 2003 14:58:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6925 invoked from network); 1 Jan 2003 14:58:10 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 1 Jan 2003 14:58:10 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01Evwk09385 for ; Wed, 1 Jan 2003 09:57:58 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TkIP-00022J-00 for ; Wed, 01 Jan 2003 09:56:37 -0500 Date: Wed, 1 Jan 2003 09:56:37 -0500 To: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/3406 Message-ID: <20030101145637.GA7828@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode >| Applied. Note that I'm waiting for some decisions on how to do >parens1.C. >| :-) > >This testcase is already extistent in the testsuite. See > > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01439.html > >-- Gaby Rrargh. "angle-bracket" is a terrible name for this test, since a) the bug was actually related to parentheses and b) the '>' in this context is 'greater-than', not 'angle bracket'. I'm pulling my duplicate test out. But I'd like to rename this one. :-P --Nathanael From gcc-patches-return-74838-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:02:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7952 invoked by alias); 1 Jan 2003 15:02:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7945 invoked from network); 1 Jan 2003 15:02:46 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 1 Jan 2003 15:02:46 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01F2XF29201 for ; Wed, 1 Jan 2003 10:02:33 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TkMr-000237-00 for ; Wed, 01 Jan 2003 10:01:13 -0500 Date: Wed, 1 Jan 2003 10:01:13 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/8237, committed version Message-ID: <20030101150113.GA7867@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode * g++.dg/parse/parens1.C: New test. Index: g++.dg/parse/parens1.C =================================================================== RCS file: g++.dg/parse/parens1.C diff -N g++.dg/parse/parens1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parens1.C 1 Jan 2003 15:01:24 -0000 @@ -0,0 +1,18 @@ +/* PR c++/8237 */ +/* { dg-do compile } */ +class A { +public: + A() { } +}; + +class B { +public: + B(A a) { } + void form() { } +}; + +int main() { + // This used to give a parse error. + B(A()).form(); +} + From gcc-patches-return-74839-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:06:53 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8725 invoked by alias); 1 Jan 2003 15:06:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8715 invoked from network); 1 Jan 2003 15:06:49 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 1 Jan 2003 15:06:49 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01F6bk19824 for ; Wed, 1 Jan 2003 10:06:37 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TkQl-00023a-00 for ; Wed, 01 Jan 2003 10:05:15 -0500 Date: Wed, 1 Jan 2003 10:05:14 -0500 To: gcc-patches@gcc.gnu.org Subject: Re: [Java Patch] Fix copyright headers for Java Message-ID: <20030101150514.GA7907@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode This all seems obviously correct to me. I'm committing it. -- This patch fixes all those "GNU CC"s in the Java front end, and updates the copyright years with 2003. I also changed some files to say "This file is part of GCC", that seemed like the right thing to do but I'm not sure about it. Greetz Steven 2003-01-01 Steven Bosscher * Make-lang.in, boehm.c, buffer.c, buffer.h, builtins.c, class.c, config-lang.in, constants.c, convert.h, decl.c, except.c, expr.c, java-except.h, java-tree.h, javaop.def, jcf-parse.c, jcf-write.c, jv-scan.c, jvgenmain.c, jvspec.c, keyword.gperf, keyword.h, lang-options.h, lang-specs.h, lang.c, lex.c, lex.h, mangle.c, mangle_name.c, parse-scan.y, parse.h, parse.y, typeck.c, verify.c, xref.c, xref.h: Replace "GNU CC" with "GCC" in the copyright header. * check-init.c, gjavah.c, javaop.h, jcf-depend.c, jcf-dump.c, jcf-io.c, jcf-path.c, jcf-reader.c, jcf.h, zextract.c, zipfile.h: These files are "part of GCC". Also say "GCC" not "GNU CC". From gcc-patches-return-74840-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:12:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9766 invoked by alias); 1 Jan 2003 15:12:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9759 invoked from network); 1 Jan 2003 15:12:30 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 1 Jan 2003 15:12:30 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h01FBk1F000058; Wed, 1 Jan 2003 16:11:46 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h01FBkQ7000057; Wed, 1 Jan 2003 16:11:46 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Nathanael Nerode Cc: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/3406 References: <20030101145637.GA7828@doctormoo> From: Gabriel Dos Reis In-Reply-To: <20030101145637.GA7828@doctormoo> Organization: Integrable Solutions Date: 01 Jan 2003 16:11:46 +0100 Message-ID: Lines: 13 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: | b) the '>' in this context is 'greater-than', not 'angle bracket'. "angle bracket" happens to be an alternate spelling for ">"; I did a quick seack on Google and found that it also well known in Cokmputer Science. I also got the following interesting source: http://burks.brighton.ac.uk/burks/foldoc/75/5.htm -- Gaby From gcc-patches-return-74841-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:26:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13881 invoked by alias); 1 Jan 2003 15:26:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13864 invoked from network); 1 Jan 2003 15:26:13 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 1 Jan 2003 15:26:13 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 8011714641 for ; Wed, 1 Jan 2003 16:26:01 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18TkkU-0003Ym-00 for gcc-patches@gcc.gnu.org; Wed, 01 Jan 2003 16:25:38 +0100 To: gcc-patches@gcc.gnu.org Subject: Fix f77.rebuilt From: Andreas Jaeger Date: Wed, 01 Jan 2003 16:25:38 +0100 Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On the 3.3 branch I got: arthur:/builds/gcc/gcc/gcc:[0]$ make f77.rebuilt cd /cvs/gcc-3_3-branch/gcc/f; makeinfo -D BUGSONLY --no-header --no-split \ --no-validate -o BUGS bugs0.texi ./root.texi:1: @include `gcc-common.texi': No such file or directory. makeinfo: Removing output file `BUGS' due to errors; use --force to preserve. make: *** [/cvs/gcc-3_3-branch/gcc/f/BUGS] Error 2 The appended patch fixes this, I've applied it as obvious to both 3.3 and mainline after testing on i686-linux-gnu, Andreas 2003-01-01 Andreas Jaeger * f/Make-lang.in ($(srcdir)/f/BUGS): Add include path for gcc-common.texi. ($(srcdir)/f/NEWS): Likewise. ============================================================ Index: gcc/f/Make-lang.in --- gcc/f/Make-lang.in 23 Dec 2002 19:26:47 -0000 1.115 +++ gcc/f/Make-lang.in 1 Jan 2003 15:17:12 -0000 @@ -1,5 +1,5 @@ # Top level makefile fragment for GNU Fortran. -*-makefile-*- -# Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. #This file is part of GNU Fortran. @@ -226,11 +226,11 @@ f/ansify$(build_exeext): f/ansify.c bcon $(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi f/root.texi cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \ - --no-validate -o BUGS bugs0.texi + --no-validate -I../doc/include -o BUGS bugs0.texi $(srcdir)/f/NEWS: f/news0.texi f/news.texi f/root.texi cd $(srcdir)/f; $(MAKEINFO) -D NEWSONLY --no-header --no-split \ - --no-validate -o NEWS news0.texi + --no-validate -I../doc/include -o NEWS news0.texi f77.rebuilt: f/g77.info $(srcdir)/f/BUGS \ $(srcdir)/f/NEWS -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74842-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:36:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16286 invoked by alias); 1 Jan 2003 15:36:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16266 invoked from network); 1 Jan 2003 15:36:34 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 1 Jan 2003 15:36:34 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01FaMk21915 for ; Wed, 1 Jan 2003 10:36:22 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TktZ-000252-00 for ; Wed, 01 Jan 2003 10:35:01 -0500 Date: Wed, 1 Jan 2003 10:35:01 -0500 To: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/3406 Message-ID: <20030101153501.GA7995@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Gaby wrote: >Nathanael Nerode writes: > >| b) the '>' in this context is 'greater-than', not 'angle bracket'. ^^^^^^^^^^^^^^^ >"angle bracket" happens to be an alternate spelling for ">"; I did a Not exactly. See below. >quick seack on Google and found that it also well known in Cokmputer >Science. >I also got the following interesting source: > > http://burks.brighton.ac.uk/burks/foldoc/75/5.htm I will now be excessively pedantic. :-) When '>' is used *as a bracket*, as in template code: template Y (T) then it is correct to refer to it as 'angle bracket'. When it is used for the greater-than operator, as in if (y > x) then it is not correct to refer to it as 'angle bracket'. As the foldoc entry indicates, in traditional typography 'angle bracket' and 'greater than' have different characters. They happen to be represented by the same ASCII character, but they're still conceptually different. Similarly, look at the ASCII character "'" . This can be an apostrophe (it's an apostrophe here), a single quote ('What? A Single Quote?'), or a foot marker (I am 5'5" tall). Same character, but it's not really correct to use the wrong name for it in the wrong context. OK, I'm done being pedantic now. --Nathanael From gcc-patches-return-74843-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:40:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16996 invoked by alias); 1 Jan 2003 15:40:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16940 invoked from network); 1 Jan 2003 15:40:23 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.73.112) by 209.249.29.67 with SMTP; 1 Jan 2003 15:40:23 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id A25D55DBF; Wed, 1 Jan 2003 15:21:05 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id F1B01F867 for ; Wed, 1 Jan 2003 15:21:04 +0100 (CET) Date: Wed, 1 Jan 2003 15:21:03 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: [3.4-bi] DESTDIR support completed Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/Mixed; BOUNDARY="8323584-779724633-1041272924=:6103" Content-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-779724633-1041272924=:6103 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Dear GCC developers, here is DESTDIR support for the -rgcc-3_4-basic-improvements-branch, diffed against CVS as of 12/29. Support has been added for all current languages, including Ada, and for all platforms that use "configure"d dirs for installation, though I could check it only for ix86-pc-linux-gnu without Ada. Professional packagers are welcome to test (and use) it broadly. Some URLs for reference: 3.0.4: http://gcc.gnu.org/ml/gcc-patches/2002-03/msg01385.html 3.2: http://gcc.gnu.org/ml/gcc-patches/2002-10/msg00317.html ...: http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01378.html ...: http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01435.html This is the logical continuation, and hopefully it's the last time that I have to add DESTDIR support to GCC. The contribution consists of the following attached files: 1. `destdir.diff' modifies all Makefile sources related to installation, including `Makefile.tpl' (requiring AutoGen) and `libstdc++-v3/include/Makefile.am' (requiring Automake-1.4p5). 2. `destdir-doc.diff' adds documentation to `gcc/doc/install.texi'. Please review it, it also tries to explain tooldir issues. 3. `destdir-no-am.diff' simulates the effect of regenerating `libstdc++-v3/include/Makefile.in' from its `Makefile.am'. This is provided because the configure/Makefile suite is very sensitive to changes in Autotool versions. It cannot simply be "autoreconf"ed to Autoconf-2.52/Automake-1.6.x, for example. 4. Just for completeness, `destdir-no-ag.diff' contains the diff on `Makefile.in' resulting from "autogen Makefile.def". The patches are in "cvs diff -u" format, intended to be piped to "patch -p0" within the toplevel directory of a full 3.4-bi gcc checkout. Some notes again: - I have followed Automake's style in directly modifying the ultimate installation commands by prepending $(DESTDIR) to the destination specifiers. Also like newer Automakes, I have not defined a default value for DESTDIR in any `Makefile.in', in order to let Make import that variable from the environment and thus share it with sub-makes. Additionally, I have added "DESTDIR=$(DESTDIR)" to the FLAGS_TO_PASS variables defined in some `Makefile.in's (resp. `Makefile.tpl'). BTW: `gcc/ada/{Make-lang,Makefile}.in' do not define FLAGS_TO_PASS, but use it. Is that correct? (If you add a definition, don't forget DESTDIR then.) - Care has been taken to make the $(DESTDIR) magic work with all choices for $(LN). In some places this required replacing absolute linking like "$(LN) $(bindir)/xxx $(bindir)/yyy" with relative linking as in "(cd $(DESTDIR)$(bindir) && \ $(LN) xxx yyy)". - In `gcc/Makefile.in', the directory creating routines for the `installdirs' target have been changed from a series of conditional mkdirs to a smarter loop, in order to support arbitrary choices of installation dirs. - Some installation routines (e.g. in `gcc/{ada,cp}/Make-lang.in' and `gcc/Makefile.in') try to be smart and duplicate executables into additional tooldirs if these exist. The patches also redirect the tests, so packagers who want to have tooldir stuff will have to create the tooldirs in the DESTDIR tree before doing a DESTDIRed installation. I prefer this approach because it lets the packager control that detail, independent of the situation on the particular build system. (E.g. in SuSE Linux, the tooldirs exist, but seem to be solely used by the binutils.) As another application, DESTDIR might hold a path that shall finally become a chroot jail. Testing for tooldirs within the DESTDIR tree is the appropriate method for that. The alternative would be: Test for system's tooldir as before, then create its DESTDIRed analogue if necessary (new), and do the DESTDIRed installation. This may be more or less convenient than the above approach, but it cannot be influenced by the packager. - Tests for (files in) system directories that are examined or executed in the course of the build process are not redirected. This means that neither ${build_tooldir} nor ${SYSTEM_HEADER_DIR} get $(DESTDIR) prepended. Similar reasoning applies to the RANLIB_FOR_TARGET setting in `gcc/config/m68hc11/t-m68hc11-gas' which remains unchanged. We could discuss whether `contrib/test_installed' should want, and would work with, ${DESTDIR} before its uses of ${prefix}; my guess was "no". - GCC-3.4-bi additionally installs fixincludes utilities. I have added ${DESTDIR} support to `gcc/mkheaders.in' as well, so that the installed `mkheaders' script can be run within the relocated installation image, provided that DESTDIR has been set appropriately in the environment. Note that the actual `fixincl' program uses DESTDIR for another purpose (see `gcc/fixinc/fixlib.h'). The wrapper script `fixinc.sh', as called by "mkheaders", overrides DESTDIR accordingly. Hence "mkheaders" and "fixincl" run in different environments without conflicts. Nevertheless, this may be confusing. I'd suggest renaming the variable inside the fixinc* utilities. You may as well decide to not patch `gcc/mkheaders.in', it's not critical. - While fixing the `install-data-local' rule in `libstdc++-v3/include/Makefile.am', I encountered a couple of mkinstalldirs commands unused by subsequent installation commands. In the latter, I changed the installation destination to use the previously made subdirs (${c_base_builddir} and ${std_builddir}), and then found that these evaluate to "." only, so there is no actual change of behaviour, but the commands are more consistent now. - In order to find the places that needed changing, and to check for completeness, I used two different methods. One is to build a "positives" list of variables that hold installation directories, and to scan the tree for uses without $(DESTDIR). To obtain the list, I started with `configure's installation directory variables, then scanned the tree for references to these variables within variable definitions, then extended the list accordingly, and rescanned. The second approach employed the `scaninst.pl' script introduced earlier. That method looks for installation commands and maintains a "negatives" list of directory variables that point into the build tree. Now that the DESTDIRification has been worked out, both approaches find less than one screenful of suspicious commands, which can be verified easily. (Most prominent examples are variables that hide DESTDIR in their definition, as `Makefile.tpl's MAKEDIRS, `gcc/mklibgcc.in's ldir, and `libstdc++-v3/po/Makefile.am's locale_installdir.) - To review the patch, you will want to filter out mere insertions of $(DESTDIR). The following can get you started: comm -23 <(sed '/^+/d; s:^-: :' destdir.diff) <(sed \ '/^-/d; /^+/s:\$\+[{(]DESTDIR[)}]::g; s:^+: :' destdir.diff) \ | less -S (The <(...) notation is Bash syntax for a named pipe.) This command outputs old (not new) lines that have changed in more aspects than just DESTDIR insertions. The output is pretty short, and you should be able to find the explanation in the above notes. In any case, you should then be able to look up those few places in `destdir.diff' to get all details. Here is a suggestion for the ChangeLog entry. I have not taken the effort to enumerate all modified rules or variables, so there is room for criticism. However, message size would explode otherwise. * Makefile.tpl, gcc/Makefile.in, gcc/ada/Make-lang.in, gcc/ada/Makefile.in, gcc/config/alpha/t-osf4, gcc/config/arc/t-arc, gcc/config/arm/t-netbsd, gcc/config/ia64/t-hpux, gcc/config/mips/t-iris5-6, gcc/config/pa/t-hpux-shlib, gcc/config/rs6000/t-aix43, gcc/config/rs6000/t-aix52, gcc/config/t-slibgcc-elf-ver, gcc/config/t-slibgcc-sld, gcc/cp/Make-lang.in, gcc/f/Make-lang.in, gcc/java/Make-lang.in, gcc/mkheaders.in, gcc/mklibgcc.in, gcc/treelang/Make-lang.in, libf2c/Makefile.in, libiberty/Makefile.in, libobjc/Makefile.in, libstdc++-v3/include/Makefile.am: Add DESTDIR support to all install/uninstall commands. Pass DESTDIR to sub-makes via FLAGS_TO_PASS. * gcc/doc/install.texi: Describe DESTDIR and tooldir issues. * Makefile.in: Regenerate. * libstdc++-v3/include/Makefile.in: Regenerate. Regards, Christian Cornelssen --8323584-779724633-1041272924=:6103 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir.diff" SW5kZXg6IE1ha2VmaWxlLnRwbA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9NYWtl ZmlsZS50cGwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUuMi4yNw0KZGlm ZiAtdSAtcjEuNS4yLjI3IE1ha2VmaWxlLnRwbA0KLS0tIE1ha2VmaWxlLnRw bAkxMyBEZWMgMjAwMiAyMjo1ODowNiAtMDAwMAkxLjUuMi4yNw0KKysrIE1h a2VmaWxlLnRwbAkyOSBEZWMgMjAwMiAxMjozNDo0OCAtMDAwMA0KQEAgLTM4 OSw2ICszODksNyBAQA0KIAkiQ1hYRkxBR1M9JChDWFhGTEFHUykiIFwNCiAJ IkNYWEZMQUdTX0ZPUl9UQVJHRVQ9JChDWFhGTEFHU19GT1JfVEFSR0VUKSIg XA0KIAkiQ1hYX0ZPUl9UQVJHRVQ9JChDWFhfRk9SX1RBUkdFVCkiIFwNCisJ IkRFU1RESVI9JChERVNURElSKSIgXA0KIAkiRExMVE9PTF9GT1JfVEFSR0VU PSQoRExMVE9PTF9GT1JfVEFSR0VUKSIgXA0KIAkiSU5TVEFMTD0kKElOU1RB TEwpIiBcDQogCSJJTlNUQUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpIiBcDQpA QCAtNjMzLDcgKzYzNCw3IEBADQogaW5zdGFsbC1pbmZvOiBkby1pbnN0YWxs LWluZm8gZGlyLmluZm8NCiAJcz1gY2QgJChzcmNkaXIpOyAke1BXRH1gOyBl eHBvcnQgczsgXA0KIAlpZiBbIC1mIGRpci5pbmZvIF0gOyB0aGVuIFwNCi0J ICAkKElOU1RBTExfREFUQSkgZGlyLmluZm8gJChpbmZvZGlyKS9kaXIuaW5m byA7IFwNCisJICAkKElOU1RBTExfREFUQSkgZGlyLmluZm8gJChERVNURElS KSQoaW5mb2RpcikvZGlyLmluZm8gOyBcDQogCWVsc2UgdHJ1ZSA7IGZpDQog DQogbG9jYWwtY2xlYW46DQpAQCAtNzYzLDcgKzc2NCw3IEBADQogDQogZGly LmluZm86IGRvLWluc3RhbGwtaW5mbw0KIAlpZiBbIC1mICQoc3JjZGlyKS90 ZXhpbmZvL2dlbi1pbmZvLWRpciBdIDsgdGhlbiBcDQotCSAgJChzcmNkaXIp L3RleGluZm8vZ2VuLWluZm8tZGlyICQoaW5mb2RpcikgJChzcmNkaXIpL3Rl eGluZm8vZGlyLmluZm8tdGVtcGxhdGUgPiBkaXIuaW5mby5uZXcgOyBcDQor CSAgJChzcmNkaXIpL3RleGluZm8vZ2VuLWluZm8tZGlyICQoREVTVERJUikk KGluZm9kaXIpICQoc3JjZGlyKS90ZXhpbmZvL2Rpci5pbmZvLXRlbXBsYXRl ID4gZGlyLmluZm8ubmV3IDsgXA0KIAkgIG12IC1mIGRpci5pbmZvLm5ldyBk aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgXA0KIAlmaQ0KSW5kZXg6IGdj Yy9NYWtlZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp bGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvTWFrZWZp bGUuaW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjkzOS4yLjIwDQpkaWZm IC11IC1yMS45MzkuMi4yMCBNYWtlZmlsZS5pbg0KLS0tIGdjYy9NYWtlZmls ZS5pbgkxMSBEZWMgMjAwMiAyMzowMzoyMyAtMDAwMAkxLjkzOS4yLjIwDQor KysgZ2NjL01ha2VmaWxlLmluCTI5IERlYyAyMDAyIDE5OjA3OjU5IC0wMDAw DQpAQCAtNjg4LDYgKzY4OCw3IEBADQogCSJCSVNPTj0kKEJJU09OKSIgXA0K IAkiQklTT05GTEFHUz0kKEJJU09ORkxBR1MpIiBcDQogCSJDRkxBR1M9JChD RkxBR1MpICQoV0FSTl9DRkxBR1MpIiBcDQorCSJERVNURElSPSQoREVTVERJ UikiIFwNCiAJIkdDQ19GT1JfVEFSR0VUPSQoR0NDX0ZPUl9UQVJHRVQpIiBc DQogCSJMREZMQUdTPSQoTERGTEFHUykiIFwNCiAJIkZMRVg9JChGTEVYKSIg XA0KQEAgLTIzODUsNyArMjM4Niw3IEBADQogDQogLlBIT05ZOiBpbnN0YWxs LWdjYy10b29sZGlyDQogaW5zdGFsbC1nY2MtdG9vbGRpcjoNCi0JJChTSEVM TCkgJHtzcmNkaXJ9L21raW5zdGFsbGRpcnMgJChnY2NfdG9vbGRpcikNCisJ JChTSEVMTCkgJHtzcmNkaXJ9L21raW5zdGFsbGRpcnMgJChERVNURElSKSQo Z2NjX3Rvb2xkaXIpDQogDQogIyBCdWlsZCBmaXhlZCBjb3BpZXMgb2Ygc3lz dGVtIGZpbGVzLg0KIHN0bXAtZml4aW5jOiBmaXhpbmMuc2ggZ3N5c2xpbWl0 cy5oDQpAQCAtMjc3NSwxNzMgKzI3NzYsMTYzIEBADQogIyBIYW5kbGUgY3Bw IGluc3RhbGxhdGlvbi4NCiBpbnN0YWxsLWNwcDogY3BwJChleGVleHQpDQog CS1pZiBbIC1mIGdjYy1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAg cm0gLWYgJChiaW5kaXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpOyBc DQotCSAgJChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkg JChiaW5kaXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAg cm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKENQUF9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KKwkgICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3NTUgY3Bw JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChDUFBfQ1JPU1NfTkFN RSkkKGV4ZWV4dCk7IFwNCiAJICBpZiBbIHgkKGNwcF9pbnN0YWxsX2Rpcikg IT0geCBdOyB0aGVuIFwNCi0JICAgIHJtIC1mICQocHJlZml4KS8kKGNwcF9p bnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3NTUgY3BwJChleGVleHQpICQo cHJlZml4KS8kKGNwcF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkk KGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKHByZWZpeCkv JChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNwcCQoZXhl ZXh0KSAkKERFU1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8k KENQUF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KIAkgIGVsc2UgdHJ1ZTsg Zmk7IFwNCiAJZWxzZSBcDQotCSAgcm0gLWYgJChiaW5kaXIpLyQoQ1BQX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAkKElOU1RBTExfUFJPR1JB TSkgLW0gNzU1IGNwcCQoZXhlZXh0KSAkKGJpbmRpcikvJChDUFBfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJp bmRpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICQo SU5TVEFMTF9QUk9HUkFNKSAtbSA3NTUgY3BwJChleGVleHQpICQoREVTVERJ UikkKGJpbmRpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K IAkgIGlmIFsgeCQoY3BwX2luc3RhbGxfZGlyKSAhPSB4IF07IHRoZW4gXA0K LQkgICAgcm0gLWYgJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQ UF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgLW0gNzU1IGNwcCQoZXhlZXh0KSAkKHByZWZpeCkvJChjcHBf aW5zdGFsbF9kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwN CisJICAgIHJtIC1mICQoREVTVERJUikkKHByZWZpeCkvJChjcHBfaW5zdGFs bF9kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3NTUgY3BwJChleGVleHQpICQoREVT VERJUikkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCiAJICBlbHNlIHRydWU7IGZpOyBcDQog CWZpDQogDQogIyBDcmVhdGUgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcmll cy4NCisjICQobGliZGlyKS9nY2MtbGliL2luY2x1ZGUgaXNuJ3QgY3VycmVu dGx5IHNlYXJjaGVkIGJ5IGNwcC4NCiBpbnN0YWxsZGlyczoNCi0JLWlmIFsg LWQgJChwcmVmaXgpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQocHJl Zml4KSA7IGNobW9kIGErcnggJChwcmVmaXgpIDsgZmkNCi0JLWlmIFsgLWQg JChleGVjX3ByZWZpeCkgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJChl eGVjX3ByZWZpeCkgOyBjaG1vZCBhK3J4ICQoZXhlY19wcmVmaXgpIDsgZmkN Ci0JLWlmIFsgLWQgJChsaWJkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1r ZGlyICQobGliZGlyKSA7IGNobW9kIGErcnggJChsaWJkaXIpIDsgZmkNCi0J LWlmIFsgLWQgJChsaWJkaXIpL2djYy1saWIgXSA7IHRoZW4gdHJ1ZSA7IGVs c2UgbWtkaXIgJChsaWJkaXIpL2djYy1saWIgOyBjaG1vZCBhK3J4ICQobGli ZGlyKS9nY2MtbGliIDsgZmkNCi0jIFRoaXMgZGlyIGlzbid0IGN1cnJlbnRs eSBzZWFyY2hlZCBieSBjcHAuDQotIwktaWYgWyAtZCAkKGxpYmRpcikvZ2Nj LWxpYi9pbmNsdWRlIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQobGli ZGlyKS9nY2MtbGliL2luY2x1ZGUgOyBjaG1vZCBhK3J4ICQobGliZGlyKS9n Y2MtbGliL2luY2x1ZGUgOyBmaQ0KLQktZmRpcj0gOyBmb3IgZGlyIGluIGBl Y2hvICQobGlic3ViZGlyKSB8IHRyICcvJyAnICdgOyBkbyBcDQotCSAgZmRp cj0kJHtmZGlyfS8kJHtkaXJ9OyBcDQotCSAgaWYgWyAtZCAkJHtmZGlyfSBd IDsgdGhlbiB0cnVlIDsgZWxzZSBta2RpciAkJHtmZGlyfTsgY2htb2QgYSty eCAkJHtmZGlyfTsgZmkgOyBcDQorCS1mb3IgZCBpbiAkKGxpYnN1YmRpcikg JChiaW5kaXIpICQoaW5jbHVkZWRpcikgJChpbmZvZGlyKSAkKHNsaWJkaXIp ICQobWFuMWRpcikgJChtYW43ZGlyKTsgZG8gXA0KKwkgIGZkaXI9OyBmb3Ig ZGlyIGluIGBlY2hvICIkKERFU1RESVIpJCRkIiB8IHRyICcvJyAnICdgOyBk byBcDQorCSAgICBmZGlyPSQke2ZkaXJ9LyQke2Rpcn07IFwNCisJICAgIGlm IFsgLWQgIiQke2ZkaXJ9IiBdIDsgdGhlbiB0cnVlIDsgXA0KKwkgICAgZWxz ZSBta2RpciAiJCR7ZmRpcn0iIHx8IGJyZWFrOyBjaG1vZCBhK3J4ICIkJHtm ZGlyfSI7IGZpIDsgXA0KKwkgIGRvbmU7IFwNCiAJZG9uZQ0KLQktaWYgWyAt ZCAkKGJpbmRpcikgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJChiaW5k aXIpIDsgY2htb2QgYStyeCAkKGJpbmRpcikgOyBmaQ0KLQktaWYgWyAtZCAk KGluY2x1ZGVkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQoaW5j bHVkZWRpcikgOyBjaG1vZCBhK3J4ICQoaW5jbHVkZWRpcikgOyBmaQ0KLQkt aWYgWyAtZCAkKGluZm9kaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGly ICQoaW5mb2RpcikgOyBjaG1vZCBhK3J4ICQoaW5mb2RpcikgOyBmaQ0KLQkt aWYgWyAtZCAkKHNsaWJkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGly ICQoc2xpYmRpcikgOyBjaG1vZCBhK3J4ICQoc2xpYmRpcikgOyBmaQ0KLSMg V2UgZG9uJ3QgdXNlIG1rZGlyIC1wIHRvIGNyZWF0ZSB0aGUgcGFyZW50cyBv ZiBtYW4xZGlyLA0KLSMgYmVjYXVzZSBzb21lIHN5c3RlbXMgZG9uJ3Qgc3Vw cG9ydCBpdC4NCi0jIEluc3RlYWQsIHdlIHVzZSB0aGlzIHRlY2huaXF1ZSB0 byBjcmVhdGUgdGhlIGltbWVkaWF0ZSBwYXJlbnQgb2YgbWFuMWRpci4NCi0J LXBhcmVudD1gZWNobyAkKG1hbjFkaXIpfHNlZCAtZSAnc0AvW14vXSokJEBA J2A7IFwNCi0JaWYgWyAtZCAkJHBhcmVudCBdIDsgdGhlbiB0cnVlIDsgZWxz ZSBta2RpciAkJHBhcmVudCA7IGNobW9kIGErcnggJCRwYXJlbnQgOyBmaQ0K LQktaWYgWyAtZCAkKG1hbjFkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1r ZGlyICQobWFuMWRpcikgOyBjaG1vZCBhK3J4ICQobWFuMWRpcikgOyBmaQ0K LQktaWYgWyAtZCAkKG1hbjdkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1r ZGlyICQobWFuN2RpcikgOyBjaG1vZCBhK3J4ICQobWFuN2RpcikgOyBmaQ0K IA0KICMgSW5zdGFsbCB0aGUgY29tcGlsZXIgZXhlY3V0YWJsZXMgYnVpbHQg ZHVyaW5nIGNyb3NzIGNvbXBpbGF0aW9uLg0KIGluc3RhbGwtY29tbW9uOiBu YXRpdmUgJChFWFRSQV9QQVJUUykgbGFuZy5pbnN0YWxsLWNvbW1vbg0KIAlm b3IgZmlsZSBpbiAkKENPTVBJTEVSUyk7IGRvIFwNCiAJICBpZiBbIC1mICQk ZmlsZSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAkKGxpYnN1YmRpcikvJCRm aWxlOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlICQobGli c3ViZGlyKS8kJGZpbGU7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGxp YnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkg JCRmaWxlICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQogCSAg ZWxzZSB0cnVlOyBcDQogCSAgZmk7IFwNCiAJZG9uZQ0KIAlmb3IgZmlsZSBp biAkKEVYVFJBX1BBU1NFUykgJChFWFRSQV9QUk9HUkFNUykgJChVU0VfQ09M TEVDVDIpIC4uOyBkbyBcDQogCSAgaWYgWyB4IiQkZmlsZSIgIT0geC4uIF07 IHRoZW4gXA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0K LQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKGxpYnN1YmRpcikv JCRmaWxlOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJzdWJkaXIp LyQkZmlsZTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAk KERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KIAkgIGVsc2UgdHJ1 ZTsgZmk7IFwNCiAJZG9uZQ0KIAlmb3IgZmlsZSBpbiAkKEVYVFJBX1BBUlRT KSAuLjsgZG8gXA0KIAkgIGlmIFsgeCIkJGZpbGUiICE9IHguLiBdOyB0aGVu IFwNCi0JICAgIHJtIC1mICQobGlic3ViZGlyKS8kJGZpbGU7IFwNCi0JICAg ICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChsaWJzdWJkaXIpLyQkZmlsZTsg XA0KLQkgICAgY2htb2QgYS14ICQobGlic3ViZGlyKS8kJGZpbGU7IFwNCisJ ICAgIHJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQor CSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikkKGxpYnN1 YmRpcikvJCRmaWxlOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElSKSQo bGlic3ViZGlyKS8kJGZpbGU7IFwNCiAJICBlbHNlIHRydWU7IGZpOyBcDQog CWRvbmUNCiAjIERvbid0IG1lc3Mgd2l0aCBzcGVjcyBpZiBpdCBkb2Vzbid0 IGV4aXN0IHlldC4NCiAJLWlmIFsgLWYgc3BlY3MgXSA7IHRoZW4gXA0KLQkg IHJtIC1mICQobGlic3ViZGlyKS9zcGVjczsgXA0KLQkgICQoSU5TVEFMTF9E QVRBKSBzcGVjcyAkKGxpYnN1YmRpcikvc3BlY3M7IFwNCi0JICBjaG1vZCBh LXggJChsaWJzdWJkaXIpL3NwZWNzOyBcDQorCSAgcm0gLWYgJChERVNURElS KSQobGlic3ViZGlyKS9zcGVjczsgXA0KKwkgICQoSU5TVEFMTF9EQVRBKSBz cGVjcyAkKERFU1RESVIpJChsaWJzdWJkaXIpL3NwZWNzOyBcDQorCSAgY2ht b2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvc3BlY3M7IFwNCiAJZmkN CiAjIEluc3RhbGwgcHJvdG9pemUgaWYgaXQgd2FzIGNvbXBpbGVkLg0KIAkt aWYgWyAtZiBwcm90b2l6ZSQoZXhlZXh0KSBdOyBcDQogCXRoZW4gXA0KIAkg ICAgaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkgXSA7IHRoZW4gXA0KLQkJ cm0gLWYgJChiaW5kaXIpLyQoUFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4 dCk7IFwNCi0JCSQoSU5TVEFMTF9QUk9HUkFNKSBwcm90b2l6ZSQoZXhlZXh0 KSAkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQoZXhlZXh0KTsg XA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9TU19OQU1F KSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHVucHJvdG9p emUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9TU19OQU1F KSQoZXhlZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8k KFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCQkkKElOU1RB TExfUFJPR1JBTSkgcHJvdG9pemUkKGV4ZWV4dCkgJChERVNURElSKSQoYmlu ZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCQly bSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHVucHJv dG9pemUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9J WkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCiAJICAgIGVsc2UgXA0KLQkJ cm0gLWYgJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXplJChleGVl eHQpICQoYmluZGlyKS8kKFBST1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCk7IFwNCi0JCXJtIC1mICQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHVu cHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQorCQlybSAtZiAkKERFU1RESVIpJChi aW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K KwkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXplJChleGVleHQpICQoREVT VERJUikkKGJpbmRpcikvJChQUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCQlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoVU5QUk9U T0laRV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCQkkKElOU1RBTExf UFJPR1JBTSkgdW5wcm90b2l6ZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5k aXIpLyQoVU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQog CSAgICBmaSA7IFwNCi0JICAgIHJtIC1mICQobGlic3ViZGlyKS9TWVNDQUxM Uy5jLlg7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSBTWVNDQUxMUy5jLlgg JChsaWJzdWJkaXIpL1NZU0NBTExTLmMuWDsgXA0KLQkgICAgY2htb2QgYS14 ICQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwNCisJICAgIHJtIC1mICQo REVTVERJUikkKGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQorCSAgICAk KElOU1RBTExfREFUQSkgU1lTQ0FMTFMuYy5YICQoREVTVERJUikkKGxpYnN1 YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNU RElSKSQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwNCiAJZmkNCiAjIElu c3RhbGwgZ2NvdiBpZiBpdCB3YXMgY29tcGlsZWQuDQogCS1pZiBbIC1mIGdj b3YkKGV4ZWV4dCkgXTsgXA0KIAl0aGVuIFwNCi0JICAgIHJtIC1mICQoYmlu ZGlyKS9nY292JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JB TSkgZ2NvdiQoZXhlZXh0KSAkKGJpbmRpcikvJChHQ09WX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGJpbmRp cikvZ2NvdiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IGdjb3YkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKEdDT1ZfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KIAlmaQ0KLQkkKElOU1RBTExfU0NS SVBUKSBnY2NidWcgJChiaW5kaXIpLyQoR0NDQlVHX0lOU1RBTExfTkFNRSkN CisJJChJTlNUQUxMX1NDUklQVCkgZ2NjYnVnICQoREVTVERJUikkKGJpbmRp cikvJChHQ0NCVUdfSU5TVEFMTF9OQU1FKQ0KIA0KICMgSW5zdGFsbCB0aGUg ZHJpdmVyIHByb2dyYW0gYXMgJCh0YXJnZXRfYWxpYXMpLWdjYywgDQogIyAk KHRhcmdldC1hbGlhcyktZ2NjLSQodmVyc2lvbikNCiAjIGFuZCBhbHNvIGFz IGVpdGhlciBnY2MgKGlmIG5hdGl2ZSkgb3IgJChnY2NfdG9vbGRpcikvYmlu L2djYy4NCiBpbnN0YWxsLWRyaXZlcjogaW5zdGFsbGRpcnMgeGdjYyQoZXhl ZXh0KQ0KIAktaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkgXSA7IHRoZW4g XA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQoZXhl ZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jvc3MkKGV4 ZWV4dCkgJChiaW5kaXIpLyQoR0NDX0NST1NTX05BTUUpJChleGVleHQpOyBc DQotCSAgcm0gLWYgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtJCh2 ZXJzaW9uKTsgXA0KLQkgICQoTE4pICQoYmluZGlyKS8kKEdDQ19DUk9TU19O QU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0k KHZlcnNpb24pIDsgXA0KLQkgIGlmIFsgLWQgJChnY2NfdG9vbGRpcikvYmlu Ly4gXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChnY2NfdG9vbGRpcikvYmlu L2djYyQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdj Yy1jcm9zcyQoZXhlZXh0KSAkKGdjY190b29sZGlyKS9iaW4vZ2NjJChleGVl eHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEdDQ19D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICQoSU5TVEFMTF9QUk9HUkFN KSBnY2MtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKEdD Q19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJ UikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNpb24pOyBc DQorCSAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJICAgICQo TE4pICQoR0NDX0NST1NTX05BTUUpJChleGVleHQpICQodGFyZ2V0X2FsaWFz KS1nY2MtJCh2ZXJzaW9uKSApOyBcDQorCSAgaWYgWyAtZCAkKERFU1RESVIp JChnY2NfdG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4dCk7IFwN CiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWVsc2UgXA0KLQkgIHJtIC1mICQo YmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAg JChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkgJChiaW5kaXIpLyQo R0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICBybSAtZiAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNpb24pOyBcDQotCSAg JChMTikgJChiaW5kaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKSA7IFwN Ci0JICBybSAtZiAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy10bXAk KGV4ZWV4dCk7IFwNCi0JICAkKExOKSAkKGJpbmRpcikvJChHQ0NfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdj Yy10bXAkKGV4ZWV4dCk7IFwNCi0JICBtdiAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWdjYy10bXAkKGV4ZWV4dCkgJChiaW5kaXIpLyQoR0NDX1RBUkdF VF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgcm0gLWYgJChERVNU RElSKSQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQorCSAgJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ2NjLSQodmVyc2lvbik7IFwNCisJICAoIGNkICQoREVTVERJUikkKGJp bmRpcikgJiYgXA0KKwkgICAgJChMTikgJChHQ0NfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLSQodmVyc2lvbikgKTsgXA0K KwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMp LWdjYy10bXAkKGV4ZWV4dCk7IFwNCisJICAoIGNkICQoREVTVERJUikkKGJp bmRpcikgJiYgXA0KKwkgICAgJChMTikgJChHQ0NfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLXRtcCQoZXhlZXh0KSAmJiBc DQorCSAgICBtdiAtZiAkKHRhcmdldF9hbGlhcyktZ2NjLXRtcCQoZXhlZXh0 KSAkKEdDQ19UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KSApOyBcDQog CWZpDQogDQogIyBJbnN0YWxsIHRoZSBpbmZvIGZpbGVzLg0KICMgJChJTlNU QUxMX0RBVEEpIG1pZ2h0IGJlIGEgcmVsYXRpdmUgcGF0aG5hbWUsIHNvIHdl IGNhbid0IGNkIGludG8gc3JjZGlyDQogIyB0byBkbyB0aGUgaW5zdGFsbC4N CiBpbnN0YWxsLWluZm86IGRvYyBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwt aW5mbw0KLQktcm0gLWYgJChpbmZvZGlyKS9jcHAuaW5mbyogJChpbmZvZGly KS9nY2MuaW5mbyoNCi0JLXJtIC1mICQoaW5mb2RpcikvY3BwaW50ZXJuYWxz LmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQorCS1ybSAtZiAkKERF U1RESVIpJChpbmZvZGlyKS9jcHAuaW5mbyogJChERVNURElSKSQoaW5mb2Rp cikvZ2NjLmluZm8qDQorCS1ybSAtZiAkKERFU1RESVIpJChpbmZvZGlyKS9j cHBpbnRlcm5hbHMuaW5mbyogJChERVNURElSKSQoaW5mb2RpcikvZ2NjaW50 LmluZm8qDQogCWlmIFsgLWYgJChkb2NkaXIpL2djYy5pbmZvIF07IHRoZW4g XA0KIAkgIGZvciBmIGluICQoZG9jZGlyKS9jcHAuaW5mbyogJChkb2NkaXIp L2djYy5pbmZvKiBcDQogCQkkKGRvY2RpcikvY3BwaW50ZXJuYWxzLmluZm8q ICQoZG9jZGlyKS9nY2NpbnQuaW5mbyo7IGRvIFwNCiAJICAgIHJlYWxmaWxl PWBlY2hvICQkZiB8IHNlZCAtZSAnc3wuKi9cKFteL10qXCkkJHxcMXwnYDsg XA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVh bGZpbGU7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChERVNURElS KSQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0KIAkgIGRvbmU7IFwNCiAJZWxz ZSB0cnVlOyBmaQ0KIAktaWYgJChTSEVMTCkgLWMgJ2luc3RhbGwtaW5mbyAt LXZlcnNpb24nID4vZGV2L251bGwgMj4mMTsgdGhlbiBcDQotCSAgaWYgWyAt ZiAkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBcDQorCSAgaWYgWyAtZiAkKERF U1RESVIpJChpbmZvZGlyKS9kaXIgXSA7IHRoZW4gXA0KIAkgICAgZm9yIGYg aW4gY3BwLmluZm8gZ2NjLmluZm8gZ2NjaW50LmluZm8gY3BwaW50ZXJuYWxz LmluZm87IGRvIFwNCi0JCWlmIFsgLWYgJChpbmZvZGlyKS8kJGYgXTsgdGhl biBcDQotCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5mb2Rpcikv ZGlyICQoaW5mb2RpcikvJCRmOyBcDQorCQlpZiBbIC1mICQoREVTVERJUikk KGluZm9kaXIpLyQkZiBdOyB0aGVuIFwNCisJCSAgaW5zdGFsbC1pbmZvIC0t ZGlyLWZpbGU9JChERVNURElSKSQoaW5mb2RpcikvZGlyICQoREVTVERJUikk KGluZm9kaXIpLyQkZjsgXA0KIAkJZWxzZSB0cnVlOyBmaTsgXA0KIAkgICAg ZG9uZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0cnVlOyBm aTsNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2NwcC5pbmZvKiAkKGluZm9k aXIpL2djYy5pbmZvKg0KLQktY2htb2QgYS14ICQoaW5mb2RpcikvY3BwaW50 ZXJuYWxzLmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQorCS1jaG1v ZCBhLXggJChERVNURElSKSQoaW5mb2RpcikvY3BwLmluZm8qICQoREVTVERJ UikkKGluZm9kaXIpL2djYy5pbmZvKg0KKwktY2htb2QgYS14ICQoREVTVERJ UikkKGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKERFU1RESVIpJChp bmZvZGlyKS9nY2NpbnQuaW5mbyoNCiANCiAjIEluc3RhbGwgdGhlIG1hbiBw YWdlcy4NCiBpbnN0YWxsLW1hbjogaW5zdGFsbGRpcnMgJChHRU5FUkFURURf TUFOUEFHRVMpIGxhbmcuaW5zdGFsbC1tYW4NCiAJLWlmIFsgLWYgZ2NjLWNy b3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKG1hbjFkaXIp LyQoR0NDX0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICQoSU5TVEFM TF9EQVRBKSAkKGRvY2RpcikvZ2NjLjEgJChtYW4xZGlyKS8kKEdDQ19DUk9T U19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICBjaG1vZCBhLXggJChtYW4xZGly KS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJICBybSAtZiAk KERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4 dCk7IFwNCisJICAkKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2djYy4xICQo REVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJChtYW4xZXh0 KTsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdD Q19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJZWxzZSBcDQotCSAgcm0g LWYgJChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsg XA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2NjLjEgJChtYW4x ZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgIGNo bW9kIGEteCAkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKG1hbjFl eHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvJChHQ0Nf SU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAkKElOU1RBTExfREFU QSkgJChkb2NkaXIpL2djYy4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0ND X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgY2htb2QgYS14ICQo REVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKG1hbjFl eHQpOyBcDQogCWZpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2NwcCQobWFuMWV4 dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvY3BwLjEgJChtYW4x ZGlyKS9jcHAkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4xZGlyKS9j cHAkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2djb3YkKG1hbjFl eHQpDQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2djb3YuMSAkKG1h bjFkaXIpL2djb3YkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4xZGly KS9nY292JChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9mc2YtZnVu ZGluZyQobWFuN2V4dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2Rpcikv ZnNmLWZ1bmRpbmcuNyAkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0 KQ0KLQktY2htb2QgYS14ICQobWFuN2RpcikvZnNmLWZ1bmRpbmckKG1hbjdl eHQpDQotCS1ybSAtZiAkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQpDQotCS0k KElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dmZGwuNyAkKG1hbjdkaXIpL2dm ZGwkKG1hbjdleHQpDQotCS1jaG1vZCBhLXggJChtYW43ZGlyKS9nZmRsJCht YW43ZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9ncGwkKG1hbjdleHQpDQot CS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dwbC43ICQobWFuN2Rpcikv Z3BsJChtYW43ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuN2RpcikvZ3BsJCht YW43ZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvY3BwJCht YW4xZXh0KQ0KKwktJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9jcHAuMSAk KERFU1RESVIpJChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQorCS1jaG1vZCBh LXggJChERVNURElSKSQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0KKwktcm0g LWYgJChERVNURElSKSQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkNCisJLSQo SU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2Nvdi4xICQoREVTVERJUikkKG1h bjFkaXIpL2djb3YkKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChERVNURElS KSQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJ UikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KKwktJChJTlNU QUxMX0RBVEEpICQoZG9jZGlyKS9mc2YtZnVuZGluZy43ICQoREVTVERJUikk KG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KKwktY2htb2QgYS14 ICQoREVTVERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0K Kwktcm0gLWYgJChERVNURElSKSQobWFuN2RpcikvZ2ZkbCQobWFuN2V4dCkN CisJLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2ZkbC43ICQoREVTVERJ UikkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQpDQorCS1jaG1vZCBhLXggJChE RVNURElSKSQobWFuN2RpcikvZ2ZkbCQobWFuN2V4dCkNCisJLXJtIC1mICQo REVTVERJUikkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCisJLSQoSU5TVEFM TF9EQVRBKSAkKGRvY2RpcikvZ3BsLjcgJChERVNURElSKSQobWFuN2Rpcikv Z3BsJChtYW43ZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjdk aXIpL2dwbCQobWFuN2V4dCkNCiANCiAjIEluc3RhbGwgdGhlIGxpYnJhcnku DQogaW5zdGFsbC1saWJnY2M6IGxpYmdjYy5tayBsaWJnY2MuYSBpbnN0YWxs ZGlycw0KQEAgLTMwMDAsMjMgKzI5OTEsMjMgQEANCiAjIEZpeCBzeW1saW5r cyB0byBhYnNvbHV0ZSBwYXRocyBpbiB0aGUgaW5zdGFsbGVkIGluY2x1ZGUg ZGlyZWN0b3J5IHRvDQogIyBwb2ludCB0byB0aGUgaW5zdGFsbGVkIGRpcmVj dG9yeSwgbm90IHRoZSBidWlsZCBkaXJlY3RvcnkuDQogIyBEb24ndCBuZWVk IHRvIHVzZSBMTl9TIGhlcmUgc2luY2Ugd2UgcmVhbGx5IGRvIG5lZWQgbG4g LXMgYW5kIG5vIHN1YnN0aXR1dGVzLg0KLQktZmlsZXM9YGNkICQobGlic3Vi ZGlyKS9pbmNsdWRlOyBmaW5kIC4gLXR5cGUgbCAtcHJpbnQgMj4vZGV2L251 bGxgOyBcDQorCS1maWxlcz1gY2QgJChERVNURElSKSQobGlic3ViZGlyKS9p bmNsdWRlOyBmaW5kIC4gLXR5cGUgbCAtcHJpbnQgMj4vZGV2L251bGxgOyBc DQogCWlmIFsgJCQ/IC1lcSAwIF07IHRoZW4gXA0KIAkgIGRpcj1gY2QgaW5j bHVkZTsgJHtQV0R9YDsgXA0KIAkgIGZvciBpIGluICQkZmlsZXM7IGRvIFwN Ci0JICAgIGRlc3Q9YGxzIC1sZCAkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGkg fCBzZWQgLW4gJ3MvLiotPiAvL3AnYDsgXA0KKwkgICAgZGVzdD1gbHMgLWxk ICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGkgfCBzZWQgLW4g J3MvLiotPiAvL3AnYDsgXA0KIAkgICAgaWYgZXhwciAiJCRkZXN0IiA6ICIk JGRpci4qIiA+IC9kZXYvbnVsbDsgdGhlbiBcDQotCSAgICAgIHJtIC1mICQo bGlic3ViZGlyKS9pbmNsdWRlLyQkaTsgXA0KLQkgICAgICBsbiAtcyBgZWNo byAkJGkgfCBzZWQgInN8L1teL10qfC8uLnxnIiB8IHNlZCAnc3wvLi4kJHx8 J2BgZWNobyAiJCRkZXN0IiB8IHNlZCAic3wkJGRpcnx8ImAgJChsaWJzdWJk aXIpL2luY2x1ZGUvJCRpOyBcDQorCSAgICAgIHJtIC1mICQoREVTVERJUikk KGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCisJICAgICAgbG4gLXMgYGVj aG8gJCRpIHwgc2VkICJzfC9bXi9dKnwvLi58ZyIgfCBzZWQgJ3N8Ly4uJCR8 fCdgYGVjaG8gIiQkZGVzdCIgfCBzZWQgInN8JCRkaXJ8fCJgICQoREVTVERJ UikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCiAJICAgIGZpOyBcDQog CSAgZG9uZTsgXA0KIAlmaQ0KIA0KICMgQ3JlYXRlIG9yIHJlY3JlYXRlIHRo ZSBnY2MgcHJpdmF0ZSBpbmNsdWRlIGZpbGUgZGlyZWN0b3J5Lg0KIGluc3Rh bGwtaW5jbHVkZS1kaXI6IGluc3RhbGxkaXJzDQotCS1ybSAtcmYgJChsaWJz dWJkaXIpL2luY2x1ZGUNCi0JbWtkaXIgJChsaWJzdWJkaXIpL2luY2x1ZGUN Ci0JLWNobW9kIGErcnggJChsaWJzdWJkaXIpL2luY2x1ZGUNCisJLXJtIC1y ZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUNCisJbWtkaXIgJChE RVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlDQorCS1jaG1vZCBhK3J4ICQo REVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZQ0KIA0KICMgSW5zdGFsbCB0 aGUgaW5jbHVkZSBkaXJlY3RvcnkgdXNpbmcgdGFyLg0KIGluc3RhbGwtaGVh ZGVycy10YXI6IHN0bXAtaW50LWhkcnMgJChTVE1QX0ZJWFBST1RPKSBpbnN0 YWxsLWluY2x1ZGUtZGlyDQpAQCAtMzAyNSw3ICszMDE2LDcgQEANCiAjIGZv dW5kIGluIENEUEFUSCwgY29ycnVwdGluZyB0aGUgb3V0cHV0LiAgV2UgY291 bGQganVzdCByZWRpcmVjdCB0aGUNCiAjIG91dHB1dCBvZiBgY2QnLCBidXQg c29tZSBzaGVsbHMgbG9zZSBvbiByZWRpcmVjdGlvbiB3aXRoaW4gYCgpJ3MN CiAJKGNkIGAke1BXRH1gL2luY2x1ZGUgOyBcDQotCSB0YXIgLWNmIC0gLjsg ZXhpdCAwKSB8IChjZCAkKGxpYnN1YmRpcikvaW5jbHVkZTsgdGFyIHhwZiAt ICkNCisJIHRhciAtY2YgLSAuOyBleGl0IDApIHwgKGNkICQoREVTVERJUikk KGxpYnN1YmRpcikvaW5jbHVkZTsgdGFyIHhwZiAtICkNCiAjIC9iaW4vc2gg b24gc29tZSBzeXN0ZW1zIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgZmly c3QgdGFyLA0KICMgYW5kIHRoYXQgY2FuIGxvc2Ugd2l0aCBHTlUgdGFyIHdo aWNoIGFsd2F5cyB3cml0ZXMgYSBmdWxsIGJsb2NrLg0KICMgU28gdXNlIGBl eGl0IDAnIHRvIGlnbm9yZSBpdHMgZXhpdCBzdGF0dXMuDQpAQCAtMzAzNCw3 OCArMzAyNSw3OCBAQA0KIGluc3RhbGwtaGVhZGVycy1jcGlvOiBzdG1wLWlu dC1oZHJzICQoU1RNUF9GSVhQUk9UTykgaW5zdGFsbC1pbmNsdWRlLWRpcg0K ICMgU2VlIGRpc2N1c3Npb24gYWJvdXQgdGhlIHVzZSBvZiBgcHdkYCBhYm92 ZQ0KIAljZCBgJHtQV0R9YC9pbmNsdWRlIDsgXA0KLQlmaW5kIC4gLXByaW50 IHwgY3BpbyAtcGR1bSAkKGxpYnN1YmRpcikvaW5jbHVkZQ0KKwlmaW5kIC4g LXByaW50IHwgY3BpbyAtcGR1bSAkKERFU1RESVIpJChsaWJzdWJkaXIpL2lu Y2x1ZGUNCiANCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZGlyZWN0b3J5IHVz aW5nIGNwLg0KIGluc3RhbGwtaGVhZGVycy1jcDogc3RtcC1pbnQtaGRycyAk KFNUTVBfRklYUFJPVE8pIGluc3RhbGwtaW5jbHVkZS1kaXINCi0JY3AgLXAg LXIgaW5jbHVkZSAkKGxpYnN1YmRpcikNCisJY3AgLXAgLXIgaW5jbHVkZSAk KERFU1RESVIpJChsaWJzdWJkaXIpDQogDQogaXRvb2xzZGlyID0gJChsaWJz dWJkaXIpL2luc3RhbGwtdG9vbHMNCiAjIERvbid0IGluc3RhbGwgdGhlIGhl YWRlcnMuICBJbnN0ZWFkLCBpbnN0YWxsIGFwcHJvcHJpYXRlIHNjcmlwdHMN CiAjIGFuZCBzdXBwb3J0aW5nIGZpbGVzIGZvciBmaXhpbmNsdWRlcyB0byBi ZSBydW4gbGF0ZXIuDQogaW5zdGFsbC1ta2hlYWRlcnM6IHN0bXAtaW50LWhk cnMgJChTVE1QX0ZJWFBST1RPKSBpbnN0YWxsLWluY2x1ZGUtZGlyIFwNCiAg ICAgbWtoZWFkZXJzIHhsaW1pdHMuaA0KLQktcm0gLXJmICQoaXRvb2xzZGly KQ0KLQkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGl0b29s c2RpcikvaW5jbHVkZQ0KKwktcm0gLXJmICQoREVTVERJUikkKGl0b29sc2Rp cikNCisJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNU RElSKSQoaXRvb2xzZGlyKS9pbmNsdWRlDQogCWZvciBmaWxlIGluICQoVVNF Ul9IKTsgZG8gXA0KIAkgIHJlYWxmaWxlPWBlY2hvICQkZmlsZSB8IHNlZCAt ZSAnc3wuKi9cKFteL10qXCkkJHxcMXwnYDsgXA0KIAkgICQoSU5TVEFMTF9E QVRBKSAkJGZpbGUgXA0KLQkgICAgJChpdG9vbHNkaXIpL2luY2x1ZGUvJCRy ZWFsZmlsZSA7IFwNCisJICAgICQoREVTVERJUikkKGl0b29sc2RpcikvaW5j bHVkZS8kJHJlYWxmaWxlIDsgXA0KIAlkb25lDQotCSQoSU5TVEFMTF9EQVRB KSB4bGltaXRzLmggJChpdG9vbHNkaXIpL2luY2x1ZGUvbGltaXRzLmgNCisJ JChJTlNUQUxMX0RBVEEpIHhsaW1pdHMuaCAkKERFU1RESVIpJChpdG9vbHNk aXIpL2luY2x1ZGUvbGltaXRzLmgNCiAJaWYgWyB4JChTVE1QX0ZJWElOQykg IT0geCBdIDsgdGhlbiBcDQogCSAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9SRUFETUUtZml4aW5jIFwNCi0JICAgICQoaXRvb2xzZGlyKS9pbmNsdWRl L1JFQURNRSA7IFwNCi0JICAkKElOU1RBTExfUFJPR1JBTSkgZml4aW5jLnNo ICQoaXRvb2xzZGlyKS9maXhpbmMuc2ggOyBcDQotCSAgJChJTlNUQUxMX1BS T0dSQU0pIGZpeGluYy9maXhpbmNsICQoaXRvb2xzZGlyKS9maXhpbmNsIDsg XA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ3N5c2xpbWl0cy5o ICQoaXRvb2xzZGlyKS9nc3lzbGltaXRzLmggOyBcDQorCSAgICAkKERFU1RE SVIpJChpdG9vbHNkaXIpL2luY2x1ZGUvUkVBRE1FIDsgXA0KKwkgICQoSU5T VEFMTF9QUk9HUkFNKSBmaXhpbmMuc2ggJChERVNURElSKSQoaXRvb2xzZGly KS9maXhpbmMuc2ggOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0pIGZpeGlu Yy9maXhpbmNsICQoREVTVERJUikkKGl0b29sc2RpcikvZml4aW5jbCA7IFwN CisJICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dzeXNsaW1pdHMuaCAk KERFU1RESVIpJChpdG9vbHNkaXIpL2dzeXNsaW1pdHMuaCA7IFwNCiAJZWxz ZSA6OyBmaQ0KIAlpZiBbIHgkKFNUTVBfRklYUFJPVE8pICE9IHggXSA7IHRo ZW4gXA0KIAkgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvbWtpbnN0 YWxsZGlycyBcDQotCQkkKGl0b29sc2RpcikvbWtpbnN0YWxsZGlycyA7IFwN Ci0JICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL2ZpeHByb3RvICQo aXRvb2xzZGlyKS9maXhwcm90byA7IFwNCisJCSQoREVTVERJUikkKGl0b29s c2RpcikvbWtpbnN0YWxsZGlycyA7IFwNCisJICAkKElOU1RBTExfUFJPR1JB TSkgJChzcmNkaXIpL2ZpeHByb3RvICQoREVTVERJUikkKGl0b29sc2Rpcikv Zml4cHJvdG8gOyBcDQogCSAgJChJTlNUQUxMX1BST0dSQU0pIGZpeC1oZWFk ZXIkKGJ1aWxkX2V4ZWV4dCkgXA0KLQkJJChpdG9vbHNkaXIpL2ZpeC1oZWFk ZXIkKGJ1aWxkX2V4ZWV4dCkgOyBcDQorCQkkKERFU1RESVIpJChpdG9vbHNk aXIpL2ZpeC1oZWFkZXIkKGJ1aWxkX2V4ZWV4dCkgOyBcDQogCWVsc2UgOjsg ZmkNCi0JJChJTlNUQUxMX1BST0dSQU0pIG1raGVhZGVycyAkKGl0b29sc2Rp cikvbWtoZWFkZXJzDQorCSQoSU5TVEFMTF9QUk9HUkFNKSBta2hlYWRlcnMg JChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMNCiAJZWNobyAnU1lT VEVNX0hFQURFUl9ESVI9IiciJChTWVNURU1fSEVBREVSX0RJUikiJyInIFwN Ci0JCT4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQorCQk+ICQoREVT VERJUikkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCiAJZWNobyAnT1RI RVJfRklYSU5DTFVERVNfRElSUz0iJChPVEhFUl9GSVhJTkNMVURFU19ESVJT KSInIFwNCi0JCT4+ICQoaXRvb2xzZGlyKS9ta2hlYWRlcnMuY29uZg0KKwkJ Pj4gJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMuY29uZg0KIAll Y2hvICdGSVhQUk9UT19ERUZJTkVTPSIkKEZJWFBST1RPX0RFRklORVMpIicg XA0KLQkJPj4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQotCWVjaG8g J1NUTVBfRklYUFJPVE89IiQoU1RNUF9GSVhQUk9UTykiJyA+PiAkKGl0b29s c2RpcikvbWtoZWFkZXJzLmNvbmYNCi0JZWNobyAnU1RNUF9GSVhJTkM9IiQo U1RNUF9GSVhJTkMpIicgPj4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25m DQorCQk+PiAkKERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25m DQorCWVjaG8gJ1NUTVBfRklYUFJPVE89IiQoU1RNUF9GSVhQUk9UTykiJyA+ PiAkKERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQorCWVj aG8gJ1NUTVBfRklYSU5DPSIkKFNUTVBfRklYSU5DKSInID4+ICQoREVTVERJ UikkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCiANCiAjIFVzZSB0aGlz IHRhcmdldCB0byBpbnN0YWxsIHRoZSBwcm9ncmFtIGBjb2xsZWN0MicgdW5k ZXIgdGhlIG5hbWUgYGNvbGxlY3QyJy4NCiBpbnN0YWxsLWNvbGxlY3QyOiBj b2xsZWN0MiBpbnN0YWxsZGlycw0KLQkkKElOU1RBTExfUFJPR1JBTSkgY29s bGVjdDIkKGV4ZWV4dCkgJChsaWJzdWJkaXIpL2NvbGxlY3QyJChleGVleHQp DQorCSQoSU5TVEFMTF9QUk9HUkFNKSBjb2xsZWN0MiQoZXhlZXh0KSAkKERF U1RESVIpJChsaWJzdWJkaXIpL2NvbGxlY3QyJChleGVleHQpDQogIyBJbnN0 YWxsIHRoZSBkcml2ZXIgcHJvZ3JhbSBhcyAkKGxpYnN1YmRpcikvZ2NjIGZv ciBjb2xsZWN0Mi4NCi0JJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4 dCkgJChsaWJzdWJkaXIpL2djYyQoZXhlZXh0KQ0KKwkkKElOU1RBTExfUFJP R1JBTSkgeGdjYyQoZXhlZXh0KSAkKERFU1RESVIpJChsaWJzdWJkaXIpL2dj YyQoZXhlZXh0KQ0KIA0KICMgQ2FuY2VsIGluc3RhbGxhdGlvbiBieSBkZWxl dGluZyB0aGUgaW5zdGFsbGVkIGZpbGVzLg0KIHVuaW5zdGFsbDogaW50bC51 bmluc3RhbGwgbGFuZy51bmluc3RhbGwNCi0JLXJtIC1yZiAkKGxpYnN1YmRp cikNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChHQ0NfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKEdDQ19DUk9TU19OQU1F KSQoZXhlZXh0KQ0KLQktcm0gLWYgJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExf TkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1mICQoYmluZGlyKS8kKENQUF9DUk9T U19OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGxpYnN1 YmRpcikNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQoR0NDX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChi aW5kaXIpLyQoR0NDX0NST1NTX05BTUUpJChleGVleHQpDQorCS1ybSAtZiAk KERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCkNCisJLXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChDUFBfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCkNCiAJLWlmIFsgeCQoY3BwX2luc3RhbGxfZGlyKSAh PSB4IF07IHRoZW4gXA0KLQkgIHJtIC1mICQocHJlZml4KS8kKGNwcF9pbnN0 YWxsX2RpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkg IHJtIC1mICQocHJlZml4KS8kKGNwcF9pbnN0YWxsX2RpcikvJChDUFBfQ1JP U1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAtZiAkKERFU1RESVIpJChw cmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05BTUUp JChleGVleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQocHJlZml4KS8k KGNwcF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7 IFwNCiAJZWxzZSB0cnVlOyBmaQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKFBS T1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKGJp bmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQoZXhlZXh0KQ0KLQktcm0g LXJmICQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKFVOUFJPVE9JWkVfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChHQ09WX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpLyQo R0NDX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQotCS1ybSAtcmYgJChtYW4x ZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCkNCi0JLXJtIC1yZiAk KG1hbjFkaXIpL2NwcCQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIp L3Byb3RvaXplJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvdW5w cm90b2l6ZSQobWFuMWV4dCkNCi0JLXJtIC1mICQoaW5mb2RpcikvY3BwLmlu Zm8qICQoaW5mb2RpcikvZ2NjLmluZm8qDQotCS1ybSAtZiAkKGluZm9kaXIp L2NwcGludGVybmFscy5pbmZvKiAkKGluZm9kaXIpL2djY2ludC5pbmZvKg0K Kwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0laRV9JTlNU QUxMX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmlu ZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpDQorCS1ybSAt cmYgJChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikv JChVTlBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQoYmluZGlyKS8kKEdDT1ZfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0lO U1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQo bWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAt cmYgJChERVNURElSKSQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0KKwktcm0g LXJmICQoREVTVERJUikkKG1hbjFkaXIpL3Byb3RvaXplJChtYW4xZXh0KQ0K Kwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL3VucHJvdG9pemUkKG1h bjFleHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChpbmZvZGlyKS9jcHAuaW5m byogJChERVNURElSKSQoaW5mb2RpcikvZ2NjLmluZm8qDQorCS1ybSAtZiAk KERFU1RESVIpJChpbmZvZGlyKS9jcHBpbnRlcm5hbHMuaW5mbyogJChERVNU RElSKSQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQogIwwNCiAjIFRoZXNlIHRh cmdldHMgYXJlIGZvciB0aGUgZGVqYWdudSB0ZXN0c3VpdGVzLiBUaGUgZmls ZSBzaXRlLmV4cA0KICMgY29udGFpbnMgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0 IGFsbCB0aGUgdGVzdHN1aXRlcyB3aWxsIHVzZS4NCkluZGV4OiBnY2MvbWto ZWFkZXJzLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9ta2hlYWRlcnMu aW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjENCmRpZmYgLXUgLXIxLjEg bWtoZWFkZXJzLmluDQotLS0gZ2NjL21raGVhZGVycy5pbgkyNyBNYXkgMjAw MiAwNDoyNDo1NCAtMDAwMAkxLjENCisrKyBnY2MvbWtoZWFkZXJzLmluCTEg SmFuIDIwMDMgMTM6MTY6MTEgLTAwMDANCkBAIC0zNyw2ICszNyw4IEBADQog ICAgIGVjaG8gIiAgLXYgICAgICAgIFByaW50IG1vcmUgb3V0cHV0IChtYXkg YmUgcmVwZWF0ZWQgZm9yIGV2ZW4gbW9yZSBvdXRwdXQpIg0KICAgICBlY2hv ICIgIC0taGVscCAgICBUaGlzIGhlbHAiDQogICAgIGVjaG8gIiAgLS12ZXJz aW9uIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24iDQorICAgIGVjaG8gIkVu dmlyb25tZW50OiINCisgICAgZWNobyAiICBERVNURElSICAgR2V0cyBwcmVw ZW5kZWQgdG8gdGhlIHBhdGhzIG9mIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVz Ig0KICAgICBleGl0IDANCiBmaQ0KIA0KQEAgLTc1LDI3ICs3NywyNyBAQA0K IGl0b29sc2Rpcj0ke2xpYnN1YmRpcn0vaW5zdGFsbC10b29scw0KIGluY2Rp cj0ke2xpYnN1YmRpcn0vaW5jbHVkZQ0KIA0KLS4gJHtpdG9vbHNkaXJ9L21r aGVhZGVycy5jb25mDQorLiAke0RFU1RESVJ9JHtpdG9vbHNkaXJ9L21raGVh ZGVycy5jb25mDQogDQotY2QgJHtpdG9vbHNkaXJ9DQotcm0gLXJmICR7aW5j ZGlyfS8qDQorY2QgJHtERVNURElSfSR7aXRvb2xzZGlyfQ0KK3JtIC1yZiAk e0RFU1RESVJ9JHtpbmNkaXJ9LyoNCiANCiBpZiBbIHgke1NUTVBfRklYSU5D fSAhPSB4IF0gOyB0aGVuDQogCVRBUkdFVF9NQUNISU5FPSIke3RhcmdldH0i IHRhcmdldF9jYW5vbmljYWw9IiR7dGFyZ2V0fSIgXA0KLQkgICAgJHtTSEVM TH0gLi9maXhpbmMuc2ggJHtpbmNkaXJ9IFwNCisJICAgICR7U0hFTEx9IC4v Zml4aW5jLnNoICR7REVTVERJUn0ke2luY2Rpcn0gXA0KIAkgICAgJHtTWVNU RU1fSEVBREVSX0RJUn0gJHtPVEhFUl9GSVhJTkNMVURFU19ESVJTfQ0KLQly bSAtZiAke2luY2Rpcn0vc3lzbGltaXRzLmgNCi0JaWYgWyAtZiAke2luY2Rp cn0vbGltaXRzLmggXTsgdGhlbg0KLQkgIG12ICR7aW5jZGlyfS9saW1pdHMu aCAke2luY2Rpcn0vc3lzbGltaXRzLmgNCisJcm0gLWYgJHtERVNURElSfSR7 aW5jZGlyfS9zeXNsaW1pdHMuaA0KKwlpZiBbIC1mICR7REVTVERJUn0ke2lu Y2Rpcn0vbGltaXRzLmggXTsgdGhlbg0KKwkgIG12ICR7REVTVERJUn0ke2lu Y2Rpcn0vbGltaXRzLmggJHtERVNURElSfSR7aW5jZGlyfS9zeXNsaW1pdHMu aA0KIAllbHNlDQotCSAgY3AgZ3N5c2xpbWl0cy5oICR7aW5jZGlyfS9zeXNs aW1pdHMuaA0KKwkgIGNwIGdzeXNsaW1pdHMuaCAke0RFU1RESVJ9JHtpbmNk aXJ9L3N5c2xpbWl0cy5oDQogCWZpDQogZmkNCiANCi1jcCBpbmNsdWRlLyog JHtpbmNkaXJ9DQorY3AgaW5jbHVkZS8qICR7REVTVERJUn0ke2luY2Rpcn0N CiANCiBpZiBbIHgke1NUTVBfRklYUFJPVE99ICE9IHggXSA7IHRoZW4NCi0g IG1raW5zdGFsbGRpcnM9IiR7U0hFTEx9ICR7aXRvb2xzZGlyfS9ta2luc3Rh bGxkaXJzIg0KKyAgbWtpbnN0YWxsZGlycz0iJHtTSEVMTH0gJHtERVNURElS fSR7aXRvb2xzZGlyfS9ta2luc3RhbGxkaXJzIg0KICAgZXhwb3J0IEZJWFBS T1RPX0RFRklORVMgbWtpbnN0YWxsZGlycw0KLSAgJHtTSEVMTH0gZml4cHJv dG8gJHtpbmNkaXJ9ICR7aW5jZGlyfSAke1NZU1RFTV9IRUFERVJfRElSfSB8 fCBleGl0IDENCisgICR7U0hFTEx9IGZpeHByb3RvICR7REVTVERJUn0ke2lu Y2Rpcn0gJHtERVNURElSfSR7aW5jZGlyfSAke1NZU1RFTV9IRUFERVJfRElS fSB8fCBleGl0IDENCiBmaQ0KSW5kZXg6IGdjYy9ta2xpYmdjYy5pbg0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3Jj L2N2cy9nY2MtY3ZzL2djYy9nY2MvbWtsaWJnY2MuaW4sdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjQ3LjguMw0KZGlmZiAtdSAtcjEuNDcuOC4zIG1rbGli Z2NjLmluDQotLS0gZ2NjL21rbGliZ2NjLmluCTEgRGVjIDIwMDIgMDU6NDI6 MTEgLTAwMDAJMS40Ny44LjMNCisrKyBnY2MvbWtsaWJnY2MuaW4JMjkgRGVj IDIwMDIgMTk6MjA6MTMgLTAwMDANCkBAIC0xOSw2ICsxOSw3IEBADQogIyBG UEJJVA0KICMgRlBCSVRfRlVOQ1MNCiAjIExJQjJfRElWTU9EX0ZVTkNTDQor IyBERVNURElSDQogIyBEUEJJVA0KICMgRFBCSVRfRlVOQ1MNCiAjIExJQkdD Qw0KQEAgLTQzNiwxMCArNDM3LDEwIEBADQogICBkaXI9YGVjaG8gJHttbH0g fCBzZWQgLWUgJ3MvOy4qJC8vJyAtZSAncy89LyQoRVEpL2cnYA0KICAgZmxh Z3M9YGVjaG8gJHttbH0gfCBzZWQgLWUgJ3MvXlteO10qOy8vJyAtZSAncy9A LyAtL2cnYDsNCiAgIGlmIFsgJGRpciAhPSAuIF07IHRoZW4NCi0gICAgbGRp cj0nJChsaWJzdWJkaXIpJy8kZGlyDQorICAgIGxkaXI9JyQoREVTVERJUikk KGxpYnN1YmRpciknLyRkaXINCiAgICAgZWNobyAiCWlmIFsgLWQgJGxkaXIg XTsgdGhlbiB0cnVlOyBlbHNlIG1rZGlyICRsZGlyOyBjaG1vZCBhK3J4ICRs ZGlyOyBmaTsiDQogICBlbHNlDQotICAgIGxkaXI9JyQobGlic3ViZGlyKScN CisgICAgbGRpcj0nJChERVNURElSKSQobGlic3ViZGlyKScNCiAgIGZpDQog ICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAke2Rpcn0vbGliZ2NjLmEgJHts ZGlyfS8NCiAgIGVjaG8gJwkkKFJBTkxJQl9GT1JfVEFSR0VUKScgJHtsZGly fS9saWJnY2MuYQ0KQEAgLTQ5NSwxMCArNDk2LDEwIEBADQogICAgIGRpcj1g ZWNobyAke21sfSB8IHNlZCAtZSAncy87LiokLy8nIC1lICdzLz0vJChFUSkv ZydgDQogICAgIGlmIFsgJGRpciAhPSAuIF07IHRoZW4NCiAgICAgICBvdXQ9 JHtkaXJ9LyRmDQotICAgICAgbGRpcj0nJChsaWJzdWJkaXIpJy8kZGlyDQor ICAgICAgbGRpcj0nJChERVNURElSKSQobGlic3ViZGlyKScvJGRpcg0KICAg ICBlbHNlDQogICAgICAgb3V0PSRmDQotICAgICAgbGRpcj0nJChsaWJzdWJk aXIpJw0KKyAgICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknDQog ICAgIGZpDQogICAgIGVjaG8gJwkkKElOU1RBTExfREFUQSknICRvdXQgJGxk aXIvDQogICBkb25lDQpJbmRleDogZ2NjL2FkYS9NYWtlLWxhbmcuaW4NCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3Ny Yy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2FkYS9NYWtlLWxhbmcuaW4sdg0KcmV0 cmlldmluZyByZXZpc2lvbiAxLjE1LjQuMw0KZGlmZiAtdSAtcjEuMTUuNC4z IE1ha2UtbGFuZy5pbg0KLS0tIGdjYy9hZGEvTWFrZS1sYW5nLmluCTEgRGVj IDIwMDIgMDU6NDI6MjMgLTAwMDAJMS4xNS40LjMNCisrKyBnY2MvYWRhL01h a2UtbGFuZy5pbgkyOSBEZWMgMjAwMiAxNTowNTozNSAtMDAwMA0KQEAgLTM5 NCwzMCArMzk0LDMwIEBADQogCSQoc3JjZGlyKS9hZGEvZ25hdF9ybS5pbmZv ICQoc3JjZGlyKS9hZGEvZ25hdC1zdHlsZS5pbmZvDQogDQogYWRhLmluc3Rh bGwtaW5mbzoNCi0JLXJtIC1mICQoaW5mb2RpcikvZ25hdF91Z18qLmluZm8q DQotCS1ybSAtZiAkKGluZm9kaXIpL2duYXRfcm0uaW5mbyogDQotCS1ybSAt ZiAkKGluZm9kaXIpL2duYXQtc3R5bGUuaW5mbyogDQorCS1ybSAtZiAkKERF U1RESVIpJChpbmZvZGlyKS9nbmF0X3VnXyouaW5mbyoNCisJLXJtIC1mICQo REVTVERJUikkKGluZm9kaXIpL2duYXRfcm0uaW5mbyogDQorCS1ybSAtZiAk KERFU1RESVIpJChpbmZvZGlyKS9nbmF0LXN0eWxlLmluZm8qIA0KIAlpZiBb IC1mICQoc3JjZGlyKS9hZGEvZ25hdF91Z191bnguaW5mbyBdOyB0aGVuIFwN CiAJICBmb3IgZiBpbiAkKHNyY2RpcikvYWRhL2duYXRfdWdfKi5pbmZvKiBc DQogCQkkKHNyY2RpcikvYWRhL2duYXRfcm0uaW5mbyogXA0KIAkJJChzcmNk aXIpL2FkYS9nbmF0LXN0eWxlLmluZm8qOyBkbyBcDQogCSAgICByZWFsZmls ZT1gZWNobyAkJGYgfCBzZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7 IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChpbmZvZGlyKS8kJHJl YWxmaWxlOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJCRmICQoREVTVERJ UikkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwNCiAJICBkb25lOyBcDQogCWVs c2UgdHJ1ZTsgZmkNCiAJLWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8g LS12ZXJzaW9uJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXA0KLQkgIGlmIFsg LWYgJChpbmZvZGlyKS9kaXIgXSA7IHRoZW4gXA0KKwkgIGlmIFsgLWYgJChE RVNURElSKSQoaW5mb2RpcikvZGlyIF0gOyB0aGVuIFwNCiAJICAgIGZvciBm IGluIGduYXRfdWdfdm1zLmluZm8gZ25hdF91Z193bnQuaW5mbyBnbmF0X3Vn X3VueC5pbmZvIFwNCiAJCWduYXRfdWdfdnh3LmluZm8gZ25hdF9ybS5pbmZv IGduYXQtc3R5bGUuaW5mbzsgZG8gXA0KLQkJaWYgWyAtZiAkKGluZm9kaXIp LyQkZiBdOyB0aGVuIFwNCi0JCSAgaW5zdGFsbC1pbmZvIC0tZGlyLWZpbGU9 JChpbmZvZGlyKS9kaXIgJChpbmZvZGlyKS8kJGY7IFwNCisJCWlmIFsgLWYg JChERVNURElSKSQoaW5mb2RpcikvJCRmIF07IHRoZW4gXA0KKwkJICBpbnN0 YWxsLWluZm8gLS1kaXItZmlsZT0kKERFU1RESVIpJChpbmZvZGlyKS9kaXIg JChERVNURElSKSQoaW5mb2RpcikvJCRmOyBcDQogCQllbHNlIHRydWU7IGZp OyBcDQogCSAgICBkb25lOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsgXA0KIAll bHNlIHRydWU7IGZpOw0KLQktY2htb2QgYS14ICQoaW5mb2RpcikvZ25hdF91 Z192bXMuaW5mbyogJChpbmZvZGlyKS9nbmF0X3VnX3dudC5pbmZvKg0KLQkt Y2htb2QgYS14ICQoaW5mb2RpcikvZ25hdF91Z191bnguaW5mbyogJChpbmZv ZGlyKS9nbmF0X3VnX3Z4dy5pbmZvKg0KLQktY2htb2QgYS14ICQoaW5mb2Rp cikvZ25hdF9ybS5pbmZvKiAkKGluZm9kaXIpL2duYXQtc3R5bGUuaW5mbyoN CisJLWNobW9kIGEteCAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3Zt cy5pbmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3dudC5pbmZv Kg0KKwktY2htb2QgYS14ICQoREVTVERJUikkKGluZm9kaXIpL2duYXRfdWdf dW54LmluZm8qICQoREVTVERJUikkKGluZm9kaXIpL2duYXRfdWdfdnh3Lmlu Zm8qDQorCS1jaG1vZCBhLXggJChERVNURElSKSQoaW5mb2RpcikvZ25hdF9y bS5pbmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0LXN0eWxlLmluZm8q DQogDQogYWRhL2duYXRfdWdfdW54LmR2aSA6ICQoc3JjZGlyKS9hZGEvZ25h dF91Z191bngudGV4aSBcDQogCSQoc3JjZGlyKS9kb2MvaW5jbHVkZS9mZGwu dGV4aQ0KQEAgLTQ2OSwyMTcgKzQ2OSwyMTcgQEANCiAJIHRoZW4gXA0KIAkg IGlmIFsgLWYgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0 aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdGJpbmQkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0YmluZC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRiaW5kJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQo dG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICBybSAtZiAkKHRv b2xkaXIpL2Jpbi9nbmF0YmluZCQoZXhlZXh0KTsgXA0KLQkgICAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkgJCh0b29s ZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQo REVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRiaW5kJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJpbmQt Y3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChE RVNURElSKSQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICBy bSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4 dCk7IFwNCisJICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRiaW5kLWNy b3NzJChleGVleHQpICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0Ymlu ZCQoZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBc DQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmluZCQoZXhlZXh0KSAk KGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQo REVTVERJUikkKGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmluZCQoZXhlZXh0KSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXRiaW5kJChleGVleHQpOyBcDQogCSAgZmkgOyBc DQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRo ZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGJsLWNyb3NzJChleGVleHQpIF0gOyBc DQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRibCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAk KHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAgICAgIHJtIC1mICQo dG9vbGRpcikvYmluL2duYXRibCQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKHRvb2xk aXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0 KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQo ZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0YmwkKGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQo dG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChE RVNURElSKSQodG9vbGRpcikvYmluL2duYXRibCQoZXhlZXh0KTsgXA0KKwkg ICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0 KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGJsJChleGVleHQpOyBc DQogICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0p ICQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0YmwkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRibCQo ZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9n bmF0YmwkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0YmwkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0YmwkKGV4 ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEk KGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0Y2hv cC1jcm9zcyQoc2hleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChzaGV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvYWRhL2du YXRjaG9wJChzaGV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 Y2hvcCQoc2hleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmlu Ly4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4v Z25hdGNob3AkKHNoZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRjaG9wJChzaGV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGNob3Ak KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChzaGV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4 dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNo b3AkKHNoZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29s ZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RE SVIpJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKHNoZXh0KTsgXA0KKwkgICAg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRjaG9wJChzaGV4dCkgJChERVNU RElSKSQodG9vbGRpcikvYmluL2duYXRjaG9wJChleGVleHQpOyBcDQogICAg ICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmlu ZGlyKS9nbmF0Y2hvcCQoc2hleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJP R1JBTSkgJChzcmNkaXIpL2FkYS9nbmF0Y2hvcCQoc2hleHQpICQoYmluZGly KS9nbmF0Y2hvcCQoc2hleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIp JChiaW5kaXIpL2duYXRjaG9wJChzaGV4dCk7IFwNCisJICAgICQoSU5TVEFM TF9QUk9HUkFNKSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoc2hleHQpOyBcDQogCSAgZmkg OyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQog CXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGNob3AtY3Jvc3MkKGV4ZWV4dCkg XSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGNob3AkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChleGVleHQpOyBcDQotCSAg ICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAg ICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwN Ci0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1jcm9zcyQo ZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0K KwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGNob3AkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkg ICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhl biBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdGNob3AkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29s ZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBm aTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRj aG9wJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dGNob3AkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBc DQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRjaG9wJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3Ak KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0 KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhl ZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXQtY3Jvc3Mk KGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0JChleGVleHQpOyBcDQotCSAgICBp ZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAg cm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdCQoZXhlZXh0KTsgXA0KLQkgICAg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJCh0 b29sZGlyKS9iaW4vZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0 KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4 ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29s ZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RE SVIpJCh0b29sZGlyKS9iaW4vZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4dCk7IFwNCiAgICAgICAg ICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIp L2duYXQkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0JChleGVleHQpICQoYmluZGlyKS9nbmF0JChleGVleHQpOyBcDQorCSAg ICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXQkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0JChleGVleHQpICQoREVT VERJUikkKGJpbmRpcikvZ25hdCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0K IAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVu IFwNCiAJICBpZiBbIC1mIGduYXRrci1jcm9zcyQoZXhlZXh0KSBdIDsgXA0K IAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2Fs aWFzKS1nbmF0a3IkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0a3IkKGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJCh0 b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQotCSAgICAgICBybSAtZiAkKHRv b2xkaXIpL2Jpbi9nbmF0a3IkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGly KS9iaW4vZ25hdGtyJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0a3IkKGV4ZWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4 ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dGtyJChleGVleHQpOyBcDQorCSAgICBpZiBbIC1kICQoREVTVERJUikkKHRv b2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCisJICAgICAgIHJtIC1mICQoREVT VERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAg ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRrciQoZXhlZXh0KTsgXA0K ICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAk KGJpbmRpcikvZ25hdGtyJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdGtyJChleGVleHQpICQoYmluZGlyKS9nbmF0a3IkKGV4 ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25h dGtyJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dGtyJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVl eHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChl eGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGxpbmst Y3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0p ICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGxpbmskKGV4ZWV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQo ZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChl eGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7 IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGxp bmskKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0bGlu ayQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAk KERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bGluayQo ZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGly KS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIp JCh0b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwN CiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkg JChiaW5kaXIpL2duYXRsaW5rJChleGVleHQpOyBcDQotCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdGxpbmskKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRs aW5rJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5k aXIpL2duYXRsaW5rJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdGxpbmskKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9n bmF0bGluayQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYg WyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBb IC1mIGduYXRscy1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0K LQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMk KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMt Y3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 bHMkKGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJCh0b29sZGlyKS9iaW4v LiBdIDsgdGhlbiBcDQotCSAgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9n bmF0bHMkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGxz JChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGxzJChleGVleHQp OyBcDQorCSAgICBpZiBbIC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8u IF0gOyB0aGVuIFwNCisJICAgICAgIHJtIC1mICQoREVTVERJUikkKHRvb2xk aXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQo dG9vbGRpcikvYmluL2duYXRscyQoZXhlZXh0KTsgXA0KICAgICAgICAgICAg IGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25h dGxzJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dGxzJChleGVleHQpICQoYmluZGlyKS9nbmF0bHMkKGV4ZWV4dCk7IFwNCisJ ICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGxzJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxzJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvZ25hdGxzJChleGVleHQpOyBcDQogCSAg ZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBc DQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdG1ha2UtY3Jvc3MkKGV4ZWV4 dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpOyBcDQot CSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkg ICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4ZWV4dCk7 IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFrZS1jcm9z cyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0bWFrZSQoZXhlZXh0KTsg XA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWFrZSQoZXhlZXh0KTsgXA0K KwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsg dGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0 b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAg ICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2du YXRtYWtlJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdG1ha2UkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQp OyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRtYWtl JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1h a2UkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWFrZSQoZXhl ZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQo ZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRtZW0t Y3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0p ICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1lbSQoZXhlZXh0KTsg XA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRtZW0tY3Jvc3MkKGV4 ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVl eHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBcDQorCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdG1lbS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBc DQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdG1lbSQo ZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRtZW0k KGV4ZWV4dCkgJChiaW5kaXIpL2duYXRtZW0kKGV4ZWV4dCk7IFwNCisJICAg ICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KTsg XA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRtZW0kKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS9nbmF0bWVtJChleGVleHQpOyBcDQogCSAg ZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBc DQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdG5hbWUtY3Jvc3MkKGV4ZWV4 dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0bmFtZS1jcm9zcyQoZXhlZXh0KSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRuYW1lJChleGVleHQpOyBcDQor CSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFz KS1nbmF0bmFtZSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRuYW1lLWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRuYW1lJChleGVleHQpOyBcDQogCSAg ZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4 dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bmFtZSQoZXhl ZXh0KSAkKGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQo Uk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bmFtZSQoZXhlZXh0KSAk KERFU1RESVIpJChiaW5kaXIpL2duYXRuYW1lJChleGVleHQpOyBcDQogCSAg ZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBc DQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdHByZXAtY3Jvc3MkKGV4ZWV4 dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwcmVwJChleGVleHQpOyBcDQot CSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkg ICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCk7 IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJlcC1jcm9z cyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0cHJlcCQoZXhlZXh0KTsg XA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdHByZXAkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHJlcCQoZXhlZXh0KTsgXA0K KwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsg dGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdHByZXAkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0 b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAg ICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2du YXRwcmVwJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdHByZXAkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQp OyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRwcmVw JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBy ZXAkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0cHJlcCQoZXhl ZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQo ZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRwc3Rh LWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwc3RhJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3Mk KGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHN0YSQo ZXhlZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0g OyB0aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRw c3RhJChleGVleHQpOyBcDQotCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdHBz dGEkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRwc3RhJChleGVleHQpOyBcDQorCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHBzdGEk KGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElS KSQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpOyBcDQorCSAgICAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpOyBc DQogICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0p ICQoYmluZGlyKS9nbmF0cHN0YSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNU QUxMX1BST0dSQU0pIGduYXRwc3RhJChleGVleHQpICQoYmluZGlyKS9nbmF0 cHN0YSQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0cHN0YSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRwc3RhJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv Z25hdHBzdGEkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlm IFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYg WyAtZiBnbmF0eHJlZi1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4g XA0KLQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 eHJlZiQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXR4cmVmLWNyb3NzJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJ UikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXR4cmVmJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHhyZWYtY3Jvc3Mk KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdHhyZWYkKGV4ZWV4dCk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0p ICQoYmluZGlyKS9nbmF0eHJlZiQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNU QUxMX1BST0dSQU0pIGduYXR4cmVmJChleGVleHQpICQoYmluZGlyKS9nbmF0 eHJlZiQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0eHJlZiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXR4cmVmJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv Z25hdHhyZWYkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAgICAgZmkNCiAJ LWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAg aWYgWyAtZiBnbmF0ZmluZC1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRo ZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0ZmluZCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRmaW5kLWNyb3NzJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGZpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRmaW5kJChleGVl eHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGZpbmQtY3Jv c3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGZpbmQkKGV4ZWV4dCk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQo Uk0pICQoYmluZGlyKS9nbmF0ZmluZCQoZXhlZXh0KTsgXA0KLQkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRmaW5kJChleGVleHQpICQoYmluZGlyKS9n bmF0ZmluZCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQo YmluZGlyKS9nbmF0ZmluZCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRmaW5kJChleGVleHQpICQoREVTVERJUikkKGJpbmRp cikvZ25hdGZpbmQkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJ LWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAg aWYgWyAtZiBnbmF0Y2hvcCQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0K LQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQot CSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChi aW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERF U1RESVIpJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0K ICMNCiAjIEduYXRsYnIgaXMgb25seSB1c2VkIG9uIFZNUy4NCkBAIC02ODgs OCArNjg4LDggQEANCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0bGJyJChl eGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRp cikvZ25hdGxiciQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRsYnIkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRsYnIkKGV4ZWV4 dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGxi ciQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRs YnIkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bGJyJChleGVl eHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogIw0KQEAgLTY5Nyw4ICs2OTcs OCBAQA0KICMNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJ dGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGRsbCQoZXhlZXh0 KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRkbGwkKGV4ZWV4 dCkgJChiaW5kaXIpL2duYXRkbGwkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0p ICQoREVTVERJUikkKGJpbmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0KKwkg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRkbGwkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS9nbmF0ZGxsJChleGVleHQpOyBcDQogCWZpDQogIw0K ICMgRmluYWxseSwgaW5zdGFsbCB0aGUgbGlicmFyeQ0KQEAgLTcxNSw0NiAr NzE1LDQ2IEBADQogYWRhLmluc3RhbGwtbWFuOg0KIA0KIGFkYS51bmluc3Rh bGw6DQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCkNCi0J LSQoUk0pICQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCkNCi0JLSQoUk0pICQo YmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIp L2duYXQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0ZGxsJChl eGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGtyJChleGVleHQpDQot CS0kKFJNKSAkKGJpbmRpcikvZ25hdGxpbmskKGV4ZWV4dCkNCi0JLSQoUk0p ICQoYmluZGlyKS9nbmF0bHMkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGly KS9nbmF0bWFrZSQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRt ZW0kKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0bmFtZSQoZXhl ZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpDQot CS0kKFJNKSAkKGJpbmRpcikvZ25hdHBzdGEkKGV4ZWV4dCkNCi0JLSQoUk0p ICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJpbmQkKGV4ZWV4dCkN Ci0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJsJChl eGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXRjaG9wJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGtyKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdGxpbmskKGV4ZWV4dCkNCi0JLSQoUk0p ICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpDQot CS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChl eGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXRtZW0kKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdG5hbWUkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4ZWV4dCkNCi0JLSQoUk0pICQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHBzdGEkKGV4ZWV4dCkNCi0J LSQoUk0pICQodG9vbGRpcikvYmluL2duYXRiaW5kJChleGVleHQpDQotCS0k KFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCkNCi0JLSQoUk0p ICQodG9vbGRpcikvYmluL2duYXRjaG9wJChleGVleHQpDQotCS0kKFJNKSAk KHRvb2xkaXIpL2Jpbi9nbmF0JChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xk aXIpL2Jpbi9nbmF0ZGxsJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIp L2Jpbi9nbmF0a3IkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmlu L2duYXRsaW5rJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9n bmF0bHMkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRt YWtlJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bWVt JChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bmFtZSQo ZXhlZXh0KQ0KLQktJChSTSkgJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4 ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVl eHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRiaW5kJChl eGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRibCQo ZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hv cCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0 JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRk bGwkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25h dGtyJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRsaW5rJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIp L2duYXRscyQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGly KS9nbmF0bWFrZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0bWVtJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChi aW5kaXIpL2duYXRuYW1lJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIp JChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXRwc3RhJChleGVleHQpDQorCS0kKFJNKSAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0YmluZCQoZXhl ZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGJsJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGtyKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJ UikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFz KS1nbmF0bHMkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVt JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0bmFtZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4ZWV4 dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRwc3RhJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0 b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVT VERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCkNCisJLSQoUk0p ICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KQ0K KwktJChSTSkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4 dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0ZGxs JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdGtyJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGly KS9iaW4vZ25hdGxpbmskKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikk KHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVT VERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bWFrZSQoZXhlZXh0KQ0KKwktJChS TSkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRtZW0kKGV4ZWV4dCkN CisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bmFtZSQo ZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQodG9vbGRpcikvYmluL2du YXRwcmVwJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGly KS9iaW4vZ25hdHBzdGEkKGV4ZWV4dCkNCiAjIEduYXRsYnIgYW5kIEduYXRj aG9wIGFyZSBvbmx5IHVzZWQgb24gVk1TDQotCS0kKFJNKSAkKGJpbmRpcikv Z25hdGxiciQoZXhlZXh0KSAkKGJpbmRpcikvZ25hdGNob3AkKGV4ZWV4dCkN CisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0 KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpDQogDQog IyBDbGVhbiBob29rczoNCiAjIEEgbG90IG9mIHRoZSBhbmNpbGxhcnkgZmls ZXMgYXJlIGRlbGV0ZWQgYnkgdGhlIG1haW4gbWFrZWZpbGUuDQpJbmRleDog Z2NjL2FkYS9NYWtlZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2Mv YWRhL01ha2VmaWxlLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNS40 LjENCmRpZmYgLXUgLXIxLjM1LjQuMSBNYWtlZmlsZS5pbg0KLS0tIGdjYy9h ZGEvTWFrZWZpbGUuaW4JMSBPY3QgMjAwMiAxNzozMTo1NyAtMDAwMAkxLjM1 LjQuMQ0KKysrIGdjYy9hZGEvTWFrZWZpbGUuaW4JMjkgRGVjIDIwMDIgMTU6 MjY6MTAgLTAwMDANCkBAIC0xNzExLDM4ICsxNzExLDM4IEBADQogIwlDcmVh dGUgdGhlIGRpcmVjdG9yeSBiZWZvcmUgZGVsZXRpbmcgaXQsIGluIGNhc2Ug dGhlIGRpcmVjdG9yeSBpcw0KICMJYSBsaXN0IG9mIGRpcmVjdG9yaWVzIChh cyBpdCBtYXkgYmUgb24gVk1TKS4gVGhpcyBlbnN1cmVzIHdlIGFyZQ0KICMJ ZGVsZXRpbmcgdGhlIHJpZ2h0IG9uZS4NCi0JLSQoTUtESVIpICQoQURBX1JU TF9PQkpfRElSKQ0KLQktJChNS0RJUikgJChBREFfSU5DTFVERV9ESVIpDQot CSQoUk1ESVIpICQoQURBX1JUTF9PQkpfRElSKQ0KLQkkKFJNRElSKSAkKEFE QV9JTkNMVURFX0RJUikNCi0JLSQoTUtESVIpICQoQURBX1JUTF9PQkpfRElS KQ0KLQktJChNS0RJUikgJChBREFfSU5DTFVERV9ESVIpDQotCS0kKElOU1RB TExfREFUQSkgYWRhL3J0cy9NYWtlZmlsZS5hZGFsaWIgJChBREFfUlRMX09C Sl9ESVIpDQorCS0kKE1LRElSKSAkKERFU1RESVIpJChBREFfUlRMX09CSl9E SVIpDQorCS0kKE1LRElSKSAkKERFU1RESVIpJChBREFfSU5DTFVERV9ESVIp DQorCSQoUk1ESVIpICQoREVTVERJUikkKEFEQV9SVExfT0JKX0RJUikNCisJ JChSTURJUikgJChERVNURElSKSQoQURBX0lOQ0xVREVfRElSKQ0KKwktJChN S0RJUikgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKQ0KKwktJChNS0RJ UikgJChERVNURElSKSQoQURBX0lOQ0xVREVfRElSKQ0KKwktJChJTlNUQUxM X0RBVEEpIGFkYS9ydHMvTWFrZWZpbGUuYWRhbGliICQoREVTVERJUikkKEFE QV9SVExfT0JKX0RJUikNCiAJZm9yIGZpbGUgaW4gYWRhL3J0cy8qLmFsaTsg ZG8gXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKEFEQV9SVExf T0JKX0RJUik7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChE RVNURElSKSQoQURBX1JUTF9PQkpfRElSKTsgXA0KIAlkb25lDQogCS1mb3Ig ZmlsZSBpbiBhZGEvcnRzLyokKGFyZXh0KTtkbyBcDQotCSAgICAkKElOU1RB TExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9PQkpfRElSKTsgXA0KKwkgICAg JChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChBREFfUlRMX09C Sl9ESVIpOyBcDQogCWRvbmUNCiBpZmVxICgkKHN0cmlwICQoZmlsdGVyLW91 dCBhbHBoYSUgZGVjIHZtcyUgb3BlbnZtcyUgYWxwaGF2bXMlLCQodGFyZykp KSwpDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzL2xpYiokKHNvZXh0KTtkbyBc DQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9PQkpf RElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RE SVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBlbHNlDQogCS1m b3IgZmlsZSBpbiBhZGEvcnRzL2xpYiotKiokKHNvZXh0KTtkbyBcDQotCSAg ICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9PQkpfRElSKTsg XA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChB REFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBlbmRpZg0KLQktJChMTl9T KSAkKEFEQV9SVExfT0JKX0RJUikvbGliZ25hdC0qJChzb2V4dCkgXA0KLQkg ICAgICAgJChBREFfUlRMX09CSl9ESVIpL2xpYmduYXQkKHNvZXh0KQ0KLQkt JChMTl9TKSAkKEFEQV9SVExfT0JKX0RJUikvbGliZ25hcmwtKiQoc29leHQp IFwNCi0JICAgICAgICQoQURBX1JUTF9PQkpfRElSKS9saWJnbmFybCQoc29l eHQpDQorCS0oIGNkICQoREVTVERJUikkKEFEQV9SVExfT0JKX0RJUikgJiYg XA0KKwkgICQoTE5fUykgbGliZ25hdC0qJChzb2V4dCkgbGliZ25hdCQoc29l eHQpICkNCisJLSggY2QgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKSAm JiBcDQorCSAgJChMTl9TKSBsaWJnbmFybC0qJChzb2V4dCkgbGliZ25hcmwk KHNvZXh0KSApDQogIyBUaGlzIGNvcHkgbXVzdCBiZSBkb25lIHByZXNlcnZp bmcgdGhlIGRhdGUgb24gdGhlIG9yaWdpbmFsIGZpbGUuDQogCWZvciBmaWxl IGluIGFkYS9ydHMvKi5hZGIgYWRhL3J0cy8qLmFkczsgZG8gXA0KLQkgICAg JChJTlNUQUxMX0RBVEFfREFURSkgJCRmaWxlICQoQURBX0lOQ0xVREVfRElS KTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEFfREFURSkgJCRmaWxlICQoREVT VERJUikkKEFEQV9JTkNMVURFX0RJUik7IFwNCiAJZG9uZQ0KLQljZCAkKEFE QV9JTkNMVURFX0RJUik7ICQoQ0hNT0QpIGEtd3ggKi5hZGINCi0JY2QgJChB REFfSU5DTFVERV9ESVIpOyAkKENITU9EKSBhLXd4ICouYWRzDQorCWNkICQo REVTVERJUikkKEFEQV9JTkNMVURFX0RJUik7ICQoQ0hNT0QpIGEtd3ggKi5h ZGINCisJY2QgJChERVNURElSKSQoQURBX0lOQ0xVREVfRElSKTsgJChDSE1P RCkgYS13eCAqLmFkcw0KIA0KIC4uL3N0YW1wLWduYXRsaWIyOg0KIAkkKFJN KSBydHMvcy0qLmFsaQ0KQEAgLTE4NTQsNyArMTg1NCw3IEBADQogICAgICAg ICBlbmRpZg0KIA0KIGluc3RhbGwtcnRzOiBmb3JjZQ0KLQkkKENQKSAtciBy dHMtJChSVFNfTkFNRSkgJChsaWJzdWJkaXIpLw0KKwkkKENQKSAtciBydHMt JChSVFNfTkFNRSkgJChERVNURElSKSQobGlic3ViZGlyKS8NCiANCiBydHMt bm9uZTogZm9yY2UNCiAJJChNQUtFKSAkKEZMQUdTX1RPX1BBU1MpIHByZXBh cmUtcnRzIFwNCkluZGV4OiBnY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVy DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9jb25maWcvdC1zbGliZ2NjLWVs Zi12ZXIsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQNCmRpZmYgLXUgLXIx LjQgdC1zbGliZ2NjLWVsZi12ZXINCi0tLSBnY2MvY29uZmlnL3Qtc2xpYmdj Yy1lbGYtdmVyCTkgTWF5IDIwMDIgMjE6MDE6NTMgLTAwMDAJMS40DQorKysg Z2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyOSBEZWMgMjAwMiAxNTo1 Nzo0NiAtMDAwMA0KQEAgLTE5LDExICsxOSwxMSBAQA0KICMgJChzbGliZGly KSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3QgaXQgZnJvbSBleHBhbnNpb24g d2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5tay4gIFdlIHdhbnQgdGhpcyBk ZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUuDQogU0hMSUJfSU5T VEFMTCA9IFwNCi0JJCQoU0hFTEwpICQkKHNyY2RpcikvbWtpbnN0YWxsZGly cyAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsgXA0KKwkkJChT SEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQkKERFU1RESVIpJCQo c2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCk7IFwNCiAJJChJTlNUQUxM X0RBVEEpICQoU0hMSUJfTkFNRSkgXA0KLQkgICQkKHNsaWJkaXIpJChTSExJ Ql9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0KLQlybSAtZiAk JChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElO Syk7IFwNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElC RElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0KKwlybSAtZiAkJChERVNU RElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJf U09MSU5LKTsgXA0KIAkkKExOX1MpICQoU0hMSUJfU09OQU1FKSBcDQotCSAg JCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJ TkspDQorCSAgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJ Ul9RVUFMKS8kKFNITElCX1NPTElOSykNCiBTSExJQl9NS01BUCA9ICQoc3Jj ZGlyKS9ta21hcC1zeW12ZXIuYXdrDQogU0hMSUJfTUFQRklMRVMgPSAkKHNy Y2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4OiBnY2MvY29uZmlnL3Qtc2xp YmdjYy1zbGQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv dXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy90LXNs aWJnY2Mtc2xkLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zDQpkaWZmIC11 IC1yMS4zIHQtc2xpYmdjYy1zbGQNCi0tLSBnY2MvY29uZmlnL3Qtc2xpYmdj Yy1zbGQJOSBNYXkgMjAwMiAyMTowMTo1MyAtMDAwMAkxLjMNCisrKyBnY2Mv Y29uZmlnL3Qtc2xpYmdjYy1zbGQJMjkgRGVjIDIwMDIgMTU6NTg6MzAgLTAw MDANCkBAIC0xNywxMSArMTcsMTEgQEANCiAjICQoc2xpYmRpcikgZG91Ymxl IHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1 aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1 bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KIFNITElCX0lOU1RBTEwgPSBc DQotCSQkKFNIRUxMKSAkJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJCQoc2xp YmRpcikkKFNITElCX1NMSUJESVJfUVVBTCk7IFwNCisJJCQoU0hFTEwpICQk KHNyY2RpcikvbWtpbnN0YWxsZGlycyAkJChERVNURElSKSQkKHNsaWJkaXIp JChTSExJQl9TTElCRElSX1FVQUwpOyBcDQogCSQoSU5TVEFMTF9EQVRBKSAk KFNITElCX05BTUUpIFwNCi0JICAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJ Ul9RVUFMKS8kKFNITElCX1NPTkFNRSk7IFwNCi0Jcm0gLWYgJCQoc2xpYmRp cikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTkspOyBcDQor CSAgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFM KS8kKFNITElCX1NPTkFNRSk7IFwNCisJcm0gLWYgJCQoREVTVERJUikkJChz bGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSyk7 IFwNCiAJJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXA0KLQkgICQkKHNsaWJk aXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQ0KKwkg ICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkv JChTSExJQl9TT0xJTkspDQogU0hMSUJfTUtNQVAgPSAkKHNyY2RpcikvbWtt YXAtc3ltdmVyLmF3aw0KIFNITElCX01BUEZJTEVTID0gJChzcmNkaXIpL2xp YmdjYy1zdGQudmVyDQpJbmRleDogZ2NjL2NvbmZpZy9hbHBoYS90LW9zZjQN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2Fs L3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9hbHBoYS90LW9zZjQs dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUNCmRpZmYgLXUgLXIxLjUgdC1v c2Y0DQotLS0gZ2NjL2NvbmZpZy9hbHBoYS90LW9zZjQJMTMgSnVuIDIwMDEg MTQ6MjY6MDIgLTAwMDAJMS41DQorKysgZ2NjL2NvbmZpZy9hbHBoYS90LW9z ZjQJMjkgRGVjIDIwMDIgMTU6Mjk6NTQgLTAwMDANCkBAIC0xNyw2ICsxNyw2 IEBADQogCSQoTE5fUykgJChTSExJQl9OQU1FKSAkKFNITElCX1NPTkFNRSkN CiAjICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZy b20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBX ZSB3YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1l Lg0KLVNITElCX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkgJChTSExJQl9O QU1FKSAkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCi0Jcm0gLWYg JCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsgXA0KLQkkKExOX1MpICQoU0hM SUJfU09OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX05BTUUpDQorU0hMSUJf SU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAkKFNITElCX05BTUUpICQkKERF U1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9TT05BTUUpOyBcDQorCXJtIC1m ICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsgXA0KKwkk KExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChERVNURElSKSQkKHNsaWJkaXIp LyQoU0hMSUJfTkFNRSkNCkluZGV4OiBnY2MvY29uZmlnL2FyYy90LWFyYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwv c3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL2FyYy90LWFyYyx2DQpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEuNSB0LWFyYw0K LS0tIGdjYy9jb25maWcvYXJjL3QtYXJjCTMxIE1heSAyMDAyIDIwOjExOjQ5 IC0wMDAwCTEuNQ0KKysrIGdjYy9jb25maWcvYXJjL3QtYXJjCTI5IERlYyAy MDAyIDE1OjMwOjQyIC0wMDAwDQpAQCAtNjIsMTAgKzYyLDEwIEBADQogaW5z dGFsbC1tdWx0aWxpYi1hcmM6IGluc3RhbGwtbXVsdGlsaWINCiAJZm9yIGkg aW4gYCQoR0NDX0ZPUl9UQVJHRVQpIC0tcHJpbnQtbXVsdGktbGliYDsgZG8g XA0KIAkgIGRpcj1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvOy4qJCQvLydgOyBc DQotCSAgcm0gLWYgJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0aW5pdC5vOyBc DQotCSAgJChJTlNUQUxMX0RBVEEpICQke2Rpcn0vY3J0aW5pdC5vICQobGli c3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0KLQkgIGNobW9kIGEteCAk KGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87IFwNCi0JICBybSAtZiAk KGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRmaW5pLm87IFwNCi0JICAkKElOU1RB TExfREFUQSkgJCR7ZGlyfS9jcnRmaW5pLm8gJChsaWJzdWJkaXIpLyQke2Rp cn0vY3J0ZmluaS5vOyBcDQotCSAgY2htb2QgYS14ICQobGlic3ViZGlyKS8k JHtkaXJ9L2NydGZpbmkubzsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGxp YnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87IFwNCisJICAkKElOU1RBTExf REFUQSkgJCR7ZGlyfS9jcnRpbml0Lm8gJChERVNURElSKSQobGlic3ViZGly KS8kJHtkaXJ9L2NydGluaXQubzsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RE SVIpJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0aW5pdC5vOyBcDQorCSAgcm0g LWYgJChERVNURElSKSQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGZpbmkubzsg XA0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtkaXJ9L2NydGZpbmkubyAkKERF U1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0ZmluaS5vOyBcDQorCSAg Y2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRm aW5pLm87IFwNCiAJZG9uZQ0KSW5kZXg6IGdjYy9jb25maWcvYXJtL3QtbmV0 YnNkDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9s b2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9jb25maWcvYXJtL3QtbmV0 YnNkLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41DQpkaWZmIC11IC1yMS41 IHQtbmV0YnNkDQotLS0gZ2NjL2NvbmZpZy9hcm0vdC1uZXRic2QJMTMgRGVj IDIwMDEgMTQ6MjQ6MDMgLTAwMDAJMS41DQorKysgZ2NjL2NvbmZpZy9hcm0v dC1uZXRic2QJMjkgRGVjIDIwMDIgMTU6MzE6MzMgLTAwMDANCkBAIC0xNiw5 ICsxNiw5IEBADQogCSQoTE5fUykgJChTSExJQl9OQU1FKSAkKFNITElCX1NP TkFNRSkNCiAjICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0 IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2Mu bWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFs bCB0aW1lLg0KLVNITElCX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkgJChT SExJQl9OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCi0J cm0gLWYgJCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsgXA0KLQkkKExOX1Mp ICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX05BTUUpDQor U0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAkKFNITElCX05BTUUp ICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9TT05BTUUpOyBcDQor CXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsg XA0KKwkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChERVNURElSKSQkKHNs aWJkaXIpLyQoU0hMSUJfTkFNRSkNCiANCiAjIERvbid0IGJ1aWxkIGVucXVp cmUNCiBFTlFVSVJFPQ0KSW5kZXg6IGdjYy9jb25maWcvaWE2NC90LWhwdXgN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2Fs L3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9pYTY0L3QtaHB1eCx2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNC4zMC4xDQpkaWZmIC11IC1yMS40 LjMwLjEgdC1ocHV4DQotLS0gZ2NjL2NvbmZpZy9pYTY0L3QtaHB1eAkxNyBT ZXAgMjAwMiAyMjo1OTowMCAtMDAwMAkxLjQuMzAuMQ0KKysrIGdjYy9jb25m aWcvaWE2NC90LWhwdXgJMjkgRGVjIDIwMDIgMTU6MzI6NDggLTAwMDANCkBA IC00MCw5ICs0MCw5IEBADQogCSQoTE5fUykgQHNobGliX2Jhc2VfbmFtZUAu c28gQHNobGliX2Jhc2VfbmFtZUAuc28uMA0KICMgJChzbGliZGlyKSBkb3Vi bGUgcXVvdGVkIHRvIHByb3RlY3QgaXQgZnJvbSBleHBhbnNpb24gd2hpbGUg YnVpbGRpbmcNCiAjIGxpYmdjYy5tay4gIFdlIHdhbnQgdGhpcyBkZWxheWVk IHVudGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUuDQotU0hMSUJfSU5TVEFMTCA9 ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJfYmFzZV9uYW1lQC5zbyAkJChzbGli ZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zby4wOyBcDQotCXJtIC1mICQkKHNs aWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvOyBcDQotCSQoTE5fUykgQHNo bGliX2Jhc2VfbmFtZUAuc28uMCAkJChzbGliZGlyKS9Ac2hsaWJfYmFzZV9u YW1lQC5zbzsgXA0KLQljaG1vZCAreCAkJChzbGliZGlyKS9Ac2hsaWJfYmFz ZV9uYW1lQC5zbw0KK1NITElCX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkg QHNobGliX2Jhc2VfbmFtZUAuc28gJCQoREVTVERJUikkJChzbGliZGlyKS9A c2hsaWJfYmFzZV9uYW1lQC5zby4wOyBcDQorCXJtIC1mICQkKERFU1RESVIp JCQoc2xpYmRpcikvQHNobGliX2Jhc2VfbmFtZUAuc287IFwNCisJJChMTl9T KSBAc2hsaWJfYmFzZV9uYW1lQC5zby4wICQkKERFU1RESVIpJCQoc2xpYmRp cikvQHNobGliX2Jhc2VfbmFtZUAuc287IFwNCisJY2htb2QgK3ggJCQoREVT VERJUikkJChzbGliZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zbw0KIA0KIFNI TElCX01LTUFQID0gJChzcmNkaXIpL21rbWFwLWZsYXQuYXdrDQpJbmRleDog Z2NjL2NvbmZpZy9taXBzL3QtaXJpczUtNg0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2dj Yy9nY2MvY29uZmlnL21pcHMvdC1pcmlzNS02LHYNCnJldHJpZXZpbmcgcmV2 aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIHQtaXJpczUtNg0KLS0tIGdjYy9j b25maWcvbWlwcy90LWlyaXM1LTYJMjkgSnVsIDIwMDIgMjI6MjE6NDEgLTAw MDAJMS4yDQorKysgZ2NjL2NvbmZpZy9taXBzL3QtaXJpczUtNgkyOSBEZWMg MjAwMiAxNTo0MDoxNyAtMDAwMA0KQEAgLTIwLDExICsyMCwxMSBAQA0KICMg JChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3QgaXQgZnJvbSBl eHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5tay4gIFdlIHdh bnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUuDQog U0hMSUJfSU5TVEFMTCA9IFwNCi0JJCQoU0hFTEwpICQkKHNyY2RpcikvbWtp bnN0YWxsZGlycyAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsg XA0KKwkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQkKERF U1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCk7IFwNCiAJ JChJTlNUQUxMX0RBVEEpICQoU0hMSUJfTkFNRSkgXA0KLQkgICQkKHNsaWJk aXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0K LQlybSAtZiAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNI TElCX1NPTElOSyk7IFwNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIpJChT SExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0KKwlybSAt ZiAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp LyQoU0hMSUJfU09MSU5LKTsgXA0KIAkkKExOX1MpICQoU0hMSUJfU09OQU1F KSBcDQotCSAgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChT SExJQl9TT0xJTkspDQorCSAgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hM SUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykNCiBTSExJQl9NS01B UCA9ICQoc3JjZGlyKS9ta21hcC1mbGF0LmF3aw0KIFNITElCX01BUEZJTEVT ID0gJChzcmNkaXIpL2xpYmdjYy1zdGQudmVyDQpJbmRleDogZ2NjL2NvbmZp Zy9wYS90LWhwdXgtc2hsaWINCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2Nv bmZpZy9wYS90LWhwdXgtc2hsaWIsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjENCmRpZmYgLXUgLXIxLjEgdC1ocHV4LXNobGliDQotLS0gZ2NjL2NvbmZp Zy9wYS90LWhwdXgtc2hsaWIJMTkgRGVjIDIwMDEgMTc6NTk6MDUgLTAwMDAJ MS4xDQorKysgZ2NjL2NvbmZpZy9wYS90LWhwdXgtc2hsaWIJMjkgRGVjIDIw MDIgMTU6NTA6MTcgLTAwMDANCkBAIC0xMyw3ICsxMyw3IEBADQogIyAkKHNs aWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFu c2lvbiB3aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0 aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCiBTSExJ Ql9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpIC1tIDU1NSAkKFNITElCX05B TUUpIFwNCi0JJCQoc2xpYmRpcikvJChTSExJQl9TT05BTUUpOyBcDQotICAg ICAgICBybSAtZiAkJChzbGliZGlyKS8kKFNITElCX05BTUUpOyBcDQotICAg ICAgICAkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGlyKS8kKFNI TElCX05BTUUpDQorCSQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9T T05BTUUpOyBcDQorICAgICAgICBybSAtZiAkJChERVNURElSKSQkKHNsaWJk aXIpLyQoU0hMSUJfTkFNRSk7IFwNCisgICAgICAgICQoTE5fUykgJChTSExJ Ql9TT05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9OQU1F KQ0KIA0KSW5kZXg6IGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NDMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9j dnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg0Myx2DQpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgNCmRpZmYgLXUgLXIxLjE4IHQtYWl4 NDMNCi0tLSBnY2MvY29uZmlnL3JzNjAwMC90LWFpeDQzCTIwIEp1bCAyMDAy IDAyOjIwOjE2IC0wMDAwCTEuMTgNCisrKyBnY2MvY29uZmlnL3JzNjAwMC90 LWFpeDQzCTI5IERlYyAyMDAyIDE1OjUxOjA5IC0wMDAwDQpAQCAtNTUsNyAr NTUsNyBAQA0KIAlybSAtZiBAbXVsdGlsaWJfZGlyQC9zaHIubw0KICMgJChz bGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3QgaXQgZnJvbSBleHBh bnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5tay4gIFdlIHdhbnQg dGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUuDQotU0hM SUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJfYmFzZV9uYW1l QC5hICQkKHNsaWJkaXIpLw0KK1NITElCX0lOU1RBTEwgPSAkKElOU1RBTExf REFUQSkgQHNobGliX2Jhc2VfbmFtZUAuYSAkJChERVNURElSKSQkKHNsaWJk aXIpLw0KIFNITElCX0xJQlMgPSAtbGMgYGNhc2UgQHNobGliX2Jhc2VfbmFt ZUAgaW4gKnB0aHJlYWQqKSBlY2hvIC1scHRocmVhZCA7OyBlc2FjYA0KIFNI TElCX01LTUFQID0gJChzcmNkaXIpL21rbWFwLWZsYXQuYXdrDQogU0hMSUJf TUFQRklMRVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4OiBn Y2MvY29uZmlnL3JzNjAwMC90LWFpeDUyDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2Nj L2djYy9jb25maWcvcnM2MDAwL3QtYWl4NTIsdg0KcmV0cmlldmluZyByZXZp c2lvbiAxLjEuMi4xDQpkaWZmIC11IC1yMS4xLjIuMSB0LWFpeDUyDQotLS0g Z2NjL2NvbmZpZy9yczYwMDAvdC1haXg1MgkxNSBPY3QgMjAwMiAwMTozMzox OSAtMDAwMAkxLjEuMi4xDQorKysgZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg1 MgkyOSBEZWMgMjAwMiAxNTo1NDo1OCAtMDAwMA0KQEAgLTM2LDcgKzM2LDcg QEANCiAJcm0gLWYgQG11bHRpbGliX2RpckAvc2hyLm8NCiAjICQoc2xpYmRp cikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9u IHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMg ZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KLVNITElCX0lO U1RBTEwgPSAkKElOU1RBTExfREFUQSkgQHNobGliX2Jhc2VfbmFtZUAuYSAk JChzbGliZGlyKS8NCitTSExJQl9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEp IEBzaGxpYl9iYXNlX25hbWVALmEgJCQoREVTVERJUikkJChzbGliZGlyKS8N CiBTSExJQl9MSUJTID0gLWxjIGBjYXNlIEBzaGxpYl9iYXNlX25hbWVAIGlu ICpwdGhyZWFkKikgZWNobyAtbHB0aHJlYWQgOzsgZXNhY2ANCiBTSExJQl9N S01BUCA9ICQoc3JjZGlyKS9ta21hcC1mbGF0LmF3aw0KIFNITElCX01BUEZJ TEVTID0gJChzcmNkaXIpL2xpYmdjYy1zdGQudmVyDQpJbmRleDogZ2NjL2Nw L01ha2UtbGFuZy5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp bGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY3AvTWFr ZS1sYW5nLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjEuNC40DQpk aWZmIC11IC1yMS4xMjEuNC40IE1ha2UtbGFuZy5pbg0KLS0tIGdjYy9jcC9N YWtlLWxhbmcuaW4JMSBEZWMgMjAwMiAwNTo0Mjo1MSAtMDAwMAkxLjEyMS40 LjQNCisrKyBnY2MvY3AvTWFrZS1sYW5nLmluCTI5IERlYyAyMDAyIDE2OjA4 OjU2IC0wMDAwDQpAQCAtMTQyLDI3ICsxNDIsMzIgQEANCiBjKysuaW5zdGFs bC1jb21tb246IGluc3RhbGxkaXJzDQogCS1pZiBbIC1mIGNjMXBsdXMkKGV4 ZWV4dCkgXSA7IHRoZW4gXA0KIAkgIGlmIFsgLWYgZysrLWNyb3NzJChleGVl eHQpIF0gOyB0aGVuIFwNCi0JICAgIHJtIC1mICQoYmluZGlyKS8kKEdYWF9D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGcrKy1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJChHWFhfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIGNobW9kIGEreCAkKGJpbmRpcikv JChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJtIC1mICQo YmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAg JChMTikgJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpICQo YmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAg aWYgWyAtZCAkKGdjY190b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQotCSAg ICAgIHJtIC1mICQoZ2NjX3Rvb2xkaXIpL2Jpbi9nKyskKGV4ZWV4dCk7IFwN Ci0JICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGcrKy1jcm9zcyQoZXhlZXh0 KSAkKGdjY190b29sZGlyKS9iaW4vZysrJChleGVleHQpOyBcDQotCSAgICAg IHJtIC1mICQoZ2NjX3Rvb2xkaXIpL2Jpbi9jKyskKGV4ZWV4dCk7IFwNCi0J ICAgICAgJChMTikgJChnY2NfdG9vbGRpcikvYmluL2crKyQoZXhlZXh0KSAk KGdjY190b29sZGlyKS9iaW4vYysrJChleGVleHQpOyBcDQorCSAgICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVl eHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZysrLWNyb3NzJChl eGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkk KGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERFU1RESVIpJChiaW5k aXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1hYX0NST1NTX05BTUUpJChleGVl eHQpOyBcDQorCSAgICAoIGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgXA0K KwkgICAgICAkKExOKSAkKEdYWF9DUk9TU19OQU1FKSQoZXhlZXh0KSAkKENY WF9DUk9TU19OQU1FKSQoZXhlZXh0KSApOyBcDQorCSAgICBpZiBbIC1kICQo REVTVERJUikkKGdjY190b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAg ICAgIHJtIC1mICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4vZysrJChl eGVleHQpOyBcDQorCSAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnKystY3Jv c3MkKGV4ZWV4dCkgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nKysk KGV4ZWV4dCk7IFwNCisJICAgICAgcm0gLWYgJChERVNURElSKSQoZ2NjX3Rv b2xkaXIpL2Jpbi9jKyskKGV4ZWV4dCk7IFwNCisJICAgICAgKCBjZCAkKERF U1RESVIpJChnY2NfdG9vbGRpcikvYmluICYmIFwNCisJICAgICAgICAkKExO KSBnKyskKGV4ZWV4dCkgYysrJChleGVleHQpICk7IFwNCiAJICAgIGVsc2Ug dHJ1ZTsgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgIHJtIC1mICQoYmluZGly KS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZysrJChleGVleHQpICQoYmluZGlyKS8kKEdYWF9J TlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBhK3ggJChi aW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAg IHJtIC1mICQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQp OyBcDQotCSAgICAkKExOKSAkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KSAkKGJpbmRpcikvJChDWFhfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KLQkgICAgcm0gLWYgJChiaW5kaXIpLyQoR1hYX1RBUkdFVF9J TlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICAkKExOKSAkKGJpbmRp cikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJChH WFhfVEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJt IC1mICQoYmluZGlyKS8kKENYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KLQkgICAgJChMTikgJChiaW5kaXIpLyQoQ1hYX0lOU1RBTExf TkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQoQ1hYX1RBUkdFVF9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChi aW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnKyskKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAg ICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChi aW5kaXIpLyQoQ1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAg ICggY2QgJChERVNURElSKSQoYmluZGlyKSAmJiBcDQorCSAgICAgICQoTE4p ICQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChDWFhfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSApOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChi aW5kaXIpLyQoR1hYX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQorCSAgICAoIGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgXA0KKwkgICAg ICAkKExOKSAkKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQoR1hYX1RB UkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpICk7IFwNCisJICAgIHJtIC1m ICQoREVTVERJUikkKGJpbmRpcikvJChDWFhfVEFSR0VUX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCk7IFwNCisJICAgICggY2QgJChERVNURElSKSQoYmluZGly KSAmJiBcDQorCSAgICAgICQoTE4pICQoQ1hYX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCkgJChDWFhfVEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgKTsg XA0KIAkgIGZpIDsgXA0KIAlmaQ0KIA0KQEAgLTE3MSwyMyArMTc2LDIzIEBA DQogYysrLmluc3RhbGwtbWFuOiBpbnN0YWxsZGlycyAkKHNyY2RpcikvY3Av ZysrLjENCiAJLWlmIFsgLWYgY2MxcGx1cyQoZXhlZXh0KSBdIDsgdGhlbiBc DQogCSAgaWYgWyAtZiBnKystY3Jvc3MkKGV4ZWV4dCkgXSA7IHRoZW4gXA0K LQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFu MWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvY3Av ZysrLjEgJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7 IFwNCi0JICAgIGNobW9kIGEteCAkKG1hbjFkaXIpLyQoR1hYX0NST1NTX05B TUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQobWFu MWRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICAk KElOU1RBTExfREFUQSkgJChzcmNkaXIpL2NwL2crKy4xICQoREVTVERJUikk KG1hbjFkaXIpLyQoR1hYX0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KKwkg ICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0NST1NT X05BTUUpJChtYW4xZXh0KTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgcm0gLWYg JChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0K LQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9jcC9nKysuMSAkKG1h bjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAg ICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJCht YW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv JChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgICQoSU5T VEFMTF9EQVRBKSAkKHNyY2RpcikvY3AvZysrLjEgJChERVNURElSKSQobWFu MWRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAg IGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxM X05BTUUpJChtYW4xZXh0KTsgXA0KIAkgIGZpOyBcDQogCWVsc2UgdHJ1ZTsg ZmkNCiANCiBjKysudW5pbnN0YWxsOg0KLQktcm0gLXJmICQoYmluZGlyKS8k KENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChiaW5k aXIpLyQoQ1hYX0NST1NTX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChi aW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1y ZiAkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCi0JLXJt IC1yZiAkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFleHQp DQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFu MWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1hYX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChi aW5kaXIpLyQoQ1hYX0NST1NTX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVl eHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9DUk9T U19OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFk aXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQobWFuMWRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFl eHQpDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMgQSBsb3Qgb2YgdGhlIGFu Y2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0aGUgbWFpbiBtYWtlZmls ZS4NCkluZGV4OiBnY2MvZi9NYWtlLWxhbmcuaW4NCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2 cy9nY2MvZ2NjL2YvTWFrZS1sYW5nLmluLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMTIuMi40DQpkaWZmIC11IC1yMS4xMTIuMi40IE1ha2UtbGFuZy5p bg0KLS0tIGdjYy9mL01ha2UtbGFuZy5pbgkzIERlYyAyMDAyIDAyOjI1OjQ5 IC0wMDAwCTEuMTEyLjIuNA0KKysrIGdjYy9mL01ha2UtbGFuZy5pbgkyOSBE ZWMgMjAwMiAxNjoxNzoxMiAtMDAwMA0KQEAgLTI0NCwxMyArMjQ0LDEzIEBA DQogZjc3Lmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0KIAktaWYgWyAt ZiBmNzcxJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBpZiBbIC1mIGc3Ny1j cm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAkKGJpbmRp cikvJChHNzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnNzctY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQo Rzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBhK3gg JChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAg ICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUp JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZzc3LWNy b3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHNzdfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERFU1RESVIp JChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQogCSAg ZWxzZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGc3 NyQoZXhlZXh0KSAkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEc3N19JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIp JChiaW5kaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJ ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzckKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQor CSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEc3N19JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWVsc2UgdHJ1 ZTsgZmkNCiAJQGlmIFsgLWYgZjc3LWluc3RhbGwtb2sgLW8gLWYgJChzcmNk aXIpL2Y3Ny1pbnN0YWxsLW9rIF07IHRoZW4gXA0KQEAgLTI2Nyw0MyArMjY3 LDQzIEBADQogIyB0byBkbyB0aGUgaW5zdGFsbC4gIFRoZSBzZWQgcnVsZSB3 YXMgY29waWVkIGZyb20gc3RtcC1pbnQtaGRycy4NCiBmNzcuaW5zdGFsbC1p bmZvOiBmNzcuaW5mbyBpbnN0YWxsZGlycw0KIAlpZiBbIC1mICQoc3JjZGly KS9mL2c3Ny5pbmZvIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKGluZm9kaXIp L2c3Ny5pbmZvKjsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGluZm9kaXIp L2c3Ny5pbmZvKjsgXA0KIAkgIGZvciBmIGluICQoc3JjZGlyKS9mL2c3Ny5p bmZvKjsgZG8gXA0KIAkgICAgICByZWFsZmlsZT1gZWNobyAkJGYgfCBzZWQg LWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0JICAgICAgJChJTlNU QUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwNCisJICAg ICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChpbmZvZGlyKS8k JHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KLQkgIGNobW9kIGEteCAkKGlu Zm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIp JChpbmZvZGlyKS9nNzcuaW5mbyo7IFwNCiAJZWxzZSB0cnVlOyBmaQ0KIAlA aWYgWyAtZiAkKHNyY2RpcikvZi9nNzcuaW5mbyBdIDsgdGhlbiBcDQogCSAg aWYgJChTSEVMTCkgLWMgJ2luc3RhbGwtaW5mbyAtLXZlcnNpb24gfCBzZWQg MXEgfCBmZ3JlcCAtcyAtdiAtaSBkZWJpYW4nID4vZGV2L251bGwgMj4mMTsg dGhlbiBcDQotCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9 JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIjsgXA0KLQkgICAgaW5z dGFsbC1pbmZvIC0taW5mby1kaXI9JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3 Ny5pbmZvIHx8IDogOyBcDQorCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0t aW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgJChERVNURElSKSQoaW5m b2RpcikvZzc3LmluZm8iOyBcDQorCSAgICBpbnN0YWxsLWluZm8gLS1pbmZv LWRpcj0kKERFU1RESVIpJChpbmZvZGlyKSAkKERFU1RESVIpJChpbmZvZGly KS9nNzcuaW5mbyB8fCA6IDsgXA0KIAkgIGVsc2UgOiA7IGZpOyBcDQogCWVs c2UgOiA7IGZpDQogDQogZjc3Lmluc3RhbGwtbWFuOiAkKEdFTkVSQVRFRF9N QU5QQUdFUykgaW5zdGFsbGRpcnMNCiAJLWlmIFsgLWYgZjc3MSQoZXhlZXh0 KSBdIDsgdGhlbiBcDQogCSAgaWYgWyAtZiBnNzctY3Jvc3MkKGV4ZWV4dCkg XSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEc3N19DUk9T U19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUp JChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRpcikvJChH NzdfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAk KERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4 dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8k KEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBlbHNlIFwNCi0J ICAgIHJtIC1mICQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFu MWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9n NzcuMSAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQp OyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEc3N19JTlNUQUxM X05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQo bWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJ ICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAkKERFU1RE SVIpJChtYW4xZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsg XA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3 X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAgZmk7IFwNCiAJZWxz ZSB0cnVlOyBmaQ0KIA0KIGY3Ny51bmluc3RhbGw6IGluc3RhbGxkaXJzDQog CWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12ZXJzaW9uIHwgc2Vk IDFxIHwgZmdyZXAgLXMgLXYgLWkgZGViaWFuJyA+L2Rldi9udWxsIDI+JjE7 IHRoZW4gXA0KLQkgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1kZWxldGUgLS1p bmZvLWRpcj0kKGluZm9kaXIpICQoaW5mb2RpcikvZzc3LmluZm8iOyBcDQot CSAgaW5zdGFsbC1pbmZvIC0tZGVsZXRlIC0taW5mby1kaXI9JChpbmZvZGly KSAkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAgZWNobyAiIGlu c3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVTVERJUikkKGlu Zm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZvIjsgXA0KKwkg IGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVTVERJUikk KGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDog OyBcDQogCWVsc2UgOiA7IGZpDQotCXJtIC1yZiAkKGJpbmRpcikvJChHNzdf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQlybSAtcmYgJChiaW5kaXIp LyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCXJtIC1yZiAkKG1h bjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQotCXJt IC1yZiAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUpJChtYW4xZXh0KTsg XA0KLQlybSAtcmYgJChpbmZvZGlyKS9nNzcuaW5mbyoNCisJcm0gLXJmICQo REVTVERJUikkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEc3N19DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQobWFu MWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJcm0g LXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUpJCht YW4xZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoaW5mb2RpcikvZzc3 LmluZm8qDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMgQSBsb3Qgb2YgdGhl IGFuY2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0aGUgbWFpbiBtYWtl ZmlsZS4NCkluZGV4OiBnY2MvamF2YS9NYWtlLWxhbmcuaW4NCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMv Z2NjLWN2cy9nY2MvZ2NjL2phdmEvTWFrZS1sYW5nLmluLHYNCnJldHJpZXZp bmcgcmV2aXNpb24gMS45MS4yLjENCmRpZmYgLXUgLXIxLjkxLjIuMSBNYWtl LWxhbmcuaW4NCi0tLSBnY2MvamF2YS9NYWtlLWxhbmcuaW4JMSBEZWMgMjAw MiAwNTo0MzowOCAtMDAwMAkxLjkxLjIuMQ0KKysrIGdjYy9qYXZhL01ha2Ut bGFuZy5pbgkyOSBEZWMgMjAwMiAxNjoyNzowMiAtMDAwMA0KQEAgLTE3MSw1 MyArMTcxLDU0IEBADQogamF2YS5pbnN0YWxsLWNvbW1vbjogaW5zdGFsbGRp cnMNCiAJLWlmIFsgLWYgJChHQ0opJChleGVleHQpIF07IHRoZW4gXA0KIAkg IGlmIFsgLWYgJChHQ0opLWNyb3NzJChleGVleHQpIF07IHRoZW4gXA0KLQkg ICAgcm0gLWYgJChiaW5kaXIpLyQoSkFWQV9DUk9TU19OQU1FKSQoZXhlZXh0 KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQoR0NKKS1jcm9zcyQo ZXhlZXh0KSAkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQp OyBcDQotCSAgICBjaG1vZCBhK3ggJChiaW5kaXIpLyQoSkFWQV9DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmlu ZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSAkKEdDSiktY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN CisJICAgIGNobW9kIGEreCAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgcm0g LWYgJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChHQ0opJChleGVleHQpICQo YmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkg ICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KTsgXA0KLQkgICAgcm0gLWYgJChiaW5kaXIpLyQoSkFWQV9UQVJH RVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChMTikgJChi aW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChleGVleHQpICQoYmluZGly KS8kKEpBVkFfVEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJ ICAgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0lOU1RBTExf TkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAk KEdDSikkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKEpBVkFfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVT VERJUikkKGJpbmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7 IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX1RB UkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICAoIGNkICQo REVTVERJUikkKGJpbmRpcikgJiYgXA0KKwkgICAgICAkKExOKSAkKEpBVkFf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAkKEpBVkFfVEFSR0VUX0lOU1RBTExf TkFNRSkkKGV4ZWV4dCkgKTsgXA0KIAkgIGZpIDsgXA0KIAlmaSA7IFwNCiAg ICAgICAgIGZvciB0b29sIGluICQoSkFWQV9UQVJHRVRfSU5ERVBFTkRFTlRf QklOX1RPT0xTKTsgZG8gXA0KIAkgIHRvb2xfdHJhbnNmb3JtZWRfbmFtZT1g ZWNobyAkJHRvb2x8c2VkICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2A7 IFwNCiAgICAgICAgICAgaWYgWyAtZiAkJHRvb2wkKGV4ZWV4dCkgXTsgdGhl biBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVk X25hbWUkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAk JHRvb2wkKGV4ZWV4dCkgJChiaW5kaXIpLyQkdG9vbF90cmFuc2Zvcm1lZF9u YW1lJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBhK3ggJChiaW5kaXIpLyQk dG9vbF90cmFuc2Zvcm1lZF9uYW1lJChleGVleHQpOyBcDQorCSAgICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQkdG9vbF90cmFuc2Zvcm1lZF9uYW1l JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCR0b29s JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9y bWVkX25hbWUkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERFU1RE SVIpJChiaW5kaXIpLyQkdG9vbF90cmFuc2Zvcm1lZF9uYW1lJChleGVleHQp OyBcDQogICAgICAgICAgIGZpIDsgXA0KICAgICAgICBkb25lDQogDQogamF2 YS5pbnN0YWxsLW1hbjoNCiANCiBqYXZhLnVuaW5zdGFsbDoNCi0JLXJtIC1y ZiAkKGJpbmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0J LXJtIC1yZiAkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQp DQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQo bWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpLyQoSkFWQV9DUk9TU19O QU1FKSQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpL2djamgkKG1h bjFleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS9qdi1zY2FuJChtYW4xZXh0 KQ0KLQktcm0gLXJmICQobWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQot CS1ybSAtcmYgJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQotCS1ybSAtcmYg JChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KKwktcm0gLXJmICQo REVTVERJUikkKGJpbmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9DUk9T U19OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFk aXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChtYW4xZXh0KQ0KKwktcm0gLXJm ICQoREVTVERJUikkKG1hbjFkaXIpLyQoSkFWQV9DUk9TU19OQU1FKSQobWFu MWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9nY2poJCht YW4xZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL2p2LXNj YW4kKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikv amNmLWR1bXAkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFu MWRpcikvZ2lqJChtYW4xZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1h bjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQogDQogamF2YS5pbnN0YWxs LWluZm86IGluc3RhbGxkaXJzDQogCWlmIFsgLWYgamMxJChleGVleHQpIF0g OyB0aGVuIFwNCiAJICBpZiBbIC1mICQoc3JjZGlyKS9qYXZhL2djai5pbmZv IF07IHRoZW4gXA0KLQkgICAgcm0gLWYgJChpbmZvZGlyKS9nY2ouaW5mbyo7 IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGluZm9kaXIpL2djai5pbmZv KjsgXA0KIAkgICAgZm9yIGYgaW4gJChzcmNkaXIpL2phdmEvZ2NqLmluZm8q OyBkbyBcDQogCSAgICAgIHJlYWxmaWxlPWBlY2hvICQkZiB8IHNlZCAtZSAn c3wuKi9cKFteL10qXCkkJHxcMXwnYDsgXA0KLQkgICAgICAkKElOU1RBTExf REFUQSkgJCRmICQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0KKwkgICAgICAk KElOU1RBTExfREFUQSkgJCRmICQoREVTVERJUikkKGluZm9kaXIpLyQkcmVh bGZpbGU7IFwNCiAJICAgIGRvbmU7IFwNCi0JICAgIGNobW9kIGEteCAkKGlu Zm9kaXIpL2djai5pbmZvKjsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJ UikkKGluZm9kaXIpL2djai5pbmZvKjsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7 IFwNCiAJZWxzZSB0cnVlOyBmaQ0KLQktaWYgWyAtZiBqYzEkKGV4ZWV4dCkg XSAmJiBbIC1mICQoaW5mb2RpcikvZ2NqLmluZm8gXTsgdGhlbiBcDQorCS1p ZiBbIC1mIGpjMSQoZXhlZXh0KSBdICYmIFsgLWYgJChERVNURElSKSQoaW5m b2RpcikvZ2NqLmluZm8gXTsgdGhlbiBcDQogCSAgaWYgJChTSEVMTCkgLWMg J2luc3RhbGwtaW5mbyAtLXZlcnNpb24nID4vZGV2L251bGwgMj4mMTsgdGhl biBcDQotCSAgICBpbnN0YWxsLWluZm8gLS1kaXItZmlsZT0kKGluZm9kaXIp L2RpciAkKGluZm9kaXIpL2djai5pbmZvOyBcDQorCSAgICBpbnN0YWxsLWlu Zm8gLS1kaXItZmlsZT0kKERFU1RESVIpJChpbmZvZGlyKS9kaXIgJChERVNU RElSKSQoaW5mb2RpcikvZ2NqLmluZm87IFwNCiAJICBlbHNlIHRydWU7IGZp OyBcDQogCWVsc2UgdHJ1ZTsgZmkNCiANCkBAIC00MTgsMzMgKzQxOSwzMyBA QA0KIGphdmEuaW5zdGFsbC1tYW46IGluc3RhbGxkaXJzICQoR0VORVJBVEVE X0pBVkFfTUFOUEFHRVMpDQogCS1pZiBbIC1mICQoR0NKKSQoZXhlZXh0KSBd OyB0aGVuIFwNCiAJICBpZiBbIC1mICQoR0NKKS1jcm9zcyQoZXhlZXh0KSBd OyB0aGVuIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChKQVZBX0NST1NT X05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQo c3JjZGlyKS9qYXZhL2djai4xICQobWFuMWRpcikvJChKQVZBX0NST1NTX05B TUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRpcikv JChKQVZBX0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4x ZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZh L2djai4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoSkFWQV9DUk9TU19OQU1F KSQobWFuMWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJCht YW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAg ZWxzZSBcDQotCSAgICBybSAtZiAkKG1hbjFkaXIpLyQoSkFWQV9JTlNUQUxM X05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQo c3JjZGlyKS9qYXZhL2djai4xICQobWFuMWRpcikvJChKQVZBX0lOU1RBTExf TkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGly KS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIHJt IC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUp JChtYW4xZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9qYXZhL2djai4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoSkFWQV9JTlNU QUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgY2htb2QgYS14ICQoREVT VERJUikkKG1hbjFkaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChtYW4xZXh0 KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KLQktcm0gLWYgJChtYW4xZGlyKS9n Y2poJChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9q YXZhL2djamguMSAkKG1hbjFkaXIpL2djamgkKG1hbjFleHQpDQotCS1jaG1v ZCBhLXggJChtYW4xZGlyKS9nY2poJChtYW4xZXh0KQ0KLQktcm0gLWYgJCht YW4xZGlyKS9qdi1zY2FuJChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEp ICQoc3JjZGlyKS9qYXZhL2p2LXNjYW4uMSAkKG1hbjFkaXIpL2p2LXNjYW4k KG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4xZGlyKS9qdi1zY2FuJCht YW4xZXh0KQ0KLQktcm0gLWYgJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4 dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9qY2YtZHVt cC4xICQobWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQotCS1jaG1vZCBh LXggJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCi0JLXJtIC1mICQo bWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQo c3JjZGlyKS9qYXZhL2dpai4xICQobWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0K LQktY2htb2QgYS14ICQobWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0KLQktcm0g LWYgJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KLQktJChJTlNU QUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2p2LWNvbnZlcnQuMSAkKG1hbjFk aXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4x ZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW4xZGly KS9ybWljJChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9qYXZhL3JtaWMuMSAkKG1hbjFkaXIpL3JtaWMkKG1hbjFleHQpDQotCS1j aG1vZCBhLXggJChtYW4xZGlyKS9ybWljJChtYW4xZXh0KQ0KLQktcm0gLWYg JChtYW4xZGlyKS9ybWlyZWdpc3RyeSQobWFuMWV4dCkNCi0JLSQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9ybWlyZWdpc3RyeS4xICQobWFuMWRp cikvcm1pcmVnaXN0cnkkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4x ZGlyKS9ybWlyZWdpc3RyeSQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJ UikkKG1hbjFkaXIpL2djamgkKG1hbjFleHQpDQorCS0kKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2phdmEvZ2NqaC4xICQoREVTVERJUikkKG1hbjFkaXIp L2djamgkKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChERVNURElSKSQobWFu MWRpcikvZ2NqaCQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJUikkKG1h bjFkaXIpL2p2LXNjYW4kKG1hbjFleHQpDQorCS0kKElOU1RBTExfREFUQSkg JChzcmNkaXIpL2phdmEvanYtc2Nhbi4xICQoREVTVERJUikkKG1hbjFkaXIp L2p2LXNjYW4kKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChERVNURElSKSQo bWFuMWRpcikvanYtc2NhbiQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJ UikkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0KKwktJChJTlNUQUxM X0RBVEEpICQoc3JjZGlyKS9qYXZhL2pjZi1kdW1wLjEgJChERVNURElSKSQo bWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChE RVNURElSKSQobWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQorCS1ybSAt ZiAkKERFU1RESVIpJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQorCS0kKElO U1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvZ2lqLjEgJChERVNURElSKSQo bWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJ UikkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJ UikkKG1hbjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQorCS0kKElOU1RB TExfREFUQSkgJChzcmNkaXIpL2phdmEvanYtY29udmVydC4xICQoREVTVERJ UikkKG1hbjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQorCS1jaG1vZCBh LXggJChERVNURElSKSQobWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkN CisJLXJtIC1mICQoREVTVERJUikkKG1hbjFkaXIpL3JtaWMkKG1hbjFleHQp DQorCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvcm1pYy4xICQo REVTVERJUikkKG1hbjFkaXIpL3JtaWMkKG1hbjFleHQpDQorCS1jaG1vZCBh LXggJChERVNURElSKSQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCisJLXJt IC1mICQoREVTVERJUikkKG1hbjFkaXIpL3JtaXJlZ2lzdHJ5JChtYW4xZXh0 KQ0KKwktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL3JtaXJlZ2lz dHJ5LjEgJChERVNURElSKSQobWFuMWRpcikvcm1pcmVnaXN0cnkkKG1hbjFl eHQpDQorCS1jaG1vZCBhLXggJChERVNURElSKSQobWFuMWRpcikvcm1pcmVn aXN0cnkkKG1hbjFleHQpDQpJbmRleDogZ2NjL3RyZWVsYW5nL01ha2UtbGFu Zy5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3Iv bG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvdHJlZWxhbmcvTWFrZS1s YW5nLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS43LjQuMQ0KZGlmZiAt dSAtcjEuNy40LjEgTWFrZS1sYW5nLmluDQotLS0gZ2NjL3RyZWVsYW5nL01h a2UtbGFuZy5pbgkxIERlYyAyMDAyIDA1OjQzOjE0IC0wMDAwCTEuNy40LjEN CisrKyBnY2MvdHJlZWxhbmcvTWFrZS1sYW5nLmluCTI5IERlYyAyMDAyIDE2 OjMwOjM3IC0wMDAwDQpAQCAtMTYxLDEwICsxNjEsMTAgQEANCiAJZG8gXA0K IAkgICBpZiBbIC1mICQkbmFtZSBdIDsgdGhlbiBcDQogCSAgICBuYW1lMj0i YGVjaG8gXGBiYXNlbmFtZSAkJG5hbWVcYCB8IHNlZCAtZSAnJChwcm9ncmFt X3RyYW5zZm9ybV9uYW1lKScgYCI7IFwNCi0JICAgIHJtIC1mICQoYmluZGly KS8kJG5hbWUyJChleGVleHQpOyBcDQotCSAgICBlY2hvICQoSU5TVEFMTF9Q Uk9HUkFNKSAkJG5hbWUkKGV4ZWV4dCkgJChiaW5kaXIpLyQkbmFtZTIkKGV4 ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5hbWUkKGV4 ZWV4dCkgJChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0JICAgIGNo bW9kIGEreCAkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgICAg cm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBc DQorCSAgICBlY2hvICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5hbWUkKGV4ZWV4 dCkgJChERVNURElSKSQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQor CSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRuYW1lJChleGVleHQpICQoREVT VERJUikkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgICAgY2ht b2QgYSt4ICQoREVTVERJUikkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsg XA0KIAkgIGZpIDsgXA0KIAlkb25lDQogCSQoU1RBTVApIHRyZWVsYW5nLmlu c3RhbGwuY29tbW9uLmRvbmUNCkBAIC0xNzQsOSArMTc0LDkgQEANCiAJZG8g XA0KIAkgICBpZiBbIC1mICQkbmFtZSBdIDsgdGhlbiBcDQogCSAgICBuYW1l Mj0iYGVjaG8gXGBiYXNlbmFtZSAkJG5hbWVcYCB8IHNlZCAtZSAnJChwcm9n cmFtX3RyYW5zZm9ybV9uYW1lKScgYCI7IFwNCi0JICAgIHJtIC1mICQobGli c3ViZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgJCRuYW1lJChleGVleHQpICQobGlic3ViZGlyKS8kJG5hbWUy JChleGVleHQpOyBcDQotCSAgICBjaG1vZCBhK3ggJChsaWJzdWJkaXIpLyQk bmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGxp YnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxM X1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChsaWJzdWJk aXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERF U1RESVIpJChsaWJzdWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCiAJICBm aSA7IFwNCiAJZG9uZQ0KIA0KQEAgLTE4OCw4ICsxODgsOCBAQA0KIAkgIGVj aG8gJCRuYW1lOyBcDQogCSAgbmFtZTI9ImBlY2hvICQkbmFtZSB8IHNlZCAt ZSAnJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKScgYCI7IFwNCiAJICBlY2hv IGJlY29tZXMgJCRuYW1lMjsgXA0KLQkgIGVjaG8gLXJtIC1yZiAkKGJpbmRp cikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkgIHJtIC1yZiAkKGJpbmRpcikv JCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgIGVjaG8gLXJtIC1yZiAkKERFU1RE SVIpJChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICBybSAtcmYg JChERVNURElSKSQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQogCWRv bmUNCiAJLXJtIHRyZWVsYW5nLmluc3RhbGwuY29tbW9uLmRvbmUNCiANCklu ZGV4OiBsaWJmMmMvTWFrZWZpbGUuaW4NCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2Mv bGliZjJjL01ha2VmaWxlLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41 My44LjENCmRpZmYgLXUgLXIxLjUzLjguMSBNYWtlZmlsZS5pbg0KLS0tIGxp YmYyYy9NYWtlZmlsZS5pbgkxIE9jdCAyMDAyIDE3OjMyOjQ4IC0wMDAwCTEu NTMuOC4xDQorKysgbGliZjJjL01ha2VmaWxlLmluCTI5IERlYyAyMDAyIDE3 OjA5OjE3IC0wMDAwDQpAQCAtODEsNiArODEsNyBAQA0KIAlXQVJOX0NGTEFH Uz0nJChXQVJOX0NGTEFHUyknIFwNCiAJQ0ZMQUdTPSckKENGTEFHUyknIFwN CiAJQ1BQRkxBR1M9JyQoQ1BQRkxBR1MpJyBcDQorCURFU1RESVI9JyQoREVT VERJUiknIFwNCiAJQVI9JyQoQVIpJyBcDQogCVJBTkxJQj0nJChSQU5MSUIp JyBcDQogCXByZWZpeD0nJChwcmVmaXgpJyBcDQpAQCAtMjE0LDIxICsyMTUs MjEgQEANCiAJY2QgbGliVTc3OyAkKE1BS0UpIEc3N0RJUj0uLi8uLi8uLi9n Y2MvIGNoZWNrDQogDQogaW5zdGFsbDogYWxsDQotCSQoU0hFTEwpICQodG9w bGV2ZWxfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoZ2xpYmNwcF90b29sZXhl Y2xpYmRpcikNCi0JJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RB TEwpICQoTElCRzJDKSAkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQotCSQo SU5TVEFMTF9EQVRBKSBsaWJmcnRiZWdpbi5hICQoZ2xpYmNwcF90b29sZXhl Y2xpYmRpcikNCi0JJChSQU5MSUIpICQoZ2xpYmNwcF90b29sZXhlY2xpYmRp cikvbGliZnJ0YmVnaW4uYQ0KLQkkKElOU1RBTExfREFUQSkgZzJjLmggJChs aWJzdWJkaXIpL2luY2x1ZGUvZzJjLmgNCisJJChTSEVMTCkgJCh0b3BsZXZl bF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoZ2xpYmNwcF90 b29sZXhlY2xpYmRpcikNCisJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAk KElOU1RBTEwpICQoTElCRzJDKSAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xl eGVjbGliZGlyKQ0KKwkkKElOU1RBTExfREFUQSkgbGliZnJ0YmVnaW4uYSAk KERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwkkKFJBTkxJ QikgJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikvbGliZnJ0 YmVnaW4uYQ0KKwkkKElOU1RBTExfREFUQSkgZzJjLmggJChERVNURElSKSQo bGlic3ViZGlyKS9pbmNsdWRlL2cyYy5oDQogCSQoTVVMVElETykgJChGTEFH U19UT19QQVNTKSBtdWx0aS1kbyBETz0iJEAiDQotCUAtJChMSUJUT09MKSAt LW1vZGU9ZmluaXNoICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikNCisJQC0k KExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChERVNURElSKSQoZ2xpYmNwcF90 b29sZXhlY2xpYmRpcikNCiANCiBpbnN0YWxsLXN0cmlwOg0KIAkkKE1BS0Up IElOU1RBTExfUFJPR1JBTT0nJChJTlNUQUxMX1BST0dSQU0pIC1zJyBpbnN0 YWxsDQogDQogdW5pbnN0YWxsOg0KLQlybSAtZiAkKGxpYnN1YmRpcikvaW5j bHVkZS9nMmMuaA0KLQlybSAtZiAkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIp L2xpYmZydGJlZ2luLmENCi0JJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxs IHJtIC1mICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikkKExJQkcyQ19CQVNF KS5sYQ0KKwlybSAtZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUv ZzJjLmgNCisJcm0gLWYgJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhlY2xp YmRpcikvbGliZnJ0YmVnaW4uYQ0KKwkkKExJQlRPT0wpIC0tbW9kZT11bmlu c3RhbGwgcm0gLWYgJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhlY2xpYmRp cikkKExJQkcyQ19CQVNFKS5sYQ0KIAkkKE1VTFRJRE8pICQoRkxBR1NfVE9f UEFTUykgbXVsdGktZG8gRE89IiRAIg0KIA0KIG1vc3RseWNsZWFuOg0KSW5k ZXg6IGxpYmliZXJ0eS9NYWtlZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2dj Yy9saWJpYmVydHkvTWFrZWZpbGUuaW4sdg0KcmV0cmlldmluZyByZXZpc2lv biAxLjc2LjQuMg0KZGlmZiAtdSAtcjEuNzYuNC4yIE1ha2VmaWxlLmluDQot LS0gbGliaWJlcnR5L01ha2VmaWxlLmluCTMgRGVjIDIwMDIgMTc6MzY6MjUg LTAwMDAJMS43Ni40LjINCisrKyBsaWJpYmVydHkvTWFrZWZpbGUuaW4JMzAg RGVjIDIwMDIgMDU6NTM6MTEgLTAwMDANCkBAIC04NCw2ICs4NCw3IEBADQog CSJBUl9GTEFHUz0kKEFSX0ZMQUdTKSIgXA0KIAkiQ0M9JChDQykiIFwNCiAJ IkNGTEFHUz0kKENGTEFHUykiIFwNCisJIkRFU1RESVI9JChERVNURElSKSIg XA0KIAkiTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKSIgXA0KIAkiRVhUUkFfT0ZJ TEVTPSQoRVhUUkFfT0ZJTEVTKSIgXA0KIAkiSERFRklORVM9JChIREVGSU5F UykiIFwNCkluZGV4OiBsaWJvYmpjL01ha2VmaWxlLmluDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2dj Yy1jdnMvZ2NjL2xpYm9iamMvTWFrZWZpbGUuaW4sdg0KcmV0cmlldmluZyBy ZXZpc2lvbiAxLjIxLjguMQ0KZGlmZiAtdSAtcjEuMjEuOC4xIE1ha2VmaWxl LmluDQotLS0gbGlib2JqYy9NYWtlZmlsZS5pbgkxIE9jdCAyMDAyIDE3OjMy OjU4IC0wMDAwCTEuMjEuOC4xDQorKysgbGlib2JqYy9NYWtlZmlsZS5pbgky OSBEZWMgMjAwMiAxNzoxMDo1OCAtMDAwMA0KQEAgLTExOCw2ICsxMTgsNyBA QA0KIAkiQVJfRkxBR1M9JChBUl9GTEFHUykiIFwNCiAJIkNDPSQoQ0MpIiBc DQogCSJDRkxBR1M9JChDRkxBR1MpIiBcDQorCSJERVNURElSPSQoREVTVERJ UikiIFwNCiAJIkxJQkNGTEFHUz0kKExJQkNGTEFHUykiIFwNCiAJIkVYVFJB X09GSUxFUz0kKEVYVFJBX09GSUxFUykiIFwNCiAJIkhERUZJTkVTPSQoSERF RklORVMpIiBcDQpAQCAtMzE4LDIxICszMTksMjEgQEANCiBpbnN0YWxsOiBp bnN0YWxsLWxpYnMgaW5zdGFsbC1oZWFkZXJzDQogDQogaW5zdGFsbC1saWJz OiBpbnN0YWxsZGlycw0KLQkkKFNIRUxMKSAkKHRvcGxldmVsX3NyY2Rpcikv bWtpbnN0YWxsZGlycyAkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQotCSQo TElCVE9PTF9JTlNUQUxMKSAkKElOU1RBTEwpIGxpYm9iamMubGEgJChnbGli Y3BwX3Rvb2xleGVjbGliZGlyKTsNCisJJChTSEVMTCkgJCh0b3BsZXZlbF9z cmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoZ2xpYmNwcF90b29s ZXhlY2xpYmRpcikNCisJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTCkg bGlib2JqYy5sYSAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGly KTsNCiAJaWYgWyAiJChPQkpDX0JPRUhNX0dDKSIgXTsgdGhlbiBcDQogCSAg JChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTCkgbGlib2JqY19nYy5sYSBc DQotCQkJCSQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcik7XA0KKwkJCQkkKERF U1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKTtcDQogCWZpDQogCSQo TVVMVElETykgJChGTEFHU19UT19QQVNTKSBtdWx0aS1kbyBETz0iJEAiDQot CUAtJChMSUJUT09MKSAtLW1vZGU9ZmluaXNoICQoZ2xpYmNwcF90b29sZXhl Y2xpYmRpcikNCisJQC0kKExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChERVNU RElSKSQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikNCiANCiAjIENvcHkgT2Jq ZWN0aXZlIEMgaGVhZGVycyB0byBpbnN0YWxsYXRpb24gaW5jbHVkZSBkaXJl Y3RvcnkuDQogaW5zdGFsbC1oZWFkZXJzOg0KLQkkKFNIRUxMKSAkKHRvcGxl dmVsX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGxpYnN1YmRpcikvaW5jbHVk ZS9vYmpjDQorCSQoU0hFTEwpICQodG9wbGV2ZWxfc3JjZGlyKS9ta2luc3Rh bGxkaXJzICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZS9vYmpjDQog CWZvciBmaWxlIGluICQoT0JKQ19IKTsgZG8gXA0KIAkgIHJlYWxmaWxlPSQo c3JjZGlyKS9vYmpjLyQke2ZpbGV9OyBcDQotCSAgJChJTlNUQUxMX0RBVEEp ICQke3JlYWxmaWxlfSAkKGxpYnN1YmRpcikvaW5jbHVkZS9vYmpjOyBcDQor CSAgJChJTlNUQUxMX0RBVEEpICQke3JlYWxmaWxlfSAkKERFU1RESVIpJChs aWJzdWJkaXIpL2luY2x1ZGUvb2JqYzsgXA0KIAlkb25lDQogDQogY2hlY2sg dW5pbnN0YWxsIGluc3RhbGwtc3RyaXAgZGlzdCBpbnN0YWxsY2hlY2sgaW5z dGFsbGRpcnM6DQpJbmRleDogbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZp bGUuYW0NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNy L2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvbGlic3RkYysrLXYzL2luY2x1 ZGUvTWFrZWZpbGUuYW0sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQxLjQu Mg0KZGlmZiAtdSAtcjEuNDEuNC4yIE1ha2VmaWxlLmFtDQotLS0gbGlic3Rk YysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuYW0JMSBPY3QgMjAwMiAxNzozMzox MiAtMDAwMAkxLjQxLjQuMg0KKysrIGxpYnN0ZGMrKy12My9pbmNsdWRlL01h a2VmaWxlLmFtCTI5IERlYyAyMDAyIDE3OjQzOjM0IC0wMDAwDQpAQCAtNDY0 LDMyICs0NjQsMzIgQEANCiAjIHRoZSByZXN0IGFyZSB0YWtlbiBmcm9tIHRo ZSBvcmlnaW5hbCBzb3VyY2UgdHJlZS4NCiBneHhfaW5jbHVkZV9kaXIgPSBA Z3h4X2luY2x1ZGVfZGlyQA0KIGluc3RhbGwtZGF0YS1sb2NhbDoNCi0JJCht a2luc3RhbGxkaXJzKSAke2d4eF9pbmNsdWRlX2Rpcn0NCi0JJChta2luc3Rh bGxkaXJzKSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfQ0K KwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rp cn0NCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7Yml0c19idWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4gJHtiaXRz X2hlYWRlcnN9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9 ICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQot CSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dh cmRfYnVpbGRkaXJ9DQorCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICQo REVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsg ZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikke2d4eF9pbmNs dWRlX2Rpcn0vJHtiYWNrd2FyZF9idWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4g JHtiYWNrd2FyZF9oZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRB KSAkJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiYWNrd2FyZF9idWls ZGRpcn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJzKSAke2d4eF9pbmNsdWRl X2Rpcn0vJHtleHRfYnVpbGRkaXJ9DQorCSAgJChJTlNUQUxMX0RBVEEpICQk e2ZpbGV9ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiYWNrd2Fy ZF9idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RE SVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1aWxkZGlyfQ0KIAlmb3Ig ZmlsZSBpbiAke2V4dF9oZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSAkJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtleHRfYnVpbGRk aXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9k aXJ9LyR7Y19iYXNlX2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAk JHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1 aWxkZGlyfTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikk e2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jhc2VfYnVpbGRkaXJ9DQogCWZvciBm aWxlIGluICR7Y19iYXNlX2hlYWRlcnNfcmVuYW1lfTsgZG8gXA0KLQkgICQo SU5TVEFMTF9EQVRBKSAke2NfYmFzZV9idWlsZGRpcn0vJCR7ZmlsZX0gJHtn eHhfaW5jbHVkZV9kaXJ9OyBkb25lDQorCSAgJChJTlNUQUxMX0RBVEEpICR7 Y19iYXNlX2J1aWxkZGlyfS8kJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5j bHVkZV9kaXJ9LyR7Y19iYXNlX2J1aWxkZGlyfTsgZG9uZQ0KIAljX2Jhc2Vf aGVhZGVyc19leHRyYV9pbnN0YWxsPSckKGNfYmFzZV9oZWFkZXJzX2V4dHJh KSc7XA0KIAlmb3IgZmlsZSBpbiAkJGNfYmFzZV9oZWFkZXJzX2V4dHJhX2lu c3RhbGw7IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlICR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQorCSAgJChJ TlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9k aXJ9LyR7Yml0c19idWlsZGRpcn07IGRvbmUNCiAJY19jb21wYXRpYmlsaXR5 X2hlYWRlcnNfaW5zdGFsbD0nJChjX2NvbXBhdGliaWxpdHlfaGVhZGVyc19l eHRyYSknO1wNCiAJZm9yIGZpbGUgaW4gJCRjX2NvbXBhdGliaWxpdHlfaGVh ZGVyc19pbnN0YWxsOyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQkZmls ZSAke2d4eF9pbmNsdWRlX2Rpcn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJz KSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9DQorCSAgJChJ TlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9k aXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4 X2luY2x1ZGVfZGlyfS8ke3N0ZF9idWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4g JHtzdGRfaGVhZGVyc19yZW5hbWV9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RB VEEpICR7c3RkX2J1aWxkZGlyfS8kJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rp cn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJzKSAke2d4eF9pbmNsdWRlX2Rp cn0vJHt0YXJnZXRfYnVpbGRkaXJ9DQorCSAgJChJTlNUQUxMX0RBVEEpICR7 c3RkX2J1aWxkZGlyfS8kJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7c3RkX2J1aWxkZGlyfTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRp cnMpICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHt0YXJnZXRfYnVp bGRkaXJ9DQogCWZvciBmaWxlIGluICR7dGFyZ2V0X2hlYWRlcnN9ICR7dGFy Z2V0X2hlYWRlcnNfZXh0cmF9IFwNCiAJICR7dGhyZWFkX3RhcmdldF9oZWFk ZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAke2d4 eF9pbmNsdWRlX2Rpcn0vJHt0YXJnZXRfYnVpbGRkaXJ9OyBkb25lDQorCSAg JChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICQoREVTVERJUikke2d4eF9pbmNs dWRlX2Rpcn0vJHt0YXJnZXRfYnVpbGRkaXJ9OyBkb25lDQogDQogIyBCeSBh ZGRpbmcgdGhlc2UgZmlsZXMgaGVyZSwgYXV0b21ha2Ugd2lsbCByZW1vdmUg dGhlbSBmb3IgJ21ha2UgY2xlYW4nDQogI0NMRUFORklMRVMgPSAke2FsbHN0 YW1wc30NCg== --8323584-779724633-1041272924=:6103 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir-doc.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-doc.diff" SW5kZXg6IGdjYy9kb2MvaW5zdGFsbC50ZXhpDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMv Z2NjL2djYy9kb2MvaW5zdGFsbC50ZXhpLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMzYuMi4xMA0KZGlmZiAtdSAtcjEuMTM2LjIuMTAgaW5zdGFsbC50 ZXhpDQotLS0gZ2NjL2RvYy9pbnN0YWxsLnRleGkJMTQgRGVjIDIwMDIgMTg6 MzE6MTMgLTAwMDAJMS4xMzYuMi4xMA0KKysrIGdjYy9kb2MvaW5zdGFsbC50 ZXhpCTMwIERlYyAyMDAyIDE4OjA1OjUxIC0wMDAwDQpAQCAtMTM5MCw2ICsx MzkwLDQ1IEBADQogcGFydHMgb2YgdGhlIGNvbXBpbGVyIGluIEBmaWxle0B2 YXJ7bGliZGlyfS9nY2MtbGlifTsgZG9jdW1lbnRhdGlvbiBpbg0KIGluZm8g Zm9ybWF0IGluIEBmaWxle0B2YXJ7aW5mb2Rpcn19IChub3JtYWxseSBAZmls ZXtAdmFye3ByZWZpeH0vaW5mb30pLg0KIA0KK0luIG9yZGVyIHRvIHN1cHBv cnQgbXVsdGktYXJjaGl0ZWN0dXJhbCBzeXN0ZW1zLCBHQ0Mncw0KK2V4ZWN1 dGFibGVzIGFyZSBub3Qgb25seSBpbnN0YWxsZWQgaW50byBAZmlsZXtAdmFy e2JpbmRpcn19LA0KK3RoYXQgaXMsIEBmaWxle0B2YXJ7ZXhlYy1wcmVmaXh9 L2Jpbn0sIGJ1dCBhZGRpdGlvbmFsbHkgaW50bw0KK0BmaWxle0B2YXJ7ZXhl Yy1wcmVmaXh9L0B2YXJ7dGFyZ2V0LWFsaWFzfS9iaW59LCBpZiB0aGF0IGRp cmVjdG9yeQ0KK2V4aXN0cy4gIFR5cGljYWxseSwgc3VjaCBAZGZue3Rvb2xk aXJzfSBob2xkIHRhcmdldC1zcGVjaWZpYw0KK2JpbnV0aWxzLCBpbmNsdWRp bmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIuDQorDQorSW5zdGFsbGF0aW9uIGlu dG8gYSB0ZW1wb3Jhcnkgc3RhZ2luZyBhcmVhIG9yIGludG8gYSBjaHJvb3Qg amFpbCBjYW4gYmUNCithY2hpZXZlZCB3aXRoIHRoZSBjb21tYW5kDQorQGV4 YW1wbGUNCittYWtlIERFU1RESVI9QHZhcntwYXRoLXRvLXJvb3RkaXJ9IGlu c3RhbGwNCitAZW5kIGV4YW1wbGUNCitAbm9pbmRlbnQgd2hlcmUgQHZhcntw YXRoLXRvLXJvb3RkaXJ9IGlzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGEgZGly ZWN0b3J5DQorcmVsYXRpdmUgdG8gd2hpY2ggYWxsIGluc3RhbGxhdGlvbiBw YXRocyB3aWxsIGJlIGludGVycHJldGVkLg0KKw0KK1VzaW5nIEBjb2Rle0RF U1RESVJ9IGhhcyBzZXZlcmFsIGFkdmFudGFnZXMgb3ZlciB0ZW1wb3Jhcmls eQ0KK2NoYW5naW5nIEBjb2Rle3ByZWZpeH0gZHVyaW5nIGluc3RhbGxhdGlv bi4gIE1vc3QgaW1wb3J0YW50LCB0aGUNCitzZXR0aW5nIG9mIEBjb2Rle0RF U1RESVJ9IGlzIG5ldmVyIGNvbXBpbGVkIGludG8gYmluYXJpZXMsIG5vciBk b2VzDQoraXQgZ2V0IHN0b3JlZCBwZXJtYW5lbnRseSBpbiBhbnkgY29uZmln dXJhdGlvbiwgaXQgb25seSBhZmZlY3RzDQoraW5zdGFsbGF0aW9uIChhbmQg dW5pbnN0YWxsYXRpb24sIG9uY2UgdGhhdCBpcyBmdWxseSBzdXBwb3J0ZWQp DQorYW5kIGNhbiBiZSBjaG9zZW4gYXJiaXRyYXJpbHkgYXQgaW5zdGFsbGF0 aW9uIHRpbWUuICBNb3Jlb3ZlciwNCitzZXR0aW5nIEBjb2Rle0RFU1RESVJ9 IHJlbG9jYXRlcyBhbGwgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzDQorY29u c2lzdGVudGx5LCBldmVuIHRob3NlIHNldCB0byBmaXhlZCB2YWx1ZXMgZHVy aW5nIGNvbmZpZ3VyYXRpb24uDQorRm9yIGV4YW1wbGUsIGNvbmZpZ3VyaW5n IHdpdGggQHNhbXB7LS1pbmZvZGlyPS91c3Ivc2hhcmUvaW5mb30gbWFrZXMN CitAY29kZXtpbmZvZGlyfSBpbmRlcGVuZGVudCBvZiBAY29kZXtwcmVmaXh9 LCBidXQgaW5zdGFsbGF0aW9uIHdpdGgNCitAc2FtcHtERVNURElSPUB2YXJ7 cGF0aC10by1yb290ZGlyfX0gd291bGQgY29ycmVjdGx5IGluc3RhbGwgaW5m bw0KK2ZpbGVzIGludG8gQGZpbGV7QHZhcntwYXRoLXRvLXJvb3RkaXJ9L3Vz ci9zaGFyZS9pbmZvfS4gIE5vdGUgdGhhdA0KK3RoZSBkaXJlY3Rvcnkgc3Bl Y2lmaWVkIGJ5IEBjb2Rle0RFU1RESVJ9IG5lZWQgbm90IGV4aXN0IHlldDsN CitpdCB3aWxsIGJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5Lg0KKw0KK1RoZXJl IGlzIGEgc3VidGxlIHBvaW50IHdpdGggdG9vbGRpcnMgYW5kDQorQGNvZGV7 REVTVERJUn06IElmIHlvdSByZWxvY2F0ZSB0aGUgaW5zdGFsbGF0aW9uIHRv DQorZS5nLkA6IEBzYW1we0RFU1RESVI9QHZhcntyb290ZGlyfX0sIHRoZW4g dGhlIGRpcmVjdG9yeQ0KK0BmaWxle0B2YXJ7cm9vdGRpcn0vQHZhcntleGVj LXByZWZpeH0vQHZhcnt0YXJnZXQtYWxpYXN9L2Jpbn0gd2lsbA0KK2JlIGZp bGxlZCB3aXRoIGR1cGxpY2F0ZWQgR0NDIGV4ZWN1dGFibGVzIG9ubHkgaWYg aXQgYWxyZWFkeSBleGlzdHMsDQoraXQgd2lsbCBub3QgYmUgY3JlYXRlZCBv dGhlcndpc2UuICBUaGlzIGlzIHJlZ2FyZGVkIGFzIGEgZmVhdHVyZSwNCitu b3QgYXMgYSBidWcsIGJlY2F1c2UgaXQgZ2l2ZXMgc2xpZ2h0bHkgbW9yZSBj b250cm9sIHRvIHRoZSBwYWNrYWdlcnMNCit1c2luZyB0aGUgQGNvZGV7REVT VERJUn0gZmVhdHVyZS4NCisNCiBJZiB5b3UgYnVpbHQgYSByZWxlYXNlZCB2 ZXJzaW9uIG9mIEdDQyB1c2luZyBAc2FtcHttYWtlIGJvb3RzdHJhcH0gdGhl biBwbGVhc2UNCiBxdWlja2x5IHJldmlldyB0aGUgYnVpbGQgc3RhdHVzIHBh Z2UgZm9yIHlvdXIgcmVsZWFzZSwgYXZhaWxhYmxlIGZyb20NCiBAdXJlZnto dHRwOi8vZ2NjLmdudS5vcmcvYnVpbGRzdGF0Lmh0bWx9Lg0K --8323584-779724633-1041272924=:6103 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir-no-am.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-no-am.diff" SW5kZXg6IGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmluDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMv Y3ZzL2djYy1jdnMvZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxl LmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41NS4yLjINCmRpZmYgLXUg LXIxLjU1LjIuMiBNYWtlZmlsZS5pbg0KLS0tIGxpYnN0ZGMrKy12My9pbmNs dWRlL01ha2VmaWxlLmluCTEgT2N0IDIwMDIgMTc6MzM6MTMgLTAwMDAJMS41 NS4yLjINCisrKyBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5pbgkz MCBEZWMgMjAwMiAxNjo1NzoyNSAtMDAwMA0KQEAgLTY3MCwzMiArNjcwLDMy IEBADQogCSAgICAtZSAncyxeI2luY2x1ZGUgIlwoLipcKSIsI2luY2x1ZGUg PGJpdHMvXDE+LGcnIFwNCiAJICAgIDwgJHt0b3BsZXZlbF9zcmNkaXJ9L2dj Yy8ke2dsaWJjcHBfdGhyZWFkX2h9ID4gJEANCiBpbnN0YWxsLWRhdGEtbG9j YWw6DQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9DQot CSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19i dWlsZGRpcn0NCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhf aW5jbHVkZV9kaXJ9DQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7 Z3h4X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQogCWZvciBmaWxl IGluICR7Yml0c19oZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRB KSAkJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGly fTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGly fS8ke2JhY2t3YXJkX2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAk JHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19i dWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIp JHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRkaXJ9DQogCWZv ciBmaWxlIGluICR7YmFja3dhcmRfaGVhZGVyc307IGRvIFwNCi0JICAkKElO U1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFj a3dhcmRfYnVpbGRkaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtn eHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFM TF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9 LyR7YmFja3dhcmRfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGly cykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRp cn0NCiAJZm9yIGZpbGUgaW4gJHtleHRfaGVhZGVyc307IGRvIFwNCi0JICAk KElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7 ZXh0X2J1aWxkZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn0NCisJICAkKElOU1RB TExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fS8ke2V4dF9idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAk KERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Y19iYXNlX2J1aWxkZGly fQ0KIAlmb3IgZmlsZSBpbiAke2NfYmFzZV9oZWFkZXJzX3JlbmFtZX07IGRv IFwNCi0JICAkKElOU1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9LyQk e2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkgICQoSU5TVEFM TF9EQVRBKSAke2NfYmFzZV9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn07IGRvbmUN CiAJY19iYXNlX2hlYWRlcnNfZXh0cmFfaW5zdGFsbD0nJChjX2Jhc2VfaGVh ZGVyc19leHRyYSknO1wNCiAJZm9yIGZpbGUgaW4gJCRjX2Jhc2VfaGVhZGVy c19leHRyYV9pbnN0YWxsOyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQk ZmlsZSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9u ZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQogCWNfY29t cGF0aWJpbGl0eV9oZWFkZXJzX2luc3RhbGw9JyQoY19jb21wYXRpYmlsaXR5 X2hlYWRlcnNfZXh0cmEpJztcDQogCWZvciBmaWxlIGluICQkY19jb21wYXRp YmlsaXR5X2hlYWRlcnNfaW5zdGFsbDsgZG8gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSAkJGZpbGUgJHtneHhfaW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtp bnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7c3RkX2J1aWxkZGly fQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4 X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVT VERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9DQogCWZv ciBmaWxlIGluICR7c3RkX2hlYWRlcnNfcmVuYW1lfTsgZG8gXA0KLQkgICQo SU5TVEFMTF9EQVRBKSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJHtneHhf aW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhf aW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFM TF9EQVRBKSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElSKSR7 Z3h4X2luY2x1ZGVfZGlyfS8ke3N0ZF9idWlsZGRpcn07IGRvbmUNCisJJCht a2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7 dGFyZ2V0X2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3RhcmdldF9oZWFk ZXJzfSAke3RhcmdldF9oZWFkZXJzX2V4dHJhfSBcDQogCSAke3RocmVhZF90 YXJnZXRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7 ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsg ZG9uZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIp JHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsgZG9uZQ0K IA0KICMgQnkgYWRkaW5nIHRoZXNlIGZpbGVzIGhlcmUsIGF1dG9tYWtlIHdp bGwgcmVtb3ZlIHRoZW0gZm9yICdtYWtlIGNsZWFuJw0KICNDTEVBTkZJTEVT ID0gJHthbGxzdGFtcHN9DQo= --8323584-779724633-1041272924=:6103 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir-no-ag.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-no-ag.diff" SW5kZXg6IE1ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL01ha2Vm aWxlLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTEuNC4yOQ0KZGlm ZiAtdSAtcjEuMTExLjQuMjkgTWFrZWZpbGUuaW4NCi0tLSBNYWtlZmlsZS5p bgkxMyBEZWMgMjAwMiAyMjo1ODowNiAtMDAwMAkxLjExMS40LjI5DQorKysg TWFrZWZpbGUuaW4JMjkgRGVjIDIwMDIgMjE6NDQ6NTQgLTAwMDANCkBAIC0z ODYsNiArMzg2LDcgQEANCiAJIkNYWEZMQUdTPSQoQ1hYRkxBR1MpIiBcDQog CSJDWFhGTEFHU19GT1JfVEFSR0VUPSQoQ1hYRkxBR1NfRk9SX1RBUkdFVCki IFwNCiAJIkNYWF9GT1JfVEFSR0VUPSQoQ1hYX0ZPUl9UQVJHRVQpIiBcDQor CSJERVNURElSPSQoREVTVERJUikiIFwNCiAJIkRMTFRPT0xfRk9SX1RBUkdF VD0kKERMTFRPT0xfRk9SX1RBUkdFVCkiIFwNCiAJIklOU1RBTEw9JChJTlNU QUxMKSIgXA0KIAkiSU5TVEFMTF9EQVRBPSQoSU5TVEFMTF9EQVRBKSIgXA0K QEAgLTEwNzYsNyArMTA3Nyw3IEBADQogaW5zdGFsbC1pbmZvOiBkby1pbnN0 YWxsLWluZm8gZGlyLmluZm8NCiAJcz1gY2QgJChzcmNkaXIpOyAke1BXRH1g OyBleHBvcnQgczsgXA0KIAlpZiBbIC1mIGRpci5pbmZvIF0gOyB0aGVuIFwN Ci0JICAkKElOU1RBTExfREFUQSkgZGlyLmluZm8gJChpbmZvZGlyKS9kaXIu aW5mbyA7IFwNCisJICAkKElOU1RBTExfREFUQSkgZGlyLmluZm8gJChERVNU RElSKSQoaW5mb2RpcikvZGlyLmluZm8gOyBcDQogCWVsc2UgdHJ1ZSA7IGZp DQogDQogbG9jYWwtY2xlYW46DQpAQCAtMTIwNiw3ICsxMjA3LDcgQEANCiAN CiBkaXIuaW5mbzogZG8taW5zdGFsbC1pbmZvDQogCWlmIFsgLWYgJChzcmNk aXIpL3RleGluZm8vZ2VuLWluZm8tZGlyIF0gOyB0aGVuIFwNCi0JICAkKHNy Y2RpcikvdGV4aW5mby9nZW4taW5mby1kaXIgJChpbmZvZGlyKSAkKHNyY2Rp cikvdGV4aW5mby9kaXIuaW5mby10ZW1wbGF0ZSA+IGRpci5pbmZvLm5ldyA7 IFwNCisJICAkKHNyY2RpcikvdGV4aW5mby9nZW4taW5mby1kaXIgJChERVNU RElSKSQoaW5mb2RpcikgJChzcmNkaXIpL3RleGluZm8vZGlyLmluZm8tdGVt cGxhdGUgPiBkaXIuaW5mby5uZXcgOyBcDQogCSAgbXYgLWYgZGlyLmluZm8u bmV3IGRpci5pbmZvIDsgXA0KIAllbHNlIHRydWUgOyBcDQogCWZpDQo= --8323584-779724633-1041272924=:6103-- From gcc-patches-return-74844-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:42:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18461 invoked by alias); 1 Jan 2003 15:42:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18453 invoked from network); 1 Jan 2003 15:42:49 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 15:42:49 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18Tl09-000832-00 for ; Wed, 01 Jan 2003 15:41:49 +0000 Date: Wed, 1 Jan 2003 15:41:49 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed c++/590 Message-ID: <20030101154149.GA30931@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i * g++.dg/parse/parse5.C: New test. Index: g++.dg/parse/parse5.C =================================================================== RCS file: g++.dg/parse/parse5.C diff -N g++.dg/parse/parse5.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parse5.C 1 Jan 2003 15:40:48 -0000 @@ -0,0 +1,33 @@ +/* PR c++/590 */ +/* { dg-do compile } */ + +#include +#include +using namespace std; + +enum ExternalEnum { EXTERNAL_VALUE = 2 }; + +class BadStream : public ostringstream +{ +public: + enum InternalEnum { VALUE = 0 }; + BadStream( InternalEnum e ) {}; + BadStream( InternalEnum e, int i ) {}; +}; + +int main() +{ + ( BadStream( BadStream::VALUE ) ) << "foobar" << endl; + + BadStream((BadStream::InternalEnum)BadStream::VALUE ) << "foobar"; + + BadStream::InternalEnum in = BadStream::VALUE; + BadStream( in ) << "foobar"; + + BadStream( BadStream::VALUE, 0 ) << "foobar" << endl; + + // This didn't used to compile: + BadStream( BadStream::VALUE ) << "foobar" << endl; + + return 0; +} From gcc-patches-return-74845-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:45:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19726 invoked by alias); 1 Jan 2003 15:45:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19716 invoked from network); 1 Jan 2003 15:45:17 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 1 Jan 2003 15:45:17 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h01FiW1F000188; Wed, 1 Jan 2003 16:44:33 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h01FiW51000187; Wed, 1 Jan 2003 16:44:32 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Nathanael Nerode Cc: gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/3406 References: <20030101153501.GA7995@doctormoo> From: Gabriel Dos Reis In-Reply-To: <20030101153501.GA7995@doctormoo> Organization: Integrable Solutions Date: 01 Jan 2003 16:44:32 +0100 Message-ID: Lines: 22 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: | I will now be excessively pedantic. :-) You're welcome. | When '>' is used *as a bracket*, as in template code: | | template Y (T) | | then it is correct to refer to it as 'angle bracket'. But when you see the token ">", you cannot say that it is incorrect to call it "angle-bracet" nor can you say it is incorrect to call it "less-than". There is just one *signe* token ">". | As the foldoc entry indicates, *Either* of the characters "<" (less-than, ASCII 60) and ">" (greater-than, ASCII 62). -- Gaby From gcc-patches-return-74846-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 15:59:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27958 invoked by alias); 1 Jan 2003 15:59:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27950 invoked from network); 1 Jan 2003 15:59:48 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 15:59:48 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18TlGa-00084k-00 for ; Wed, 01 Jan 2003 15:58:48 +0000 Date: Wed, 1 Jan 2003 15:58:48 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: TC for fixed c++/754 Message-ID: <20030101155848.GA31031@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i This is another fixed by Mark's lookup patch of yesterday I think. Neil. * g++.dg/lookup/scoped4.C: New test. Index: g++.dg/lookup/scoped4.C =================================================================== RCS file: g++.dg/lookup/scoped4.C diff -N g++.dg/lookup/scoped4.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/lookup/scoped4.C 1 Jan 2003 15:57:36 -0000 @@ -0,0 +1,15 @@ +/* PR c++/754 */ +/* { dg-do compile } */ + +namespace foo +{ + namespace bar + { + enum x {foo + }; + enum {ubit0 = 0x0001}; + // Used to get a parse error before "::" token. + int i=foo::bar::ubit0; + } +} + From gcc-patches-return-74847-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 16:33:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5424 invoked by alias); 1 Jan 2003 16:33:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5417 invoked from network); 1 Jan 2003 16:33:23 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 1 Jan 2003 16:33:23 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 85382144AA; Wed, 1 Jan 2003 17:33:11 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18Tlnq-0004gc-00; Wed, 01 Jan 2003 17:33:10 +0100 Mail-Copies-To: never To: Christian Cornelssen Cc: gcc-patches@gcc.gnu.org Subject: Re: [3.4-bi] DESTDIR support completed From: Andreas Jaeger Date: Wed, 01 Jan 2003 17:33:10 +0100 In-Reply-To: (Christian Cornelssen's message of "Wed, 1 Jan 2003 15:21:03 +0100 (CET)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Christian Cornelssen writes: > Dear GCC developers, > > here is DESTDIR support for the -rgcc-3_4-basic-improvements-branch, > diffed against CVS as of 12/29. Support has been added for all That branch is obsolete now and has been merge to mainline. Your patch should now be against mainline (CVS head). Thanks, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74848-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 16:33:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5729 invoked by alias); 1 Jan 2003 16:33:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5611 invoked from network); 1 Jan 2003 16:33:26 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 1 Jan 2003 16:33:26 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01GXEk29632 for ; Wed, 1 Jan 2003 11:33:14 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TlmZ-0002A9-00 for ; Wed, 01 Jan 2003 11:31:51 -0500 Date: Wed, 1 Jan 2003 11:31:51 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/8842 Message-ID: <20030101163151.GA8314@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. g++.dg/parse/parens2.C: New test. Index: g++.dg/parse/parens2.C =================================================================== RCS file: g++.dg/parse/parens2.C diff -N g++.dg/parse/parens2.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parens2.C 1 Jan 2003 16:31:36 -0000 @@ -0,0 +1,11 @@ +/* PR c++/8842. */ +/* { dg-do compile } */ +int main( int argc, char* argv ) +{ + int i = 5; + // This always worked: + // double l1 = double(int(i)) / double(int(i)); + // But this used to give a parse error before the `/' token: + double l2 = (double(int(i)) / double(int(i))); +} + From gcc-patches-return-74849-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 16:40:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7228 invoked by alias); 1 Jan 2003 16:40:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7219 invoked from network); 1 Jan 2003 16:40:07 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 1 Jan 2003 16:40:07 -0000 Received: from localhost (IDENT:kZo+hohxjMMNWsF6OCFI2lt9yeWFUYiH@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h01GdtlU002659 for ; Wed, 1 Jan 2003 11:39:55 -0500 Date: Wed, 01 Jan 2003 11:39:53 -0500 (EST) Message-Id: <20030101.113953.130222870.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.c: Include cpplib.h. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to include cpplib.h. h8300.c and h8300-protos.h refer to the type cpp_reader, which is now typedefed in cpplib.h. Without the patch, the build of h8300 port stops at h8300.c. The patch fixes the problem by including cpplib.h. Committed as obvious. Kazu Hirata 2003-01-01 Kazu Hirata * config/h8300/h8300.c: Include cpplib.h. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.190 diff -u -r1.190 h8300.c --- h8300.c 31 Dec 2002 21:06:43 -0000 1.190 +++ h8300.c 1 Jan 2003 16:36:19 -0000 @@ -1,6 +1,6 @@ /* Subroutines for insn-output.c for Hitachi H8/300. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002 Free Software Foundation, Inc. + 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). @@ -40,6 +40,7 @@ #include "function.h" #include "toplev.h" #include "c-pragma.h" +#include "cpplib.h" #include "tm_p.h" #include "ggc.h" #include "target.h" From gcc-patches-return-74850-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:11:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23060 invoked by alias); 1 Jan 2003 17:11:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23053 invoked from network); 1 Jan 2003 17:11:03 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 1 Jan 2003 17:11:03 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18TmOJ-0004DU-00; Wed, 01 Jan 2003 17:10:51 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18TmOJ-0000iq-00; Wed, 01 Jan 2003 17:10:51 +0000 Date: Wed, 1 Jan 2003 17:10:48 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Steven Bosscher cc: Subject: Re: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. In-Reply-To: <1041423825.857.31.camel@steven> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 1 Jan 2003, Steven Bosscher wrote: > # Top level -*- makefile -*- fragment for GNU Objective-C > ! # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. In cases like this where 2002 isn't listed, you should check when adding 2003 whether 2002 (and sometimes more intermediate years) had any changes and so needs to be added; please check this for all files where you added 2003 if they didn't have 2002. (Also, if changing a program with a proper --version output including copyright date, that needs updating to 2003 (only the most recent year is given in the --version output). I don't know whether back end changes require the driver's --version copyright date to be updated.) -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74851-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:24:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25817 invoked by alias); 1 Jan 2003 17:24:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25803 invoked from network); 1 Jan 2003 17:24:25 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 1 Jan 2003 17:24:25 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 1B4D1147B8; Wed, 1 Jan 2003 18:24:14 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18TmZp-0001oK-00; Wed, 01 Jan 2003 18:22:45 +0100 To: "Joseph S. Myers" Cc: , gcc-patches@gcc.gnu.org Subject: Re: Problems with texinfo 4.1 on mainline/3.3 Reply-To: gcc-patches@gcc.gnu.org From: Andreas Jaeger Date: Wed, 01 Jan 2003 18:22:43 +0100 In-Reply-To: ("Joseph S. Myers"'s message of "Wed, 1 Jan 2003 16:57:58 +0000 (GMT)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii "Joseph S. Myers" writes: > On Wed, 1 Jan 2003, Andreas Jaeger wrote: > >> Am I forced to upgrade or is a make rule missing for this case? > > The treelang Make-lang.in should be changed to follow others (e.g. java, > f) in disabling building info if BUILD_INFO isn't set to indicate it Like the appended patch? I just tested it with make treelang.info. Ok to commit for 3.3 and mainline? > should be built. But if you ever make any change to a manual then you'll > need to upgrade texinfo anyway in order to test that change. I know - but others might hit the same problem and therefore I'm first going to fix GCC to work with my setup and then update texinfo, Andreas 2003-01-01 Andreas Jaeger * treelang/Make-lang.in ($(srcdir)/treelang/treelang.info): Only build info files with new enough makeinfo. ============================================================ Index: gcc/treelang/Make-lang.in --- gcc/treelang/Make-lang.in 23 Dec 2002 19:26:48 -0000 1.9 +++ gcc/treelang/Make-lang.in 1 Jan 2003 17:21:42 -0000 @@ -1,6 +1,6 @@ # Top level makefile fragment for TREELANG For GCC. -*- makefile -*- -# Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002 Free +# Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002, 2003 Free # Software Foundation, Inc. #This file is part of GCC. @@ -137,8 +137,11 @@ $(srcdir)/treelang/treelang.info: $(srcd $(srcdir)/doc/include/gpl.texi \ $(srcdir)/doc/include/fdl.texi \ $(srcdir)/doc/include/funding.texi - cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \ - -o treelang/treelang.info treelang/treelang.texi + if [ x$(BUILD_INFO) = xinfo ]; then \ + rm -f $(srcdir)/treelang/treelang.info-*; \ + cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \ + -o treelang/treelang.info treelang/treelang.texi \ + else true; fi treelang.dvi: $(srcdir)/treelang/treelang.texi \ $(srcdir)/doc/include/gcc-common.texi \ -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74852-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:27:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26799 invoked by alias); 1 Jan 2003 17:27:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26792 invoked from network); 1 Jan 2003 17:27:53 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 1 Jan 2003 17:27:53 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18Tmeb-0004rB-00; Wed, 01 Jan 2003 17:27:41 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18Tmeb-0000yQ-00; Wed, 01 Jan 2003 17:27:41 +0000 Date: Wed, 1 Jan 2003 17:27:41 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Steven Bosscher cc: Subject: Re: [Java Patch] Fix copyright headers for Java In-Reply-To: <1041427503.896.42.camel@steven> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 1 Jan 2003, Steven Bosscher wrote: > the copyright years with 2003. I also changed some files to say "This > file is part of GCC", that seemed like the right thing to do but I'm not > sure about it. Once the "GNU CC" references have been dealt with, it might be worth auditing the different versions of the licence notices that are used. The standard GNU notice, as stated in , would be (the line breaks and indentation being insignificant): This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. (but probably check with RMS before changing all the references to particular subprogram names, e.g. "GNU Fortran", to the overall "GCC" package name). However, there are probably several variants present; and even versions with the old address of the FSF (grep for "675" to find them) - though I've fixed references to the old address in the past, sometimes new files get added with it. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74853-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:33:41 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27913 invoked by alias); 1 Jan 2003 17:33:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27903 invoked from network); 1 Jan 2003 17:33:38 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 1 Jan 2003 17:33:38 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id 6D4E84DE18; Wed, 1 Jan 2003 18:33:27 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Wed, 1 Jan 2003 18:33:29 +0100 Date: Wed, 1 Jan 2003 18:33:29 +0100 From: Jan Hubicka To: gcc-patches@gcc.gnu.org, rth@cygnus.com Subject: updated patch: minor regrename improvement Message-ID: <20030101173329.GA13825@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, On the simple testcase: float a,b,c,d; test() { a=b; c=d; } regrename pass renames both uses from eax to edx, as tick counter is initialized to 0 and the tick for first use is not taken into account. Similary I think we should take into account the use of original register when our replacement has failed so we won't reuse it early. Last modification is that I've made code to choose old register to be best choice at the begginig. This avoid uneeded renaming and improves code, as the old register wasn't taken into account previously at all. Honza Mon Jun 25 14:24:32 CEST 2001 Jan Hubicka * regrename.c (regrename_optimize): Initialize best_reg to reg; increment tick first; set tick even if replacement failed. Index: regrename.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/regrename.c,v retrieving revision 1.59.2.4 diff -c -3 -p -r1.59.2.4 regrename.c *** regrename.c 8 Dec 2002 14:36:33 -0000 1.59.2.4 --- regrename.c 1 Jan 2003 17:18:49 -0000 *************** regrename_optimize () *** 238,244 **** CLEAR_HARD_REG_SET (regs_seen); while (all_chains) { ! int new_reg, best_new_reg = -1; int n_uses; struct du_chain *this = all_chains; struct du_chain *tmp, *last; --- 238,244 ---- CLEAR_HARD_REG_SET (regs_seen); while (all_chains) { ! int new_reg, best_new_reg; int n_uses; struct du_chain *this = all_chains; struct du_chain *tmp, *last; *************** regrename_optimize () *** 248,253 **** --- 248,255 ---- all_chains = this->next_chain; + best_new_reg = reg; + #if 0 /* This just disables optimization opportunities. */ /* Only rename once we've seen the reg more than once. */ if (! TEST_HARD_REG_BIT (regs_seen, reg)) *************** regrename_optimize () *** 328,335 **** break; if (! tmp) { ! if (best_new_reg == -1 ! || tick[best_new_reg] > tick[new_reg]) best_new_reg = new_reg; } } --- 330,336 ---- break; if (! tmp) { ! if (tick[best_new_reg] > tick[new_reg]) best_new_reg = new_reg; } } *************** regrename_optimize () *** 342,356 **** fprintf (rtl_dump_file, " crosses a call"); } ! if (best_new_reg == -1) { if (rtl_dump_file) ! fprintf (rtl_dump_file, "; no available registers\n"); continue; } do_replace (this, best_new_reg); ! tick[best_new_reg] = this_tick++; if (rtl_dump_file) fprintf (rtl_dump_file, ", renamed as %s\n", reg_names[best_new_reg]); --- 343,358 ---- fprintf (rtl_dump_file, " crosses a call"); } ! if (best_new_reg == reg) { + tick[reg] = ++this_tick; if (rtl_dump_file) ! fprintf (rtl_dump_file, "; no available better choice\n"); continue; } do_replace (this, best_new_reg); ! tick[best_new_reg] = ++this_tick; if (rtl_dump_file) fprintf (rtl_dump_file, ", renamed as %s\n", reg_names[best_new_reg]); From gcc-patches-return-74854-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:43:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30600 invoked by alias); 1 Jan 2003 17:43:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30592 invoked from network); 1 Jan 2003 17:43:06 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 17:43:06 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18TmsV-0008KC-00; Wed, 01 Jan 2003 17:42:03 +0000 Date: Wed, 1 Jan 2003 17:42:03 +0000 From: Neil Booth To: Kazu Hirata Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. Message-ID: <20030101174203.GA31989@daikokuya.co.uk> References: <20030101.113953.130222870.kazu@cs.umass.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030101.113953.130222870.kazu@cs.umass.edu> User-Agent: Mutt/1.4i Kazu Hirata wrote:- > Hi, > > Attached is a patch to include cpplib.h. > > h8300.c and h8300-protos.h refer to the type cpp_reader, which is now > typedefed in cpplib.h. Without the patch, the build of h8300 port > stops at h8300.c. The patch fixes the problem by including cpplib.h. > > Committed as obvious. Sorry about that. IMO a better fix is to use "struct cpp_reader *" as intended, and not include cpplib.h as you don't use it. Neil. From gcc-patches-return-74855-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:47:57 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 489 invoked by alias); 1 Jan 2003 17:47:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 459 invoked from network); 1 Jan 2003 17:47:55 -0000 Received: from unknown (HELO book.moene.indiv.nluug.nl) (195.109.255.217) by 209.249.29.67 with SMTP; 1 Jan 2003 17:47:55 -0000 Received: from local ([127.0.0.1] helo=moene.indiv.nluug.nl) by book.moene.indiv.nluug.nl with esmtp (Exim 3.36 #1 (Debian)) id 18Tmui-0005kS-00; Wed, 01 Jan 2003 18:44:20 +0100 Message-ID: <3E1328F3.30305@moene.indiv.nluug.nl> Date: Wed, 01 Jan 2003 18:44:19 +0100 From: Toon Moene Organization: Moene Computational Physics, Maartensdijk, The Netherlands User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020622 Debian/1.0.0-0.woody.1 MIME-Version: 1.0 To: Andreas Jaeger CC: gcc-patches@gcc.gnu.org Subject: Re: Fix f77.rebuilt References: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Andreas Jaeger wrote: > On the 3.3 branch I got: > > arthur:/builds/gcc/gcc/gcc:[0]$ make f77.rebuilt > cd /cvs/gcc-3_3-branch/gcc/f; makeinfo -D BUGSONLY --no-header --no-split \ > --no-validate -o BUGS bugs0.texi > ./root.texi:1: @include `gcc-common.texi': No such file or directory. > makeinfo: Removing output file `BUGS' due to errors; use --force to preserve. > make: *** [/cvs/gcc-3_3-branch/gcc/f/BUGS] Error 2 > > The appended patch fixes this, I've applied it as obvious to both 3.3 > and mainline after testing on i686-linux-gnu, Thanks ! -- Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290 Saturnushof 14, 3738 XG Maartensdijk, The Netherlands Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction) From gcc-patches-return-74856-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 18:03:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8337 invoked by alias); 1 Jan 2003 18:03:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8330 invoked from network); 1 Jan 2003 18:03:12 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 1 Jan 2003 18:03:12 -0000 Received: from localhost (IDENT:LXmYFjuKgVvaIIInP+2toptfss5BMjZB@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h01I2vlU009239; Wed, 1 Jan 2003 13:02:57 -0500 Date: Wed, 01 Jan 2003 13:02:53 -0500 (EST) Message-Id: <20030101.130253.55492726.kazu@cs.umass.edu> To: neil@daikokuya.co.uk Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. From: Kazu Hirata In-Reply-To: <20030101174203.GA31989@daikokuya.co.uk> References: <20030101.113953.130222870.kazu@cs.umass.edu> <20030101174203.GA31989@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.4, Required: 5 X-Spam-Tests: IN_REP_TO X-Spam-Report: SPAM: -3.4 hits, 5 required; SPAM: * -3.4 -- Found a In-Reply-To header X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi Neil, > > Attached is a patch to include cpplib.h. > > > > h8300.c and h8300-protos.h refer to the type cpp_reader, which is now > > typedefed in cpplib.h. Without the patch, the build of h8300 port > > stops at h8300.c. The patch fixes the problem by including cpplib.h. > > > > Committed as obvious. > > Sorry about that. IMO a better fix is to use "struct cpp_reader *" > as intended, and not include cpplib.h as you don't use it. That's OK. I will convert to the better one. By the way, I am suspecting that sh port has the same problem because sh.c does not include sh.c but does refer to cpp_reader. I haven't tried to build it, though. Kazu Hirata From gcc-patches-return-74857-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 18:56:20 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26864 invoked by alias); 1 Jan 2003 18:56:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26854 invoked from network); 1 Jan 2003 18:56:15 -0000 Received: from unknown (HELO thales.mathematik.uni-ulm.de) (134.60.66.5) by 209.249.29.67 with SMTP; 1 Jan 2003 18:56:15 -0000 Received: (qmail 12240 invoked by uid 642); 1 Jan 2003 18:56:02 -0000 Message-ID: <20030101185602.12239.qmail@thales.mathematik.uni-ulm.de> From: "Christian Ehrhardt" Date: Wed, 1 Jan 2003 19:56:02 +0100 To: Paolo Carlini Cc: Nathanael Nerode , gcc-patches@gcc.gnu.org Subject: Re: Testcase for fixed PR c++/8237: Review wanted! References: <20030101141126.GA1352@doctormoo> <3E12F942.7000100@unitus.it> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E12F942.7000100@unitus.it> User-Agent: Mutt/1.3.25i On Wed, Jan 01, 2003 at 03:20:50PM +0100, Paolo Carlini wrote: > Nathanael Nerode wrote: > > >I intend to apply this. > > > >But I wanted to check with the list first. I think that this test case > >can probably be simplified to one which doesn't mess around with printf and > >stdio.h. I would like help doing that, if it's considered a good idea. > > > What about (this is the common practice for such cases in the testsuite): > > extern "C" int printf (const char *, ...); > > class A { > public: > A() { printf("Acon\n"); } > }; > > class B { > public: > B(A a) { printf("BAcon\n"); } > void form() { printf("Bform\n"); } > }; > > int main() { > // This used to give a parse error. > B(A()).form(); > } Just deleting the printfs and the #include works for me: // Origin: PR 8237 // { dg-do compile } class A { public: A() { } }; class B { public: B(A a) { } void form() { } }; int main() { B(A()).form(); } regards Christian -- THAT'S ALL FOLKS! From gcc-patches-return-74858-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:00:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14422 invoked by alias); 1 Jan 2003 20:00:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14410 invoked from network); 1 Jan 2003 20:00:18 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 1 Jan 2003 20:00:18 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01K05k06195 for ; Wed, 1 Jan 2003 15:00:05 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Tp0m-0007HK-00 for ; Wed, 01 Jan 2003 14:58:44 -0500 Date: Wed, 1 Jan 2003 14:58:44 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/2049 Message-ID: <20030101195844.GA27979@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. + g++.dg/parse/namespace2.C: New test. Index: g++.dg/parse/namespace2.C =================================================================== RCS file: g++.dg/parse/namespace2.C diff -N g++.dg/parse/namespace2.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/namespace2.C 1 Jan 2003 19:59:10 -0000 @@ -0,0 +1,15 @@ +/* PR c++/2537 */ +/* { dg-do compile } */ + +// Used to have namespace name/identifier conflict, prior to 3.4. + +namespace baz {} + +namespace foo + { + struct bar + { + unsigned baz:1; + }; + } + From gcc-patches-return-74859-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:05:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15589 invoked by alias); 1 Jan 2003 20:05:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15580 invoked from network); 1 Jan 2003 20:05:54 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 20:05:54 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18TolW-00009u-00; Wed, 01 Jan 2003 19:42:58 +0000 Date: Wed, 1 Jan 2003 19:42:58 +0000 From: Neil Booth To: Kazu Hirata Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. Message-ID: <20030101194258.GA605@daikokuya.co.uk> References: <20030101.113953.130222870.kazu@cs.umass.edu> <20030101174203.GA31989@daikokuya.co.uk> <20030101.130253.55492726.kazu@cs.umass.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030101.130253.55492726.kazu@cs.umass.edu> User-Agent: Mutt/1.4i Kazu Hirata wrote:- > Hi Neil, > > > > Attached is a patch to include cpplib.h. > > > > > > h8300.c and h8300-protos.h refer to the type cpp_reader, which is now > > > typedefed in cpplib.h. Without the patch, the build of h8300 port > > > stops at h8300.c. The patch fixes the problem by including cpplib.h. > > > > > > Committed as obvious. > > > > Sorry about that. IMO a better fix is to use "struct cpp_reader *" > > as intended, and not include cpplib.h as you don't use it. > > That's OK. I will convert to the better one. I've done it. Neil. From gcc-patches-return-74860-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:06:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15975 invoked by alias); 1 Jan 2003 20:06:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15967 invoked from network); 1 Jan 2003 20:06:06 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 20:06:06 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18Toie-00009F-00 for ; Wed, 01 Jan 2003 19:40:00 +0000 Date: Wed, 1 Jan 2003 19:40:00 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: Followup to pragma patch Message-ID: <20030101194000.GA560@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i Fixes 3 failed targets. Neil. * config/arm/arm.c (arm_pr_long_calls, arm_pr_no_long_calls, arm_pr_long_calls_off): Use struct. * config/h8300/h8300.c (h8300_pr-interrupt, h8300_pr_saveall) : Similarly. Don't include cpplib.h. * config/sh/sh.c (sh_pr_interrupt, sh_pr_trapa, sh_pr_nosave_low_regs): Similarly. Index: config/arm/arm.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.c,v retrieving revision 1.244 diff -u -p -r1.244 arm.c --- config/arm/arm.c 16 Dec 2002 18:20:55 -0000 1.244 +++ config/arm/arm.c 1 Jan 2003 19:35:35 -0000 @@ -2004,21 +2004,21 @@ static arm_pragma_enum arm_pragma_long_c void arm_pr_long_calls (pfile) - cpp_reader * pfile ATTRIBUTE_UNUSED; + struct cpp_reader * pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = LONG; } void arm_pr_no_long_calls (pfile) - cpp_reader * pfile ATTRIBUTE_UNUSED; + struct cpp_reader * pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = SHORT; } void arm_pr_long_calls_off (pfile) - cpp_reader * pfile ATTRIBUTE_UNUSED; + struct cpp_reader * pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = OFF; } Index: config/h8300/h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.191 diff -u -p -r1.191 h8300.c --- config/h8300/h8300.c 1 Jan 2003 16:39:35 -0000 1.191 +++ config/h8300/h8300.c 1 Jan 2003 19:35:36 -0000 @@ -40,7 +40,6 @@ Boston, MA 02111-1307, USA. */ #include "function.h" #include "toplev.h" #include "c-pragma.h" -#include "cpplib.h" #include "tm_p.h" #include "ggc.h" #include "target.h" @@ -1077,14 +1076,14 @@ bit_memory_operand (op, mode) void h8300_pr_interrupt (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; + struct cpp_reader *pfile ATTRIBUTE_UNUSED; { interrupt_handler = 1; } void h8300_pr_saveall (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; + struct cpp_reader *pfile ATTRIBUTE_UNUSED; { pragma_saveall = 1; } Index: config/sh/sh.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/sh/sh.c,v retrieving revision 1.189 diff -u -p -r1.189 sh.c --- config/sh/sh.c 16 Dec 2002 18:21:54 -0000 1.189 +++ config/sh/sh.c 1 Jan 2003 19:35:38 -0000 @@ -5721,21 +5721,21 @@ initial_elimination_offset (from, to) void sh_pr_interrupt (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; + struct cpp_reader *pfile ATTRIBUTE_UNUSED; { pragma_interrupt = 1; } void sh_pr_trapa (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; + struct cpp_reader *pfile ATTRIBUTE_UNUSED; { pragma_interrupt = pragma_trapa = 1; } void sh_pr_nosave_low_regs (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; + struct cpp_reader *pfile ATTRIBUTE_UNUSED; { pragma_nosave_low_regs = 1; } From gcc-patches-return-74861-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:10:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16689 invoked by alias); 1 Jan 2003 20:10:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16681 invoked from network); 1 Jan 2003 20:10:35 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 1 Jan 2003 20:10:35 -0000 Received: from localhost (IDENT:vf4veVRzF+C2/eoySTJKobazGmoq2/Sk@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h01KALlU024786; Wed, 1 Jan 2003 15:10:21 -0500 Date: Wed, 01 Jan 2003 15:10:19 -0500 (EST) Message-Id: <20030101.151019.48819726.kazu@cs.umass.edu> To: neil@daikokuya.co.uk Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. From: Kazu Hirata In-Reply-To: <20030101194258.GA605@daikokuya.co.uk> References: <20030101174203.GA31989@daikokuya.co.uk> <20030101.130253.55492726.kazu@cs.umass.edu> <20030101194258.GA605@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -7.3, Required: 5 X-Spam-Tests: IN_REP_TO,DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -7.3 hits, 5 required; SPAM: * -3.4 -- Found a In-Reply-To header SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi Neil, > > > Sorry about that. IMO a better fix is to use "struct cpp_reader *" > > > as intended, and not include cpplib.h as you don't use it. > > > > That's OK. I will convert to the better one. > > I've done it. Thanks, but then we may need the attached patch. At least, I do for h8300 port. OK to apply? Kazu Hirata 2003-01-01 Kazu Hirata * config/arm/arm-protos.h: Use struct cpp_reader instead of cpp_reader. * config/h8300/h8300-protos.h: Likewise. * config/sh/sh-protos.h: Likewise. Index: arm/arm-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/arm-protos.h,v retrieving revision 1.38 diff -u -r1.38 arm-protos.h --- arm/arm-protos.h 16 Dec 2002 18:20:54 -0000 1.38 +++ arm/arm-protos.h 1 Jan 2003 20:05:56 -0000 @@ -1,5 +1,5 @@ /* Prototypes for exported functions defined in arm.c and pe.c - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rearnsha@arm.com) Minor hacks by Nick Clifton (nickc@cygnus.com) @@ -211,9 +211,9 @@ #endif #ifdef GCC_C_PRAGMA_H /* included from code that cares about pragmas */ -extern void arm_pr_long_calls PARAMS ((cpp_reader *)); -extern void arm_pr_no_long_calls PARAMS ((cpp_reader *)); -extern void arm_pr_long_calls_off PARAMS ((cpp_reader *)); +extern void arm_pr_long_calls PARAMS ((struct cpp_reader *)); +extern void arm_pr_no_long_calls PARAMS ((struct cpp_reader *)); +extern void arm_pr_long_calls_off PARAMS ((struct cpp_reader *)); #endif #endif /* ! GCC_ARM_PROTOS_H */ Index: h8300/h8300-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300-protos.h,v retrieving revision 1.41 diff -u -r1.41 h8300-protos.h --- h8300/h8300-protos.h 31 Dec 2002 21:06:43 -0000 1.41 +++ h8300/h8300-protos.h 1 Jan 2003 20:05:56 -0000 @@ -92,8 +92,8 @@ extern int h8300_initial_elimination_offset PARAMS ((int, int)); #ifdef GCC_C_PRAGMA_H -extern void h8300_pr_interrupt PARAMS ((cpp_reader *)); -extern void h8300_pr_saveall PARAMS ((cpp_reader *)); +extern void h8300_pr_interrupt PARAMS ((struct cpp_reader *)); +extern void h8300_pr_saveall PARAMS ((struct cpp_reader *)); #endif #endif /* ! GCC_H8300_PROTOS_H */ Index: sh/sh-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/sh/sh-protos.h,v retrieving revision 1.35 diff -u -r1.35 sh-protos.h --- sh/sh-protos.h 16 Dec 2002 18:21:54 -0000 1.35 +++ sh/sh-protos.h 1 Jan 2003 20:05:56 -0000 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler for Hitachi / SuperH SH. - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). @@ -138,9 +138,9 @@ #endif #ifdef GCC_C_PRAGMA_H -extern void sh_pr_interrupt PARAMS ((cpp_reader *)); -extern void sh_pr_trapa PARAMS ((cpp_reader *)); -extern void sh_pr_nosave_low_regs PARAMS ((cpp_reader *)); +extern void sh_pr_interrupt PARAMS ((struct cpp_reader *)); +extern void sh_pr_trapa PARAMS ((struct cpp_reader *)); +extern void sh_pr_nosave_low_regs PARAMS ((struct cpp_reader *)); #endif #endif /* ! GCC_SH_PROTOS_H */ From gcc-patches-return-74862-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:12:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17227 invoked by alias); 1 Jan 2003 20:12:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17219 invoked from network); 1 Jan 2003 20:12:26 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 20:12:26 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18TpD1-0000HP-00; Wed, 01 Jan 2003 20:11:23 +0000 Date: Wed, 1 Jan 2003 20:11:23 +0000 From: Neil Booth To: Kazu Hirata Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. Message-ID: <20030101201123.GA1070@daikokuya.co.uk> References: <20030101174203.GA31989@daikokuya.co.uk> <20030101.130253.55492726.kazu@cs.umass.edu> <20030101194258.GA605@daikokuya.co.uk> <20030101.151019.48819726.kazu@cs.umass.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030101.151019.48819726.kazu@cs.umass.edu> User-Agent: Mutt/1.4i Kazu Hirata wrote:- > Hi Neil, > > > > > Sorry about that. IMO a better fix is to use "struct cpp_reader *" > > > > as intended, and not include cpplib.h as you don't use it. > > > > > > That's OK. I will convert to the better one. > > > > I've done it. > > Thanks, but then we may need the attached patch. At least, I do for > h8300 port. OK to apply? Of course. Neil. From gcc-patches-return-74863-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:15:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17826 invoked by alias); 1 Jan 2003 20:15:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17812 invoked from network); 1 Jan 2003 20:15:07 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 20:15:07 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18TpFe-0000Hu-00; Wed, 01 Jan 2003 20:14:06 +0000 Date: Wed, 1 Jan 2003 20:14:06 +0000 From: Neil Booth To: Kazu Hirata Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. Message-ID: <20030101201406.GA1098@daikokuya.co.uk> References: <20030101174203.GA31989@daikokuya.co.uk> <20030101.130253.55492726.kazu@cs.umass.edu> <20030101194258.GA605@daikokuya.co.uk> <20030101.151019.48819726.kazu@cs.umass.edu> <20030101201123.GA1070@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030101201123.GA1070@daikokuya.co.uk> User-Agent: Mutt/1.4i Neil Booth wrote:- > Kazu Hirata wrote:- > > > Hi Neil, > > > > > > > Sorry about that. IMO a better fix is to use "struct cpp_reader *" > > > > > as intended, and not include cpplib.h as you don't use it. > > > > > > > > That's OK. I will convert to the better one. > > > > > > I've done it. > > > > Thanks, but then we may need the attached patch. At least, I do for > > h8300 port. OK to apply? > > Of course. In fact, the #ifdef should now be unnecessary; please scrap it too. Thanks, Neil. From gcc-patches-return-74864-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:22:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20751 invoked by alias); 1 Jan 2003 20:22:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20662 invoked from network); 1 Jan 2003 20:22:29 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.72.204) by 209.249.29.67 with SMTP; 1 Jan 2003 20:22:29 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id 518BD5DA5; Wed, 1 Jan 2003 21:22:58 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id D2F92F867 for ; Wed, 1 Jan 2003 21:22:57 +0100 (CET) Date: Wed, 1 Jan 2003 21:22:55 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Re: [3.4-bi] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-62734452-1041452575=:11826" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-62734452-1041452575=:11826 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello, On Wed, 1 Jan 2003, Andreas Jaeger wrote: > Christian Cornelssen writes: > > > Dear GCC developers, > > > > here is DESTDIR support for the -rgcc-3_4-basic-improvements-branch, > > diffed against CVS as of 12/29. Support has been added for all > > That branch is obsolete now and has been merge to mainline. Your > patch should now be against mainline (CVS head). Here are the diffs against current mainline HEAD. Fortunately, aside from line numbers, only one context line has changed, and my scanner scripts have not found any new item that seemed to need fixing. The description in `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00026.html' still applies. I am currently bootstrapping in order to do tests with DESTDIRed installations, but this will take much time on my slow i586-pc-linux-gnu machine, so if you are impatient or curious, or simply want to make sure that my patches do not again get out of date while testing, please apply them, try them out, and give feedback. Sorry for this mode of operation, but patches of this size and sort are much more susceptible to cvs updates than smaller ones. Regards, Christian Cornelssen --8323584-62734452-1041452575=:11826 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir2.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir2.diff" SW5kZXg6IE1ha2VmaWxlLnRwbA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9NYWtl ZmlsZS50cGwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjI3DQpkaWZmIC11 IC1yMS4yNyBNYWtlZmlsZS50cGwNCi0tLSBNYWtlZmlsZS50cGwJMjkgRGVj IDIwMDIgMTk6MDQ6NDAgLTAwMDAJMS4yNw0KKysrIE1ha2VmaWxlLnRwbAkx IEphbiAyMDAzIDE3OjI2OjM0IC0wMDAwDQpAQCAtMzg4LDYgKzM4OCw3IEBA DQogCSJDWFhGTEFHUz0kKENYWEZMQUdTKSIgXA0KIAkiQ1hYRkxBR1NfRk9S X1RBUkdFVD0kKENYWEZMQUdTX0ZPUl9UQVJHRVQpIiBcDQogCSJDWFhfRk9S X1RBUkdFVD0kKENYWF9GT1JfVEFSR0VUKSIgXA0KKwkiREVTVERJUj0kKERF U1RESVIpIiBcDQogCSJETExUT09MX0ZPUl9UQVJHRVQ9JChETExUT09MX0ZP Ul9UQVJHRVQpIiBcDQogCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwNCiAJIklO U1RBTExfREFUQT0kKElOU1RBTExfREFUQSkiIFwNCkBAIC02MzMsNyArNjM0 LDcgQEANCiBpbnN0YWxsLWluZm86IGRvLWluc3RhbGwtaW5mbyBkaXIuaW5m bw0KIAlzPWBjZCAkKHNyY2Rpcik7ICR7UFdEfWA7IGV4cG9ydCBzOyBcDQog CWlmIFsgLWYgZGlyLmluZm8gXSA7IHRoZW4gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSBkaXIuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvIDsgXA0KKwkgICQo SU5TVEFMTF9EQVRBKSBkaXIuaW5mbyAkKERFU1RESVIpJChpbmZvZGlyKS9k aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgZmkNCiANCiBsb2NhbC1jbGVh bjoNCkBAIC03NjQsNyArNzY1LDcgQEANCiANCiBkaXIuaW5mbzogZG8taW5z dGFsbC1pbmZvDQogCWlmIFsgLWYgJChzcmNkaXIpL3RleGluZm8vZ2VuLWlu Zm8tZGlyIF0gOyB0aGVuIFwNCi0JICAkKHNyY2RpcikvdGV4aW5mby9nZW4t aW5mby1kaXIgJChpbmZvZGlyKSAkKHNyY2RpcikvdGV4aW5mby9kaXIuaW5m by10ZW1wbGF0ZSA+IGRpci5pbmZvLm5ldyA7IFwNCisJICAkKHNyY2Rpcikv dGV4aW5mby9nZW4taW5mby1kaXIgJChERVNURElSKSQoaW5mb2RpcikgJChz cmNkaXIpL3RleGluZm8vZGlyLmluZm8tdGVtcGxhdGUgPiBkaXIuaW5mby5u ZXcgOyBcDQogCSAgbXYgLWYgZGlyLmluZm8ubmV3IGRpci5pbmZvIDsgXA0K IAllbHNlIHRydWUgOyBcDQogCWZpDQpJbmRleDogZ2NjL01ha2VmaWxlLmlu DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9NYWtlZmlsZS5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuOTYxDQpkaWZmIC11IC1yMS45NjEgTWFrZWZp bGUuaW4NCi0tLSBnY2MvTWFrZWZpbGUuaW4JMTkgRGVjIDIwMDIgMTU6NTM6 NDYgLTAwMDAJMS45NjENCisrKyBnY2MvTWFrZWZpbGUuaW4JMSBKYW4gMjAw MyAxNzoyNjo1NiAtMDAwMA0KQEAgLTY4OCw2ICs2ODgsNyBAQA0KIAkiQklT T049JChCSVNPTikiIFwNCiAJIkJJU09ORkxBR1M9JChCSVNPTkZMQUdTKSIg XA0KIAkiQ0ZMQUdTPSQoQ0ZMQUdTKSAkKFdBUk5fQ0ZMQUdTKSIgXA0KKwki REVTVERJUj0kKERFU1RESVIpIiBcDQogCSJHQ0NfRk9SX1RBUkdFVD0kKEdD Q19GT1JfVEFSR0VUKSIgXA0KIAkiTERGTEFHUz0kKExERkxBR1MpIiBcDQog CSJGTEVYPSQoRkxFWCkiIFwNCkBAIC0yMzg2LDcgKzIzODcsNyBAQA0KIA0K IC5QSE9OWTogaW5zdGFsbC1nY2MtdG9vbGRpcg0KIGluc3RhbGwtZ2NjLXRv b2xkaXI6DQotCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxkaXJzICQo Z2NjX3Rvb2xkaXIpDQorCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxk aXJzICQoREVTVERJUikkKGdjY190b29sZGlyKQ0KIA0KICMgQnVpbGQgZml4 ZWQgY29waWVzIG9mIHN5c3RlbSBmaWxlcy4NCiBzdG1wLWZpeGluYzogZml4 aW5jLnNoIGdzeXNsaW1pdHMuaA0KQEAgLTI3NzYsMTczICsyNzc3LDE2MyBA QA0KICMgSGFuZGxlIGNwcCBpbnN0YWxsYXRpb24uDQogaW5zdGFsbC1jcHA6 IGNwcCQoZXhlZXh0KQ0KIAktaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkg XSA7IHRoZW4gXA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKENQUF9DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3 NTUgY3BwJChleGVleHQpICQoYmluZGlyKS8kKENQUF9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChD UFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJP R1JBTSkgLW0gNzU1IGNwcCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIp LyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQogCSAgaWYgWyB4JChj cHBfaW5zdGFsbF9kaXIpICE9IHggXTsgdGhlbiBcDQotCSAgICBybSAtZiAk KHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0NST1NTX05BTUUp JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1 IGNwcCQoZXhlZXh0KSAkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQo Q1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChERVNURElSKSQocHJlZml4KS8kKGNw cF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN CiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWVsc2UgXA0KLQkgIHJtIC1mICQo YmluZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAg JChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChiaW5k aXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNwcCQo ZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCk7IFwNCiAJICBpZiBbIHgkKGNwcF9pbnN0YWxsX2Rpcikg IT0geCBdOyB0aGVuIFwNCi0JICAgIHJtIC1mICQocHJlZml4KS8kKGNwcF9p bnN0YWxsX2RpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K LQkgICAgJChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkg JChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChwcmVm aXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNw cCQoZXhlZXh0KSAkKERFU1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxf ZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZWxz ZSB0cnVlOyBmaTsgXA0KIAlmaQ0KIA0KICMgQ3JlYXRlIHRoZSBpbnN0YWxs YXRpb24gZGlyZWN0b3JpZXMuDQorIyAkKGxpYmRpcikvZ2NjLWxpYi9pbmNs dWRlIGlzbid0IGN1cnJlbnRseSBzZWFyY2hlZCBieSBjcHAuDQogaW5zdGFs bGRpcnM6DQotCS1pZiBbIC1kICQocHJlZml4KSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKHByZWZpeCkgOyBjaG1vZCBhK3J4ICQocHJlZml4KSA7 IGZpDQotCS1pZiBbIC1kICQoZXhlY19wcmVmaXgpIF0gOyB0aGVuIHRydWUg OyBlbHNlIG1rZGlyICQoZXhlY19wcmVmaXgpIDsgY2htb2QgYStyeCAkKGV4 ZWNfcHJlZml4KSA7IGZpDQotCS1pZiBbIC1kICQobGliZGlyKSBdIDsgdGhl biB0cnVlIDsgZWxzZSBta2RpciAkKGxpYmRpcikgOyBjaG1vZCBhK3J4ICQo bGliZGlyKSA7IGZpDQotCS1pZiBbIC1kICQobGliZGlyKS9nY2MtbGliIF0g OyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQobGliZGlyKS9nY2MtbGliIDsg Y2htb2QgYStyeCAkKGxpYmRpcikvZ2NjLWxpYiA7IGZpDQotIyBUaGlzIGRp ciBpc24ndCBjdXJyZW50bHkgc2VhcmNoZWQgYnkgY3BwLg0KLSMJLWlmIFsg LWQgJChsaWJkaXIpL2djYy1saWIvaW5jbHVkZSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKGxpYmRpcikvZ2NjLWxpYi9pbmNsdWRlIDsgY2htb2Qg YStyeCAkKGxpYmRpcikvZ2NjLWxpYi9pbmNsdWRlIDsgZmkNCi0JLWZkaXI9 IDsgZm9yIGRpciBpbiBgZWNobyAkKGxpYnN1YmRpcikgfCB0ciAnLycgJyAn YDsgZG8gXA0KLQkgIGZkaXI9JCR7ZmRpcn0vJCR7ZGlyfTsgXA0KLQkgIGlm IFsgLWQgJCR7ZmRpcn0gXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJCR7 ZmRpcn07IGNobW9kIGErcnggJCR7ZmRpcn07IGZpIDsgXA0KKwktZm9yIGQg aW4gJChsaWJzdWJkaXIpICQoYmluZGlyKSAkKGluY2x1ZGVkaXIpICQoaW5m b2RpcikgJChzbGliZGlyKSAkKG1hbjFkaXIpICQobWFuN2Rpcik7IGRvIFwN CisJICBmZGlyPTsgZm9yIGRpciBpbiBgZWNobyAiJChERVNURElSKSQkZCIg fCB0ciAnLycgJyAnYDsgZG8gXA0KKwkgICAgZmRpcj0kJHtmZGlyfS8kJHtk aXJ9OyBcDQorCSAgICBpZiBbIC1kICIkJHtmZGlyfSIgXSA7IHRoZW4gdHJ1 ZSA7IFwNCisJICAgIGVsc2UgbWtkaXIgIiQke2ZkaXJ9IiB8fCBicmVhazsg Y2htb2QgYStyeCAiJCR7ZmRpcn0iOyBmaSA7IFwNCisJICBkb25lOyBcDQog CWRvbmUNCi0JLWlmIFsgLWQgJChiaW5kaXIpIF0gOyB0aGVuIHRydWUgOyBl bHNlIG1rZGlyICQoYmluZGlyKSA7IGNobW9kIGErcnggJChiaW5kaXIpIDsg ZmkNCi0JLWlmIFsgLWQgJChpbmNsdWRlZGlyKSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKGluY2x1ZGVkaXIpIDsgY2htb2QgYStyeCAkKGluY2x1 ZGVkaXIpIDsgZmkNCi0JLWlmIFsgLWQgJChpbmZvZGlyKSBdIDsgdGhlbiB0 cnVlIDsgZWxzZSBta2RpciAkKGluZm9kaXIpIDsgY2htb2QgYStyeCAkKGlu Zm9kaXIpIDsgZmkNCi0JLWlmIFsgLWQgJChzbGliZGlyKSBdIDsgdGhlbiB0 cnVlIDsgZWxzZSBta2RpciAkKHNsaWJkaXIpIDsgY2htb2QgYStyeCAkKHNs aWJkaXIpIDsgZmkNCi0jIFdlIGRvbid0IHVzZSBta2RpciAtcCB0byBjcmVh dGUgdGhlIHBhcmVudHMgb2YgbWFuMWRpciwNCi0jIGJlY2F1c2Ugc29tZSBz eXN0ZW1zIGRvbid0IHN1cHBvcnQgaXQuDQotIyBJbnN0ZWFkLCB3ZSB1c2Ug dGhpcyB0ZWNobmlxdWUgdG8gY3JlYXRlIHRoZSBpbW1lZGlhdGUgcGFyZW50 IG9mIG1hbjFkaXIuDQotCS1wYXJlbnQ9YGVjaG8gJChtYW4xZGlyKXxzZWQg LWUgJ3NAL1teL10qJCRAQCdgOyBcDQotCWlmIFsgLWQgJCRwYXJlbnQgXSA7 IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJCRwYXJlbnQgOyBjaG1vZCBhK3J4 ICQkcGFyZW50IDsgZmkNCi0JLWlmIFsgLWQgJChtYW4xZGlyKSBdIDsgdGhl biB0cnVlIDsgZWxzZSBta2RpciAkKG1hbjFkaXIpIDsgY2htb2QgYStyeCAk KG1hbjFkaXIpIDsgZmkNCi0JLWlmIFsgLWQgJChtYW43ZGlyKSBdIDsgdGhl biB0cnVlIDsgZWxzZSBta2RpciAkKG1hbjdkaXIpIDsgY2htb2QgYStyeCAk KG1hbjdkaXIpIDsgZmkNCiANCiAjIEluc3RhbGwgdGhlIGNvbXBpbGVyIGV4 ZWN1dGFibGVzIGJ1aWx0IGR1cmluZyBjcm9zcyBjb21waWxhdGlvbi4NCiBp bnN0YWxsLWNvbW1vbjogbmF0aXZlICQoRVhUUkFfUEFSVFMpIGxhbmcuaW5z dGFsbC1jb21tb24NCiAJZm9yIGZpbGUgaW4gJChDT01QSUxFUlMpOyBkbyBc DQogCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYg JChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pICQkZmlsZSAkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICBybSAt ZiAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKERFU1RESVIpJChsaWJzdWJkaXIp LyQkZmlsZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgXA0KIAkgIGZpOyBcDQogCWRv bmUNCiAJZm9yIGZpbGUgaW4gJChFWFRSQV9QQVNTRVMpICQoRVhUUkFfUFJP R1JBTVMpICQoVVNFX0NPTExFQ1QyKSAuLjsgZG8gXA0KIAkgIGlmIFsgeCIk JGZpbGUiICE9IHguLiBdOyB0aGVuIFwNCi0JICAgIHJtIC1mICQobGlic3Vi ZGlyKS8kJGZpbGU7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZp bGUgJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KKwkgICAgcm0gLWYgJChERVNU RElSKSQobGlic3ViZGlyKS8kJGZpbGU7IFwNCisJICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSAkJGZpbGUgJChERVNURElSKSQobGlic3ViZGlyKS8kJGZpbGU7 IFwNCiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWRvbmUNCiAJZm9yIGZpbGUg aW4gJChFWFRSQV9QQVJUUykgLi47IGRvIFwNCiAJICBpZiBbIHgiJCRmaWxl IiAhPSB4Li4gXTsgdGhlbiBcDQotCSAgICBybSAtZiAkKGxpYnN1YmRpcikv JCRmaWxlOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQobGli c3ViZGlyKS8kJGZpbGU7IFwNCi0JICAgIGNobW9kIGEteCAkKGxpYnN1YmRp cikvJCRmaWxlOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJzdWJk aXIpLyQkZmlsZTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAk KERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KKwkgICAgY2htb2Qg YS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQogCSAgZWxz ZSB0cnVlOyBmaTsgXA0KIAlkb25lDQogIyBEb24ndCBtZXNzIHdpdGggc3Bl Y3MgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuDQogCS1pZiBbIC1mIHNwZWNz IF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKGxpYnN1YmRpcikvc3BlY3M7IFwN Ci0JICAkKElOU1RBTExfREFUQSkgc3BlY3MgJChsaWJzdWJkaXIpL3NwZWNz OyBcDQotCSAgY2htb2QgYS14ICQobGlic3ViZGlyKS9zcGVjczsgXA0KKwkg IHJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvc3BlY3M7IFwNCisJICAk KElOU1RBTExfREFUQSkgc3BlY3MgJChERVNURElSKSQobGlic3ViZGlyKS9z cGVjczsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIpJChsaWJzdWJkaXIp L3NwZWNzOyBcDQogCWZpDQogIyBJbnN0YWxsIHByb3RvaXplIGlmIGl0IHdh cyBjb21waWxlZC4NCiAJLWlmIFsgLWYgcHJvdG9pemUkKGV4ZWV4dCkgXTsg XA0KIAl0aGVuIFwNCiAJICAgIGlmIFsgLWYgZ2NjLWNyb3NzJChleGVleHQp IF0gOyB0aGVuIFwNCi0JCXJtIC1mICQoYmluZGlyKS8kKFBST1RPSVpFX0NS T1NTX05BTUUpJChleGVleHQpOyBcDQotCQkkKElOU1RBTExfUFJPR1JBTSkg cHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoUFJPVE9JWkVfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCi0JCXJtIC1mICQoYmluZGlyKS8kKFVOUFJP VE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JCSQoSU5TVEFMTF9Q Uk9HUkFNKSB1bnByb3RvaXplJChleGVleHQpICQoYmluZGlyKS8kKFVOUFJP VE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJCXJtIC1mICQoREVT VERJUikkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQoZXhlZXh0 KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXplJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKFVO UFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJCSQoSU5TVEFM TF9QUk9HUkFNKSB1bnByb3RvaXplJChleGVleHQpICQoREVTVERJUikkKGJp bmRpcikvJChVTlBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBcDQog CSAgICBlbHNlIFwNCi0JCXJtIC1mICQoYmluZGlyKS8kKFBST1RPSVpFX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JCSQoSU5TVEFMTF9QUk9HUkFN KSBwcm90b2l6ZSQoZXhlZXh0KSAkKGJpbmRpcikvJChQUk9UT0laRV9JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQotCQlybSAtZiAkKGJpbmRpcikvJChV TlBST1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JCSQoSU5T VEFMTF9QUk9HUkFNKSB1bnByb3RvaXplJChleGVleHQpICQoYmluZGlyKS8k KFVOUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkJcm0g LWYgJChERVNURElSKSQoYmluZGlyKS8kKFBST1RPSVpFX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCk7IFwNCisJCSQoSU5TVEFMTF9QUk9HUkFNKSBwcm90b2l6 ZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElSKSQo YmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsg XA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHVucHJvdG9pemUkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KIAkgICAgZmkgOyBcDQotCSAgICBybSAtZiAkKGxp YnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQotCSAgICAkKElOU1RBTExfREFU QSkgU1lTQ0FMTFMuYy5YICQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwN Ci0JICAgIGNobW9kIGEteCAkKGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBc DQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL1NZU0NBTExT LmMuWDsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpIFNZU0NBTExTLmMuWCAk KERFU1RESVIpJChsaWJzdWJkaXIpL1NZU0NBTExTLmMuWDsgXA0KKwkgICAg Y2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5Y OyBcDQogCWZpDQogIyBJbnN0YWxsIGdjb3YgaWYgaXQgd2FzIGNvbXBpbGVk Lg0KIAktaWYgWyAtZiBnY292JChleGVleHQpIF07IFwNCiAJdGhlbiBcDQot CSAgICBybSAtZiAkKGJpbmRpcikvZ2NvdiQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pIGdjb3YkKGV4ZWV4dCkgJChiaW5kaXIpLyQo R0NPVl9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAk KERFU1RESVIpJChiaW5kaXIpL2djb3YkKGV4ZWV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnY292JChleGVleHQpICQoREVTVERJUikkKGJp bmRpcikvJChHQ09WX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCiAJZmkN Ci0JJChJTlNUQUxMX1NDUklQVCkgZ2NjYnVnICQoYmluZGlyKS8kKEdDQ0JV R19JTlNUQUxMX05BTUUpDQorCSQoSU5TVEFMTF9TQ1JJUFQpIGdjY2J1ZyAk KERFU1RESVIpJChiaW5kaXIpLyQoR0NDQlVHX0lOU1RBTExfTkFNRSkNCiAN CiAjIEluc3RhbGwgdGhlIGRyaXZlciBwcm9ncmFtIGFzICQodGFyZ2V0X2Fs aWFzKS1nY2MsIA0KICMgJCh0YXJnZXQtYWxpYXMpLWdjYy0kKHZlcnNpb24p DQogIyBhbmQgYWxzbyBhcyBlaXRoZXIgZ2NjIChpZiBuYXRpdmUpIG9yICQo Z2NjX3Rvb2xkaXIpL2Jpbi9nY2MuDQogaW5zdGFsbC1kcml2ZXI6IGluc3Rh bGxkaXJzIHhnY2MkKGV4ZWV4dCkNCiAJLWlmIFsgLWYgZ2NjLWNyb3NzJChl eGVleHQpIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKGJpbmRpcikvJChHQ0Nf Q1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAkKElOU1RBTExfUFJPR1JB TSkgZ2NjLWNyb3NzJChleGVleHQpICQoYmluZGlyKS8kKEdDQ19DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ2NjLSQodmVyc2lvbik7IFwNCi0JICAkKExOKSAkKGJpbmRp cikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKSA7IFwNCi0JICBpZiBbIC1kICQo Z2NjX3Rvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAgIHJtIC1mICQo Z2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnY2MtY3Jvc3MkKGV4ZWV4dCkgJChnY2NfdG9vbGRp cikvYmluL2djYyQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikk KGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAk KElOU1RBTExfUFJPR1JBTSkgZ2NjLWNyb3NzJChleGVleHQpICQoREVTVERJ UikkKGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJ ICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n Y2MtJCh2ZXJzaW9uKTsgXA0KKwkgICggY2QgJChERVNURElSKSQoYmluZGly KSAmJiBcDQorCSAgICAkKExOKSAkKEdDQ19DUk9TU19OQU1FKSQoZXhlZXh0 KSAkKHRhcmdldF9hbGlhcyktZ2NjLSQodmVyc2lvbikgKTsgXA0KKwkgIGlm IFsgLWQgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi8uIF0gOyB0aGVu IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4v Z2NjJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ2Nj LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4v Z2NjJChleGVleHQpOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsgXA0KIAllbHNl IFwNCi0JICBybSAtZiAkKGJpbmRpcikvJChHQ0NfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSB4Z2NjJChleGVl eHQpICQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQotCSAgcm0gLWYgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtJCh2 ZXJzaW9uKTsgXA0KLQkgICQoTE4pICQoYmluZGlyKS8kKEdDQ19JTlNUQUxM X05BTUUpJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ2Nj LSQodmVyc2lvbikgOyBcDQotCSAgcm0gLWYgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nY2MtdG1wJChleGVleHQpOyBcDQotCSAgJChMTikgJChiaW5k aXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nY2MtdG1wJChleGVleHQpOyBcDQotCSAgbXYgJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtdG1wJChleGVleHQpICQoYmlu ZGlyKS8kKEdDQ19UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K KwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KKwkgICQoSU5TVEFMTF9QUk9HUkFNKSB4Z2Nj JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNpb24pOyBcDQorCSAgKCBj ZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJICAgICQoTE4pICQoR0ND X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJCh0YXJnZXRfYWxpYXMpLWdjYy0k KHZlcnNpb24pICk7IFwNCisJICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nY2MtdG1wJChleGVleHQpOyBcDQorCSAgKCBj ZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJICAgICQoTE4pICQoR0ND X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJCh0YXJnZXRfYWxpYXMpLWdjYy10 bXAkKGV4ZWV4dCkgJiYgXA0KKwkgICAgbXYgLWYgJCh0YXJnZXRfYWxpYXMp LWdjYy10bXAkKGV4ZWV4dCkgJChHQ0NfVEFSR0VUX0lOU1RBTExfTkFNRSkk KGV4ZWV4dCkgKTsgXA0KIAlmaQ0KIA0KICMgSW5zdGFsbCB0aGUgaW5mbyBm aWxlcy4NCiAjICQoSU5TVEFMTF9EQVRBKSBtaWdodCBiZSBhIHJlbGF0aXZl IHBhdGhuYW1lLCBzbyB3ZSBjYW4ndCBjZCBpbnRvIHNyY2Rpcg0KICMgdG8g ZG8gdGhlIGluc3RhbGwuDQogaW5zdGFsbC1pbmZvOiBkb2MgaW5zdGFsbGRp cnMgbGFuZy5pbnN0YWxsLWluZm8NCi0JLXJtIC1mICQoaW5mb2RpcikvY3Bw LmluZm8qICQoaW5mb2RpcikvZ2NjLmluZm8qDQotCS1ybSAtZiAkKGluZm9k aXIpL2NwcGludGVybmFscy5pbmZvKiAkKGluZm9kaXIpL2djY2ludC5pbmZv Kg0KKwktcm0gLWYgJChERVNURElSKSQoaW5mb2RpcikvY3BwLmluZm8qICQo REVTVERJUikkKGluZm9kaXIpL2djYy5pbmZvKg0KKwktcm0gLWYgJChERVNU RElSKSQoaW5mb2RpcikvY3BwaW50ZXJuYWxzLmluZm8qICQoREVTVERJUikk KGluZm9kaXIpL2djY2ludC5pbmZvKg0KIAlpZiBbIC1mICQoZG9jZGlyKS9n Y2MuaW5mbyBdOyB0aGVuIFwNCiAJICBmb3IgZiBpbiAkKGRvY2RpcikvY3Bw LmluZm8qICQoZG9jZGlyKS9nY2MuaW5mbyogXA0KIAkJJChkb2NkaXIpL2Nw cGludGVybmFscy5pbmZvKiAkKGRvY2RpcikvZ2NjaW50LmluZm8qOyBkbyBc DQogCSAgICByZWFsZmlsZT1gZWNobyAkJGYgfCBzZWQgLWUgJ3N8LiovXChb Xi9dKlwpJCR8XDF8J2A7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGYg JChpbmZvZGlyKS8kJHJlYWxmaWxlOyBcDQorCSAgICAkKElOU1RBTExfREFU QSkgJCRmICQoREVTVERJUikkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwNCiAJ ICBkb25lOyBcDQogCWVsc2UgdHJ1ZTsgZmkNCiAJLWlmICQoU0hFTEwpIC1j ICdpbnN0YWxsLWluZm8gLS12ZXJzaW9uJyA+L2Rldi9udWxsIDI+JjE7IHRo ZW4gXA0KLQkgIGlmIFsgLWYgJChpbmZvZGlyKS9kaXIgXSA7IHRoZW4gXA0K KwkgIGlmIFsgLWYgJChERVNURElSKSQoaW5mb2RpcikvZGlyIF0gOyB0aGVu IFwNCiAJICAgIGZvciBmIGluIGNwcC5pbmZvIGdjYy5pbmZvIGdjY2ludC5p bmZvIGNwcGludGVybmFscy5pbmZvOyBkbyBcDQotCQlpZiBbIC1mICQoaW5m b2RpcikvJCRmIF07IHRoZW4gXA0KLQkJICBpbnN0YWxsLWluZm8gLS1kaXIt ZmlsZT0kKGluZm9kaXIpL2RpciAkKGluZm9kaXIpLyQkZjsgXA0KKwkJaWYg WyAtZiAkKERFU1RESVIpJChpbmZvZGlyKS8kJGYgXTsgdGhlbiBcDQorCQkg IGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoREVTVERJUikkKGluZm9kaXIp L2RpciAkKERFU1RESVIpJChpbmZvZGlyKS8kJGY7IFwNCiAJCWVsc2UgdHJ1 ZTsgZmk7IFwNCiAJICAgIGRvbmU7IFwNCiAJICBlbHNlIHRydWU7IGZpOyBc DQogCWVsc2UgdHJ1ZTsgZmk7DQotCS1jaG1vZCBhLXggJChpbmZvZGlyKS9j cHAuaW5mbyogJChpbmZvZGlyKS9nY2MuaW5mbyoNCi0JLWNobW9kIGEteCAk KGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKGluZm9kaXIpL2djY2lu dC5pbmZvKg0KKwktY2htb2QgYS14ICQoREVTVERJUikkKGluZm9kaXIpL2Nw cC5pbmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9nY2MuaW5mbyoNCisJLWNo bW9kIGEteCAkKERFU1RESVIpJChpbmZvZGlyKS9jcHBpbnRlcm5hbHMuaW5m byogJChERVNURElSKSQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQogDQogIyBJ bnN0YWxsIHRoZSBtYW4gcGFnZXMuDQogaW5zdGFsbC1tYW46IGluc3RhbGxk aXJzICQoR0VORVJBVEVEX01BTlBBR0VTKSBsYW5nLmluc3RhbGwtbWFuDQog CS1pZiBbIC1mIGdjYy1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAg cm0gLWYgJChtYW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7 IFwNCi0JICAkKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2djYy4xICQobWFu MWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAgY2ht b2QgYS14ICQobWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFleHQp OyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvJChHQ0NfQ1JP U1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgJChJTlNUQUxMX0RBVEEpICQo ZG9jZGlyKS9nY2MuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19DUk9T U19OQU1FKSQobWFuMWV4dCk7IFwNCisJICBjaG1vZCBhLXggJChERVNURElS KSQobWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQog CWVsc2UgXA0KLQkgIHJtIC1mICQobWFuMWRpcikvJChHQ0NfSU5TVEFMTF9O QU1FKSQobWFuMWV4dCk7IFwNCi0JICAkKElOU1RBTExfREFUQSkgJChkb2Nk aXIpL2djYy4xICQobWFuMWRpcikvJChHQ0NfSU5TVEFMTF9OQU1FKSQobWFu MWV4dCk7IFwNCi0JICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEdDQ19JTlNU QUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikk KG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQor CSAgJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9nY2MuMSAkKERFU1RESVIp JChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0K KwkgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19JTlNU QUxMX05BTUUpJChtYW4xZXh0KTsgXA0KIAlmaQ0KLQktcm0gLWYgJChtYW4x ZGlyKS9jcHAkKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChkb2Nk aXIpL2NwcC4xICQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0KLQktY2htb2Qg YS14ICQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW4x ZGlyKS9nY292JChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoZG9j ZGlyKS9nY292LjEgJChtYW4xZGlyKS9nY292JChtYW4xZXh0KQ0KLQktY2ht b2QgYS14ICQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkNCi0JLXJtIC1mICQo bWFuN2RpcikvZnNmLWZ1bmRpbmckKG1hbjdleHQpDQotCS0kKElOU1RBTExf REFUQSkgJChkb2NkaXIpL2ZzZi1mdW5kaW5nLjcgJChtYW43ZGlyKS9mc2Yt ZnVuZGluZyQobWFuN2V4dCkNCi0JLWNobW9kIGEteCAkKG1hbjdkaXIpL2Zz Zi1mdW5kaW5nJChtYW43ZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9nZmRs JChtYW43ZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9nZmRs LjcgJChtYW43ZGlyKS9nZmRsJChtYW43ZXh0KQ0KLQktY2htb2QgYS14ICQo bWFuN2RpcikvZ2ZkbCQobWFuN2V4dCkNCi0JLXJtIC1mICQobWFuN2Rpcikv Z3BsJChtYW43ZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9n cGwuNyAkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCi0JLWNobW9kIGEteCAk KG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCisJLXJtIC1mICQoREVTVERJUikk KG1hbjFkaXIpL2NwcCQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAk KGRvY2RpcikvY3BwLjEgJChERVNURElSKSQobWFuMWRpcikvY3BwJChtYW4x ZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpL2NwcCQo bWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJUikkKG1hbjFkaXIpL2djb3Yk KG1hbjFleHQpDQorCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2djb3Yu MSAkKERFU1RESVIpJChtYW4xZGlyKS9nY292JChtYW4xZXh0KQ0KKwktY2ht b2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpL2djb3YkKG1hbjFleHQpDQor CS1ybSAtZiAkKERFU1RESVIpJChtYW43ZGlyKS9mc2YtZnVuZGluZyQobWFu N2V4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZnNmLWZ1bmRp bmcuNyAkKERFU1RESVIpJChtYW43ZGlyKS9mc2YtZnVuZGluZyQobWFuN2V4 dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW43ZGlyKS9mc2YtZnVu ZGluZyQobWFuN2V4dCkNCisJLXJtIC1mICQoREVTVERJUikkKG1hbjdkaXIp L2dmZGwkKG1hbjdleHQpDQorCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIp L2dmZGwuNyAkKERFU1RESVIpJChtYW43ZGlyKS9nZmRsJChtYW43ZXh0KQ0K KwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjdkaXIpL2dmZGwkKG1hbjdl eHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChtYW43ZGlyKS9ncGwkKG1hbjdl eHQpDQorCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dwbC43ICQoREVT VERJUikkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCisJLWNobW9kIGEteCAk KERFU1RESVIpJChtYW43ZGlyKS9ncGwkKG1hbjdleHQpDQogDQogIyBJbnN0 YWxsIHRoZSBsaWJyYXJ5Lg0KIGluc3RhbGwtbGliZ2NjOiBsaWJnY2MubWsg bGliZ2NjLmEgaW5zdGFsbGRpcnMNCkBAIC0zMDAxLDIzICsyOTkyLDIzIEBA DQogIyBGaXggc3ltbGlua3MgdG8gYWJzb2x1dGUgcGF0aHMgaW4gdGhlIGlu c3RhbGxlZCBpbmNsdWRlIGRpcmVjdG9yeSB0bw0KICMgcG9pbnQgdG8gdGhl IGluc3RhbGxlZCBkaXJlY3RvcnksIG5vdCB0aGUgYnVpbGQgZGlyZWN0b3J5 Lg0KICMgRG9uJ3QgbmVlZCB0byB1c2UgTE5fUyBoZXJlIHNpbmNlIHdlIHJl YWxseSBkbyBuZWVkIGxuIC1zIGFuZCBubyBzdWJzdGl0dXRlcy4NCi0JLWZp bGVzPWBjZCAkKGxpYnN1YmRpcikvaW5jbHVkZTsgZmluZCAuIC10eXBlIGwg LXByaW50IDI+L2Rldi9udWxsYDsgXA0KKwktZmlsZXM9YGNkICQoREVTVERJ UikkKGxpYnN1YmRpcikvaW5jbHVkZTsgZmluZCAuIC10eXBlIGwgLXByaW50 IDI+L2Rldi9udWxsYDsgXA0KIAlpZiBbICQkPyAtZXEgMCBdOyB0aGVuIFwN CiAJICBkaXI9YGNkIGluY2x1ZGU7ICR7UFdEfWA7IFwNCiAJICBmb3IgaSBp biAkJGZpbGVzOyBkbyBcDQotCSAgICBkZXN0PWBscyAtbGQgJChsaWJzdWJk aXIpL2luY2x1ZGUvJCRpIHwgc2VkIC1uICdzLy4qLT4gLy9wJ2A7IFwNCisJ ICAgIGRlc3Q9YGxzIC1sZCAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1 ZGUvJCRpIHwgc2VkIC1uICdzLy4qLT4gLy9wJ2A7IFwNCiAJICAgIGlmIGV4 cHIgIiQkZGVzdCIgOiAiJCRkaXIuKiIgPiAvZGV2L251bGw7IHRoZW4gXA0K LQkgICAgICBybSAtZiAkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCi0J ICAgICAgbG4gLXMgYGVjaG8gJCRpIHwgc2VkICJzfC9bXi9dKnwvLi58ZyIg fCBzZWQgJ3N8Ly4uJCR8fCdgYGVjaG8gIiQkZGVzdCIgfCBzZWQgInN8JCRk aXJ8fCJgICQobGlic3ViZGlyKS9pbmNsdWRlLyQkaTsgXA0KKwkgICAgICBy bSAtZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUvJCRpOyBcDQor CSAgICAgIGxuIC1zIGBlY2hvICQkaSB8IHNlZCAic3wvW14vXSp8Ly4ufGci IHwgc2VkICdzfC8uLiQkfHwnYGBlY2hvICIkJGRlc3QiIHwgc2VkICJzfCQk ZGlyfHwiYCAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUvJCRpOyBc DQogCSAgICBmaTsgXA0KIAkgIGRvbmU7IFwNCiAJZmkNCiANCiAjIENyZWF0 ZSBvciByZWNyZWF0ZSB0aGUgZ2NjIHByaXZhdGUgaW5jbHVkZSBmaWxlIGRp cmVjdG9yeS4NCiBpbnN0YWxsLWluY2x1ZGUtZGlyOiBpbnN0YWxsZGlycw0K LQktcm0gLXJmICQobGlic3ViZGlyKS9pbmNsdWRlDQotCW1rZGlyICQobGli c3ViZGlyKS9pbmNsdWRlDQotCS1jaG1vZCBhK3J4ICQobGlic3ViZGlyKS9p bmNsdWRlDQorCS1ybSAtcmYgJChERVNURElSKSQobGlic3ViZGlyKS9pbmNs dWRlDQorCW1rZGlyICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZQ0K KwktY2htb2QgYStyeCAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUN CiANCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZGlyZWN0b3J5IHVzaW5nIHRh ci4NCiBpbnN0YWxsLWhlYWRlcnMtdGFyOiBzdG1wLWludC1oZHJzICQoU1RN UF9GSVhQUk9UTykgaW5zdGFsbC1pbmNsdWRlLWRpcg0KQEAgLTMwMjYsNyAr MzAxNyw3IEBADQogIyBmb3VuZCBpbiBDRFBBVEgsIGNvcnJ1cHRpbmcgdGhl IG91dHB1dC4gIFdlIGNvdWxkIGp1c3QgcmVkaXJlY3QgdGhlDQogIyBvdXRw dXQgb2YgYGNkJywgYnV0IHNvbWUgc2hlbGxzIGxvc2Ugb24gcmVkaXJlY3Rp b24gd2l0aGluIGAoKSdzDQogCShjZCBgJHtQV0R9YC9pbmNsdWRlIDsgXA0K LQkgdGFyIC1jZiAtIC47IGV4aXQgMCkgfCAoY2QgJChsaWJzdWJkaXIpL2lu Y2x1ZGU7IHRhciB4cGYgLSApDQorCSB0YXIgLWNmIC0gLjsgZXhpdCAwKSB8 IChjZCAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGU7IHRhciB4cGYg LSApDQogIyAvYmluL3NoIG9uIHNvbWUgc3lzdGVtcyByZXR1cm5zIHRoZSBz dGF0dXMgb2YgdGhlIGZpcnN0IHRhciwNCiAjIGFuZCB0aGF0IGNhbiBsb3Nl IHdpdGggR05VIHRhciB3aGljaCBhbHdheXMgd3JpdGVzIGEgZnVsbCBibG9j ay4NCiAjIFNvIHVzZSBgZXhpdCAwJyB0byBpZ25vcmUgaXRzIGV4aXQgc3Rh dHVzLg0KQEAgLTMwMzUsNzggKzMwMjYsNzggQEANCiBpbnN0YWxsLWhlYWRl cnMtY3Bpbzogc3RtcC1pbnQtaGRycyAkKFNUTVBfRklYUFJPVE8pIGluc3Rh bGwtaW5jbHVkZS1kaXINCiAjIFNlZSBkaXNjdXNzaW9uIGFib3V0IHRoZSB1 c2Ugb2YgYHB3ZGAgYWJvdmUNCiAJY2QgYCR7UFdEfWAvaW5jbHVkZSA7IFwN Ci0JZmluZCAuIC1wcmludCB8IGNwaW8gLXBkdW0gJChsaWJzdWJkaXIpL2lu Y2x1ZGUNCisJZmluZCAuIC1wcmludCB8IGNwaW8gLXBkdW0gJChERVNURElS KSQobGlic3ViZGlyKS9pbmNsdWRlDQogDQogIyBJbnN0YWxsIHRoZSBpbmNs dWRlIGRpcmVjdG9yeSB1c2luZyBjcC4NCiBpbnN0YWxsLWhlYWRlcnMtY3A6 IHN0bXAtaW50LWhkcnMgJChTVE1QX0ZJWFBST1RPKSBpbnN0YWxsLWluY2x1 ZGUtZGlyDQotCWNwIC1wIC1yIGluY2x1ZGUgJChsaWJzdWJkaXIpDQorCWNw IC1wIC1yIGluY2x1ZGUgJChERVNURElSKSQobGlic3ViZGlyKQ0KIA0KIGl0 b29sc2RpciA9ICQobGlic3ViZGlyKS9pbnN0YWxsLXRvb2xzDQogIyBEb24n dCBpbnN0YWxsIHRoZSBoZWFkZXJzLiAgSW5zdGVhZCwgaW5zdGFsbCBhcHBy b3ByaWF0ZSBzY3JpcHRzDQogIyBhbmQgc3VwcG9ydGluZyBmaWxlcyBmb3Ig Zml4aW5jbHVkZXMgdG8gYmUgcnVuIGxhdGVyLg0KIGluc3RhbGwtbWtoZWFk ZXJzOiBzdG1wLWludC1oZHJzICQoU1RNUF9GSVhQUk9UTykgaW5zdGFsbC1p bmNsdWRlLWRpciBcDQogICAgIG1raGVhZGVycyB4bGltaXRzLmgNCi0JLXJt IC1yZiAkKGl0b29sc2RpcikNCi0JJChTSEVMTCkgJChzcmNkaXIpL21raW5z dGFsbGRpcnMgJChpdG9vbHNkaXIpL2luY2x1ZGUNCisJLXJtIC1yZiAkKERF U1RESVIpJChpdG9vbHNkaXIpDQorCSQoU0hFTEwpICQoc3JjZGlyKS9ta2lu c3RhbGxkaXJzICQoREVTVERJUikkKGl0b29sc2RpcikvaW5jbHVkZQ0KIAlm b3IgZmlsZSBpbiAkKFVTRVJfSCk7IGRvIFwNCiAJICByZWFsZmlsZT1gZWNo byAkJGZpbGUgfCBzZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwN CiAJICAkKElOU1RBTExfREFUQSkgJCRmaWxlIFwNCi0JICAgICQoaXRvb2xz ZGlyKS9pbmNsdWRlLyQkcmVhbGZpbGUgOyBcDQorCSAgICAkKERFU1RESVIp JChpdG9vbHNkaXIpL2luY2x1ZGUvJCRyZWFsZmlsZSA7IFwNCiAJZG9uZQ0K LQkkKElOU1RBTExfREFUQSkgeGxpbWl0cy5oICQoaXRvb2xzZGlyKS9pbmNs dWRlL2xpbWl0cy5oDQorCSQoSU5TVEFMTF9EQVRBKSB4bGltaXRzLmggJChE RVNURElSKSQoaXRvb2xzZGlyKS9pbmNsdWRlL2xpbWl0cy5oDQogCWlmIFsg eCQoU1RNUF9GSVhJTkMpICE9IHggXSA7IHRoZW4gXA0KIAkgICQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvUkVBRE1FLWZpeGluYyBcDQotCSAgICAkKGl0 b29sc2RpcikvaW5jbHVkZS9SRUFETUUgOyBcDQotCSAgJChJTlNUQUxMX1BS T0dSQU0pIGZpeGluYy5zaCAkKGl0b29sc2RpcikvZml4aW5jLnNoIDsgXA0K LQkgICQoSU5TVEFMTF9QUk9HUkFNKSBmaXhpbmMvZml4aW5jbCAkKGl0b29s c2RpcikvZml4aW5jbCA7IFwNCi0JICAkKElOU1RBTExfREFUQSkgJChzcmNk aXIpL2dzeXNsaW1pdHMuaCAkKGl0b29sc2RpcikvZ3N5c2xpbWl0cy5oIDsg XA0KKwkgICAgJChERVNURElSKSQoaXRvb2xzZGlyKS9pbmNsdWRlL1JFQURN RSA7IFwNCisJICAkKElOU1RBTExfUFJPR1JBTSkgZml4aW5jLnNoICQoREVT VERJUikkKGl0b29sc2RpcikvZml4aW5jLnNoIDsgXA0KKwkgICQoSU5TVEFM TF9QUk9HUkFNKSBmaXhpbmMvZml4aW5jbCAkKERFU1RESVIpJChpdG9vbHNk aXIpL2ZpeGluY2wgOyBcDQorCSAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9nc3lzbGltaXRzLmggJChERVNURElSKSQoaXRvb2xzZGlyKS9nc3lzbGlt aXRzLmggOyBcDQogCWVsc2UgOjsgZmkNCiAJaWYgWyB4JChTVE1QX0ZJWFBS T1RPKSAhPSB4IF0gOyB0aGVuIFwNCiAJICAkKElOU1RBTExfUFJPR1JBTSkg JChzcmNkaXIpL21raW5zdGFsbGRpcnMgXA0KLQkJJChpdG9vbHNkaXIpL21r aW5zdGFsbGRpcnMgOyBcDQotCSAgJChJTlNUQUxMX1BST0dSQU0pICQoc3Jj ZGlyKS9maXhwcm90byAkKGl0b29sc2RpcikvZml4cHJvdG8gOyBcDQorCQkk KERFU1RESVIpJChpdG9vbHNkaXIpL21raW5zdGFsbGRpcnMgOyBcDQorCSAg JChJTlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9maXhwcm90byAkKERFU1RE SVIpJChpdG9vbHNkaXIpL2ZpeHByb3RvIDsgXA0KIAkgICQoSU5TVEFMTF9Q Uk9HUkFNKSBmaXgtaGVhZGVyJChidWlsZF9leGVleHQpIFwNCi0JCSQoaXRv b2xzZGlyKS9maXgtaGVhZGVyJChidWlsZF9leGVleHQpIDsgXA0KKwkJJChE RVNURElSKSQoaXRvb2xzZGlyKS9maXgtaGVhZGVyJChidWlsZF9leGVleHQp IDsgXA0KIAllbHNlIDo7IGZpDQotCSQoSU5TVEFMTF9QUk9HUkFNKSBta2hl YWRlcnMgJChpdG9vbHNkaXIpL21raGVhZGVycw0KKwkkKElOU1RBTExfUFJP R1JBTSkgbWtoZWFkZXJzICQoREVTVERJUikkKGl0b29sc2RpcikvbWtoZWFk ZXJzDQogCWVjaG8gJ1NZU1RFTV9IRUFERVJfRElSPSInIiQoU1lTVEVNX0hF QURFUl9ESVIpIiciJyBcDQotCQk+ICQoaXRvb2xzZGlyKS9ta2hlYWRlcnMu Y29uZg0KKwkJPiAkKERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVycy5j b25mDQogCWVjaG8gJ09USEVSX0ZJWElOQ0xVREVTX0RJUlM9IiQoT1RIRVJf RklYSU5DTFVERVNfRElSUykiJyBcDQotCQk+PiAkKGl0b29sc2RpcikvbWto ZWFkZXJzLmNvbmYNCisJCT4+ICQoREVTVERJUikkKGl0b29sc2RpcikvbWto ZWFkZXJzLmNvbmYNCiAJZWNobyAnRklYUFJPVE9fREVGSU5FUz0iJChGSVhQ Uk9UT19ERUZJTkVTKSInIFwNCi0JCT4+ICQoaXRvb2xzZGlyKS9ta2hlYWRl cnMuY29uZg0KLQllY2hvICdTVE1QX0ZJWFBST1RPPSIkKFNUTVBfRklYUFJP VE8pIicgPj4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQotCWVjaG8g J1NUTVBfRklYSU5DPSIkKFNUTVBfRklYSU5DKSInID4+ICQoaXRvb2xzZGly KS9ta2hlYWRlcnMuY29uZg0KKwkJPj4gJChERVNURElSKSQoaXRvb2xzZGly KS9ta2hlYWRlcnMuY29uZg0KKwllY2hvICdTVE1QX0ZJWFBST1RPPSIkKFNU TVBfRklYUFJPVE8pIicgPj4gJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hl YWRlcnMuY29uZg0KKwllY2hvICdTVE1QX0ZJWElOQz0iJChTVE1QX0ZJWElO QykiJyA+PiAkKERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25m DQogDQogIyBVc2UgdGhpcyB0YXJnZXQgdG8gaW5zdGFsbCB0aGUgcHJvZ3Jh bSBgY29sbGVjdDInIHVuZGVyIHRoZSBuYW1lIGBjb2xsZWN0MicuDQogaW5z dGFsbC1jb2xsZWN0MjogY29sbGVjdDIgaW5zdGFsbGRpcnMNCi0JJChJTlNU QUxMX1BST0dSQU0pIGNvbGxlY3QyJChleGVleHQpICQobGlic3ViZGlyKS9j b2xsZWN0MiQoZXhlZXh0KQ0KKwkkKElOU1RBTExfUFJPR1JBTSkgY29sbGVj dDIkKGV4ZWV4dCkgJChERVNURElSKSQobGlic3ViZGlyKS9jb2xsZWN0MiQo ZXhlZXh0KQ0KICMgSW5zdGFsbCB0aGUgZHJpdmVyIHByb2dyYW0gYXMgJChs aWJzdWJkaXIpL2djYyBmb3IgY29sbGVjdDIuDQotCSQoSU5TVEFMTF9QUk9H UkFNKSB4Z2NjJChleGVleHQpICQobGlic3ViZGlyKS9nY2MkKGV4ZWV4dCkN CisJJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkgJChERVNURElS KSQobGlic3ViZGlyKS9nY2MkKGV4ZWV4dCkNCiANCiAjIENhbmNlbCBpbnN0 YWxsYXRpb24gYnkgZGVsZXRpbmcgdGhlIGluc3RhbGxlZCBmaWxlcy4NCiB1 bmluc3RhbGw6IGludGwudW5pbnN0YWxsIGxhbmcudW5pbnN0YWxsDQotCS1y bSAtcmYgJChsaWJzdWJkaXIpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoR0ND X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKGJpbmRpcikv JChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1mICQoYmluZGly KS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpDQotCS1ybSAtZiAkKGJp bmRpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAk KERFU1RESVIpJChsaWJzdWJkaXIpDQorCS1ybSAtcmYgJChERVNURElSKSQo YmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpDQorCS1ybSAt cmYgJChERVNURElSKSQoYmluZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQoZXhl ZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKENQUF9JTlNU QUxMX05BTUUpJChleGVleHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChiaW5k aXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpDQogCS1pZiBbIHgkKGNw cF9pbnN0YWxsX2RpcikgIT0geCBdOyB0aGVuIFwNCi0JICBybSAtZiAkKHBy ZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkk KGV4ZWV4dCk7IFwNCi0JICBybSAtZiAkKHByZWZpeCkvJChjcHBfaW5zdGFs bF9kaXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgcm0g LWYgJChERVNURElSKSQocHJlZml4KS8kKGNwcF9pbnN0YWxsX2RpcikvJChD UFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVT VERJUikkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0NST1NT X05BTUUpJChleGVleHQpOyBcDQogCWVsc2UgdHJ1ZTsgZmkNCi0JLXJtIC1y ZiAkKGJpbmRpcikvJChQUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQp DQotCS1ybSAtcmYgJChiaW5kaXIpLyQoUFJPVE9JWkVfQ1JPU1NfTkFNRSkk KGV4ZWV4dCkNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChVTlBST1RPSVpFX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChV TlBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChi aW5kaXIpLyQoR0NPVl9JTlNUQUxMX05BTUUpJChleGVleHQpDQotCS1ybSAt cmYgJChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KQ0K LQktcm0gLXJmICQobWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFl eHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQotCS1y bSAtcmYgJChtYW4xZGlyKS9wcm90b2l6ZSQobWFuMWV4dCkNCi0JLXJtIC1y ZiAkKG1hbjFkaXIpL3VucHJvdG9pemUkKG1hbjFleHQpDQotCS1ybSAtZiAk KGluZm9kaXIpL2NwcC5pbmZvKiAkKGluZm9kaXIpL2djYy5pbmZvKg0KLQkt cm0gLWYgJChpbmZvZGlyKS9jcHBpbnRlcm5hbHMuaW5mbyogJChpbmZvZGly KS9nY2NpbnQuaW5mbyoNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIp LyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJm ICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQo ZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChVTlBS T1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERF U1RESVIpJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9TU19OQU1FKSQoZXhl ZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChHQ09WX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJCht YW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KQ0KKwktcm0g LXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJCht YW4xZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL2NwcCQo bWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9wcm90 b2l6ZSQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGly KS91bnByb3RvaXplJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQo aW5mb2RpcikvY3BwLmluZm8qICQoREVTVERJUikkKGluZm9kaXIpL2djYy5p bmZvKg0KKwktcm0gLWYgJChERVNURElSKSQoaW5mb2RpcikvY3BwaW50ZXJu YWxzLmluZm8qICQoREVTVERJUikkKGluZm9kaXIpL2djY2ludC5pbmZvKg0K ICMMDQogIyBUaGVzZSB0YXJnZXRzIGFyZSBmb3IgdGhlIGRlamFnbnUgdGVz dHN1aXRlcy4gVGhlIGZpbGUgc2l0ZS5leHANCiAjIGNvbnRhaW5zIGdsb2Jh bCB2YXJpYWJsZXMgdGhhdCBhbGwgdGhlIHRlc3RzdWl0ZXMgd2lsbCB1c2Uu DQpJbmRleDogZ2NjL21raGVhZGVycy5pbg0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2dj Yy9nY2MvbWtoZWFkZXJzLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4x DQpkaWZmIC11IC1yMS4xIG1raGVhZGVycy5pbg0KLS0tIGdjYy9ta2hlYWRl cnMuaW4JMjcgTWF5IDIwMDIgMDQ6MjQ6NTQgLTAwMDAJMS4xDQorKysgZ2Nj L21raGVhZGVycy5pbgkxIEphbiAyMDAzIDEzOjE2OjExIC0wMDAwDQpAQCAt MzcsNiArMzcsOCBAQA0KICAgICBlY2hvICIgIC12ICAgICAgICBQcmludCBt b3JlIG91dHB1dCAobWF5IGJlIHJlcGVhdGVkIGZvciBldmVuIG1vcmUgb3V0 cHV0KSINCiAgICAgZWNobyAiICAtLWhlbHAgICAgVGhpcyBoZWxwIg0KICAg ICBlY2hvICIgIC0tdmVyc2lvbiBQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9u Ig0KKyAgICBlY2hvICJFbnZpcm9ubWVudDoiDQorICAgIGVjaG8gIiAgREVT VERJUiAgIEdldHMgcHJlcGVuZGVkIHRvIHRoZSBwYXRocyBvZiBkZXN0aW5h dGlvbiBkaXJlY3RvcmllcyINCiAgICAgZXhpdCAwDQogZmkNCiANCkBAIC03 NSwyNyArNzcsMjcgQEANCiBpdG9vbHNkaXI9JHtsaWJzdWJkaXJ9L2luc3Rh bGwtdG9vbHMNCiBpbmNkaXI9JHtsaWJzdWJkaXJ9L2luY2x1ZGUNCiANCi0u ICR7aXRvb2xzZGlyfS9ta2hlYWRlcnMuY29uZg0KKy4gJHtERVNURElSfSR7 aXRvb2xzZGlyfS9ta2hlYWRlcnMuY29uZg0KIA0KLWNkICR7aXRvb2xzZGly fQ0KLXJtIC1yZiAke2luY2Rpcn0vKg0KK2NkICR7REVTVERJUn0ke2l0b29s c2Rpcn0NCitybSAtcmYgJHtERVNURElSfSR7aW5jZGlyfS8qDQogDQogaWYg WyB4JHtTVE1QX0ZJWElOQ30gIT0geCBdIDsgdGhlbg0KIAlUQVJHRVRfTUFD SElORT0iJHt0YXJnZXR9IiB0YXJnZXRfY2Fub25pY2FsPSIke3RhcmdldH0i IFwNCi0JICAgICR7U0hFTEx9IC4vZml4aW5jLnNoICR7aW5jZGlyfSBcDQor CSAgICAke1NIRUxMfSAuL2ZpeGluYy5zaCAke0RFU1RESVJ9JHtpbmNkaXJ9 IFwNCiAJICAgICR7U1lTVEVNX0hFQURFUl9ESVJ9ICR7T1RIRVJfRklYSU5D TFVERVNfRElSU30NCi0Jcm0gLWYgJHtpbmNkaXJ9L3N5c2xpbWl0cy5oDQot CWlmIFsgLWYgJHtpbmNkaXJ9L2xpbWl0cy5oIF07IHRoZW4NCi0JICBtdiAk e2luY2Rpcn0vbGltaXRzLmggJHtpbmNkaXJ9L3N5c2xpbWl0cy5oDQorCXJt IC1mICR7REVTVERJUn0ke2luY2Rpcn0vc3lzbGltaXRzLmgNCisJaWYgWyAt ZiAke0RFU1RESVJ9JHtpbmNkaXJ9L2xpbWl0cy5oIF07IHRoZW4NCisJICBt diAke0RFU1RESVJ9JHtpbmNkaXJ9L2xpbWl0cy5oICR7REVTVERJUn0ke2lu Y2Rpcn0vc3lzbGltaXRzLmgNCiAJZWxzZQ0KLQkgIGNwIGdzeXNsaW1pdHMu aCAke2luY2Rpcn0vc3lzbGltaXRzLmgNCisJICBjcCBnc3lzbGltaXRzLmgg JHtERVNURElSfSR7aW5jZGlyfS9zeXNsaW1pdHMuaA0KIAlmaQ0KIGZpDQog DQotY3AgaW5jbHVkZS8qICR7aW5jZGlyfQ0KK2NwIGluY2x1ZGUvKiAke0RF U1RESVJ9JHtpbmNkaXJ9DQogDQogaWYgWyB4JHtTVE1QX0ZJWFBST1RPfSAh PSB4IF0gOyB0aGVuDQotICBta2luc3RhbGxkaXJzPSIke1NIRUxMfSAke2l0 b29sc2Rpcn0vbWtpbnN0YWxsZGlycyINCisgIG1raW5zdGFsbGRpcnM9IiR7 U0hFTEx9ICR7REVTVERJUn0ke2l0b29sc2Rpcn0vbWtpbnN0YWxsZGlycyIN CiAgIGV4cG9ydCBGSVhQUk9UT19ERUZJTkVTIG1raW5zdGFsbGRpcnMNCi0g ICR7U0hFTEx9IGZpeHByb3RvICR7aW5jZGlyfSAke2luY2Rpcn0gJHtTWVNU RU1fSEVBREVSX0RJUn0gfHwgZXhpdCAxDQorICAke1NIRUxMfSBmaXhwcm90 byAke0RFU1RESVJ9JHtpbmNkaXJ9ICR7REVTVERJUn0ke2luY2Rpcn0gJHtT WVNURU1fSEVBREVSX0RJUn0gfHwgZXhpdCAxDQogZmkNCkluZGV4OiBnY2Mv bWtsaWJnY2MuaW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl OiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL21rbGliZ2Nj LmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40OQ0KZGlmZiAtdSAtcjEu NDkgbWtsaWJnY2MuaW4NCi0tLSBnY2MvbWtsaWJnY2MuaW4JMTYgRGVjIDIw MDIgMTg6MTk6NDQgLTAwMDAJMS40OQ0KKysrIGdjYy9ta2xpYmdjYy5pbgkx IEphbiAyMDAzIDE3OjI3OjE0IC0wMDAwDQpAQCAtMTksNiArMTksNyBAQA0K ICMgRlBCSVQNCiAjIEZQQklUX0ZVTkNTDQogIyBMSUIyX0RJVk1PRF9GVU5D Uw0KKyMgREVTVERJUg0KICMgRFBCSVQNCiAjIERQQklUX0ZVTkNTDQogIyBM SUJHQ0MNCkBAIC00MzYsMTAgKzQzNywxMCBAQA0KICAgZGlyPWBlY2hvICR7 bWx9IHwgc2VkIC1lICdzLzsuKiQvLycgLWUgJ3MvPS8kKEVRKS9nJ2ANCiAg IGZsYWdzPWBlY2hvICR7bWx9IHwgc2VkIC1lICdzL15bXjtdKjsvLycgLWUg J3MvQC8gLS9nJ2A7DQogICBpZiBbICRkaXIgIT0gLiBdOyB0aGVuDQotICAg IGxkaXI9JyQobGlic3ViZGlyKScvJGRpcg0KKyAgICBsZGlyPSckKERFU1RE SVIpJChsaWJzdWJkaXIpJy8kZGlyDQogICAgIGVjaG8gIglpZiBbIC1kICRs ZGlyIF07IHRoZW4gdHJ1ZTsgZWxzZSBta2RpciAkbGRpcjsgY2htb2QgYSty eCAkbGRpcjsgZmk7Ig0KICAgZWxzZQ0KLSAgICBsZGlyPSckKGxpYnN1YmRp ciknDQorICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknDQogICBm aQ0KICAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdjYy5h ICR7bGRpcn0vDQogICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7 bGRpcn0vbGliZ2NjLmENCkBAIC00OTUsMTAgKzQ5NiwxMCBAQA0KICAgICBk aXI9YGVjaG8gJHttbH0gfCBzZWQgLWUgJ3MvOy4qJC8vJyAtZSAncy89LyQo RVEpL2cnYA0KICAgICBpZiBbICRkaXIgIT0gLiBdOyB0aGVuDQogICAgICAg b3V0PSR7ZGlyfS8kZg0KLSAgICAgIGxkaXI9JyQobGlic3ViZGlyKScvJGRp cg0KKyAgICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknLyRkaXIN CiAgICAgZWxzZQ0KICAgICAgIG91dD0kZg0KLSAgICAgIGxkaXI9JyQobGli c3ViZGlyKScNCisgICAgICBsZGlyPSckKERFU1RESVIpJChsaWJzdWJkaXIp Jw0KICAgICBmaQ0KICAgICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAkb3V0 ICRsZGlyLw0KICAgZG9uZQ0KSW5kZXg6IGdjYy9hZGEvTWFrZS1sYW5nLmlu DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9hZGEvTWFrZS1sYW5nLmluLHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMA0KZGlmZiAtdSAtcjEuMjAgTWFr ZS1sYW5nLmluDQotLS0gZ2NjL2FkYS9NYWtlLWxhbmcuaW4JMjMgRGVjIDIw MDIgMTk6MjY6NDYgLTAwMDAJMS4yMA0KKysrIGdjYy9hZGEvTWFrZS1sYW5n LmluCTEgSmFuIDIwMDMgMTc6Mjc6MzIgLTAwMDANCkBAIC0zOTQsMzAgKzM5 NCwzMCBAQA0KIAkkKHNyY2RpcikvYWRhL2duYXRfcm0uaW5mbyAkKHNyY2Rp cikvYWRhL2duYXQtc3R5bGUuaW5mbw0KIA0KIGFkYS5pbnN0YWxsLWluZm86 DQotCS1ybSAtZiAkKGluZm9kaXIpL2duYXRfdWdfKi5pbmZvKg0KLQktcm0g LWYgJChpbmZvZGlyKS9nbmF0X3JtLmluZm8qIA0KLQktcm0gLWYgJChpbmZv ZGlyKS9nbmF0LXN0eWxlLmluZm8qIA0KKwktcm0gLWYgJChERVNURElSKSQo aW5mb2RpcikvZ25hdF91Z18qLmluZm8qDQorCS1ybSAtZiAkKERFU1RESVIp JChpbmZvZGlyKS9nbmF0X3JtLmluZm8qIA0KKwktcm0gLWYgJChERVNURElS KSQoaW5mb2RpcikvZ25hdC1zdHlsZS5pbmZvKiANCiAJaWYgWyAtZiAkKHNy Y2RpcikvYWRhL2duYXRfdWdfdW54LmluZm8gXTsgdGhlbiBcDQogCSAgZm9y IGYgaW4gJChzcmNkaXIpL2FkYS9nbmF0X3VnXyouaW5mbyogXA0KIAkJJChz cmNkaXIpL2FkYS9nbmF0X3JtLmluZm8qIFwNCiAJCSQoc3JjZGlyKS9hZGEv Z25hdC1zdHlsZS5pbmZvKjsgZG8gXA0KIAkgICAgcmVhbGZpbGU9YGVjaG8g JCRmIHwgc2VkIC1lICdzfC4qL1woW14vXSpcKSQkfFwxfCdgOyBcDQotCSAg ICAkKElOU1RBTExfREFUQSkgJCRmICQoaW5mb2RpcikvJCRyZWFsZmlsZTsg XA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChpbmZv ZGlyKS8kJHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KIAllbHNlIHRydWU7 IGZpDQogCS1pZiAkKFNIRUxMKSAtYyAnaW5zdGFsbC1pbmZvIC0tdmVyc2lv bicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwNCi0JICBpZiBbIC1mICQoaW5m b2RpcikvZGlyIF0gOyB0aGVuIFwNCisJICBpZiBbIC1mICQoREVTVERJUikk KGluZm9kaXIpL2RpciBdIDsgdGhlbiBcDQogCSAgICBmb3IgZiBpbiBnbmF0 X3VnX3Ztcy5pbmZvIGduYXRfdWdfd250LmluZm8gZ25hdF91Z191bnguaW5m byBcDQogCQlnbmF0X3VnX3Z4dy5pbmZvIGduYXRfcm0uaW5mbyBnbmF0LXN0 eWxlLmluZm87IGRvIFwNCi0JCWlmIFsgLWYgJChpbmZvZGlyKS8kJGYgXTsg dGhlbiBcDQotCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5mb2Rp cikvZGlyICQoaW5mb2RpcikvJCRmOyBcDQorCQlpZiBbIC1mICQoREVTVERJ UikkKGluZm9kaXIpLyQkZiBdOyB0aGVuIFwNCisJCSAgaW5zdGFsbC1pbmZv IC0tZGlyLWZpbGU9JChERVNURElSKSQoaW5mb2RpcikvZGlyICQoREVTVERJ UikkKGluZm9kaXIpLyQkZjsgXA0KIAkJZWxzZSB0cnVlOyBmaTsgXA0KIAkg ICAgZG9uZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0cnVl OyBmaTsNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2duYXRfdWdfdm1zLmlu Zm8qICQoaW5mb2RpcikvZ25hdF91Z193bnQuaW5mbyoNCi0JLWNobW9kIGEt eCAkKGluZm9kaXIpL2duYXRfdWdfdW54LmluZm8qICQoaW5mb2RpcikvZ25h dF91Z192eHcuaW5mbyoNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2duYXRf cm0uaW5mbyogJChpbmZvZGlyKS9nbmF0LXN0eWxlLmluZm8qDQorCS1jaG1v ZCBhLXggJChERVNURElSKSQoaW5mb2RpcikvZ25hdF91Z192bXMuaW5mbyog JChERVNURElSKSQoaW5mb2RpcikvZ25hdF91Z193bnQuaW5mbyoNCisJLWNo bW9kIGEteCAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3VueC5pbmZv KiAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3Z4dy5pbmZvKg0KKwkt Y2htb2QgYS14ICQoREVTVERJUikkKGluZm9kaXIpL2duYXRfcm0uaW5mbyog JChERVNURElSKSQoaW5mb2RpcikvZ25hdC1zdHlsZS5pbmZvKg0KIA0KIGFk YS9nbmF0X3VnX3VueC5kdmkgOiAkKHNyY2RpcikvYWRhL2duYXRfdWdfdW54 LnRleGkgXA0KIAkkKHNyY2RpcikvZG9jL2luY2x1ZGUvZmRsLnRleGkgJChz cmNkaXIpL2RvYy9pbmNsdWRlL2djYy1jb21tb24udGV4aQ0KQEAgLTQ2OSwy MTcgKzQ2OSwyMTcgQEANCiAJIHRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGJp bmQtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQo Uk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJpbmQkKGV4ZWV4 dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmluZC1jcm9z cyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRiaW5k JChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4g XSA7IHRoZW4gXA0KLQkgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0 YmluZCQoZXhlZXh0KTsgXA0KLQkgICAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGJp bmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRiaW5kJChleGVleHQpOyBcDQorCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJpbmQk KGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICBybSAtZiAkKERFU1RESVIp JCh0b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXRiaW5kLWNyb3NzJChleGVleHQpICQo REVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0YmluZCQoZXhlZXh0KTsgXA0K ICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAk KGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0YmluZCQoZXhlZXh0KSAkKGJpbmRpcikvZ25hdGJp bmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRp cikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0YmluZCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRiaW5kJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBb IC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsg LWYgZ25hdGJsLWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRibCQo ZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRibC1j cm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRi bCQoZXhlZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8u IF0gOyB0aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2du YXRibCQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0Ymwk KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKERFU1RE SVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0YmwkKGV4ZWV4dCk7 IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmluLy4g XSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQodG9vbGRp cikvYmluL2duYXRibCQoZXhlZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0 b29sZGlyKS9iaW4vZ25hdGJsJChleGVleHQpOyBcDQogICAgICAgICAgICAg Zmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0 YmwkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 YmwkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRibCQoZXhlZXh0KTsgXA0KKwkg ICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCk7IFwNCiAJICBm aSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwN CiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0Y2hvcC1jcm9zcyQoc2hleHQp IF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXRjaG9wJChzaGV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoc2hleHQpOyBc DQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0K LQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKHNoZXh0 KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRjaG9wJChz aGV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwNCisJ ICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMp LWduYXRjaG9wJChzaGV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFN KSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKHNoZXh0KTsgXA0K KwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsg dGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdGNob3AkKHNoZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQodG9vbGRpcikv YmluL2duYXRjaG9wJChleGVleHQpOyBcDQogICAgICAgICAgICAgZmk7IFwN CiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0Y2hvcCQo c2hleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIp L2FkYS9nbmF0Y2hvcCQoc2hleHQpICQoYmluZGlyKS9nbmF0Y2hvcCQoc2hl eHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRj aG9wJChzaGV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNy Y2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQoYmluZGly KS9nbmF0Y2hvcCQoc2hleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1p ZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlm IFsgLWYgZ25hdGNob3AtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVu IFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dGNob3AkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRjaG9wJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9v bGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29s ZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKHRvb2xk aXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKGV4 ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1j cm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2Fs aWFzKS1nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERF U1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBy bSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4 dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1j cm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNo b3AkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2Ug XA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkg JChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAk KERFU1RESVIpJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsg XA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0 aGVuIFwNCiAJICBpZiBbIC1mIGduYXQtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwN CiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2Fs aWFzKS1nbmF0JChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGly KS9iaW4vZ25hdCQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25h dCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0K KwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsg dGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikv YmluL2duYXQkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkg IGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXQkKGV4ZWV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0JChleGVleHQpICQo YmluZGlyKS9nbmF0JChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv Z25hdCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAt ZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1m IGduYXRrci1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkg ICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0a3IkKGV4 ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jv c3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0a3Ik KGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJCh0b29sZGlyKS9iaW4vLiBd IDsgdGhlbiBcDQotCSAgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0 a3IkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGtyJChl eGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGtyJChleGVleHQpOyBc DQorCSAgICBpZiBbIC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8uIF0g OyB0aGVuIFwNCisJICAgICAgIHJtIC1mICQoREVTVERJUikkKHRvb2xkaXIp L2Jpbi9nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9v bGRpcikvYmluL2duYXRrciQoZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZp OyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGty JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGty JChleGVleHQpICQoYmluZGlyKS9nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAg ICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGtyJChleGVleHQpICQo REVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQpOyBcDQogCSAgZmkg OyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQog CXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGxpbmstY3Jvc3MkKGV4ZWV4dCkg XSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGxpbmskKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQpOyBcDQotCSAg ICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAg ICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwN Ci0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQo ZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0bGluayQoZXhlZXh0KTsgXA0K KwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bGluayQoZXhlZXh0KTsgXA0KKwkg ICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhl biBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29s ZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBm aTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRs aW5rJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dGxpbmskKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQpOyBc DQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRsaW5rJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxpbmsk KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bGluayQoZXhlZXh0 KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhl ZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRscy1jcm9z cyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwN Ci0JICAgIGlmIFsgLWQgJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQot CSAgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCk7 IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3Mk KGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGxzJChleGVleHQpOyBcDQor CSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFz KS1nbmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpOyBcDQorCSAgICBpZiBb IC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCisJ ICAgICAgIHJtIC1mICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bHMk KGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 bHMtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmluL2du YXRscyQoZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxz ZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGxzJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxzJChleGVleHQpICQo YmluZGlyKS9nbmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdGxzJChleGVleHQpOyBcDQorCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdGxzJChleGVleHQpICQoREVTVERJUikkKGJp bmRpcikvZ25hdGxzJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQog CS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkg IGlmIFsgLWYgZ25hdG1ha2UtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0 aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdG1ha2UkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRtYWtlJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQo dG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0 b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKHRv b2xkaXIpL2Jpbi9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1ha2Uk KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFr ZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAg ICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4 ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFr ZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25h dG1ha2UkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVs c2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UkKGV4ZWV4 dCkgJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQpOyBcDQorCSAgICAkKFJN KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQpOyBcDQor CSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KIAkgIGZp IDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0K IAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRtZW0tY3Jvc3MkKGV4ZWV4dCkg XSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdG1lbSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNU QUxMX1BST0dSQU0pIGduYXRtZW0tY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBcDQorCSAgICAk KFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 bWVtJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dG1lbS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KTsgXA0KLQkg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRtZW0kKGV4ZWV4dCkgJChiaW5k aXIpL2duYXRtZW0kKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJ UikkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNU QUxMX1BST0dSQU0pIGduYXRtZW0kKGV4ZWV4dCkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0bWVtJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQog CS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkg IGlmIFsgLWYgZ25hdG5hbWUtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0 aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdG5hbWUkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0bmFtZS1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRuYW1lJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bmFtZSQoZXhl ZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRuYW1lLWNy b3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRuYW1lJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICAk KFJNKSAkKGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0bmFtZSQoZXhlZXh0KSAkKGJpbmRpcikv Z25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikk KGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0bmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5k aXIpL2duYXRuYW1lJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQog CS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkg IGlmIFsgLWYgZ25hdHByZXAtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0 aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdHByZXAkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRwcmVwJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQo dG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0 b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKHRv b2xkaXIpL2Jpbi9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAk KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJl cC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAg ICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4 ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJl cC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25h dHByZXAkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVs c2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAkKGV4ZWV4 dCkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpOyBcDQorCSAgICAkKFJN KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpOyBcDQor CSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KIAkgIGZp IDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0K IAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRwc3RhLWNyb3NzJChleGVleHQp IF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXRwc3RhJChleGVleHQpOyBcDQotCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHN0YSQoZXhlZXh0KTsgXA0KLQkg ICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAg ICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpOyBc DQotCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3Mk KGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdHBzdGEkKGV4ZWV4dCk7IFwN CisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRwc3RhJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCisJ ICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmluLy4gXSA7IHRo ZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQodG9vbGRpcikvYmlu L2duYXRwc3RhJChleGVleHQpOyBcDQorCSAgICAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9v bGRpcikvYmluL2duYXRwc3RhJChleGVleHQpOyBcDQogICAgICAgICAgICAg Zmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0 cHN0YSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXRwc3RhJChleGVleHQpICQoYmluZGlyKS9nbmF0cHN0YSQoZXhlZXh0KTsg XA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0cHN0YSQo ZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRwc3Rh JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdHBzdGEkKGV4ZWV4 dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4 ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0eHJlZi1j cm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0eHJlZiQoZXhlZXh0KTsg XA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4cmVmLWNyb3NzJChl eGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHhyZWYkKGV4 ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXR4cmVmJChleGVleHQpOyBcDQorCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdHhyZWYtY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHhyZWYkKGV4ZWV4 dCk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0 eHJlZiQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXR4cmVmJChleGVleHQpICQoYmluZGlyKS9nbmF0eHJlZiQoZXhlZXh0KTsg XA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0eHJlZiQo ZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4cmVm JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdHhyZWYkKGV4ZWV4 dCk7IFwNCiAJICBmaSA7IFwNCiAgICAgZmkNCiAJLWlmIFsgLWYgZ25hdDEk KGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0Zmlu ZC1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChS TSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0ZmluZCQoZXhlZXh0 KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRmaW5kLWNyb3Nz JChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGZpbmQk KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRmaW5kJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdGZpbmQtY3Jvc3MkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGZpbmQkKGV4 ZWV4dCk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9n bmF0ZmluZCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRmaW5kJChleGVleHQpICQoYmluZGlyKS9nbmF0ZmluZCQoZXhlZXh0 KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Zmlu ZCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRm aW5kJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGZpbmQkKGV4 ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEk KGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0Y2hv cCQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChi aW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRjaG9w JChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIp L2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JB TSkgZ25hdGNob3AkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0 Y2hvcCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KICMNCiAjIEduYXRsYnIg aXMgb25seSB1c2VkIG9uIFZNUy4NCkBAIC02ODgsOCArNjg4LDggQEANCiAJ dGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0bGJyJChleGVleHQpIF0gOyBcDQog CSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGxiciQoZXhl ZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRsYnIkKGV4 ZWV4dCkgJChiaW5kaXIpL2duYXRsYnIkKGV4ZWV4dCk7IFwNCisJICAgICQo Uk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KTsgXA0K KwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRsYnIkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0bGJyJChleGVleHQpOyBcDQogCSAgZmkg OyBcDQogCWZpDQogIw0KQEAgLTY5Nyw4ICs2OTcsOCBAQA0KICMNCiAJLWlm IFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQotCSAgICAk KFJNKSAkKGJpbmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0KLQkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRkbGwkKGV4ZWV4dCkgJChiaW5kaXIpL2du YXRkbGwkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJp bmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRkbGwkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9n bmF0ZGxsJChleGVleHQpOyBcDQogCWZpDQogIw0KICMgRmluYWxseSwgaW5z dGFsbCB0aGUgbGlicmFyeQ0KQEAgLTcxNSw0NiArNzE1LDQ2IEBADQogYWRh Lmluc3RhbGwtbWFuOg0KIA0KIGFkYS51bmluc3RhbGw6DQotCS0kKFJNKSAk KGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGly KS9nbmF0YmwkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0Y2hv cCQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXQkKGV4ZWV4dCkN Ci0JLSQoUk0pICQoYmluZGlyKS9nbmF0ZGxsJChleGVleHQpDQotCS0kKFJN KSAkKGJpbmRpcikvZ25hdGtyJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRp cikvZ25hdGxpbmskKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0 bHMkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0bWFrZSQoZXhl ZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRtZW0kKGV4ZWV4dCkNCi0J LSQoUk0pICQoYmluZGlyKS9nbmF0bmFtZSQoZXhlZXh0KQ0KLQktJChSTSkg JChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRp cikvZ25hdHBzdGEkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGJpbmQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJsJChleGVleHQpDQotCS0kKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChleGVleHQp DQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXQkKGV4 ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dGtyKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGxpbmskKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpDQotCS0kKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtZW0kKGV4ZWV4dCkN Ci0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG5hbWUk KGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdHByZXAkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ25hdHBzdGEkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRp cikvYmluL2duYXRiaW5kJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIp L2Jpbi9nbmF0YmwkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmlu L2duYXRjaG9wJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9n bmF0JChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0ZGxs JChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0a3IkKGV4 ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRsaW5rJChleGVl eHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCkN Ci0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRtYWtlJChleGVleHQpDQot CS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bWVtJChleGVleHQpDQotCS0k KFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bmFtZSQoZXhlZXh0KQ0KLQktJChS TSkgJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCkNCi0JLSQoUk0p ICQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpDQorCS0kKFJNKSAk KERFU1RESVIpJChiaW5kaXIpL2duYXRiaW5kJChleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRibCQoZXhlZXh0KQ0KKwktJChS TSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0JChleGVleHQpDQorCS0k KFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRkbGwkKGV4ZWV4dCkNCisJ LSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRscyQoZXhlZXh0 KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWFrZSQoZXhl ZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWVtJChl eGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRuYW1l JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRw cmVwJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRwc3RhJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0YmluZCQoZXhlZXh0KQ0KKwktJChSTSkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJsJChl eGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dGtyKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQpDQorCS0kKFJNKSAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4 dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRtYWtlJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpDQorCS0k KFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 bmFtZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4ZWV4dCkNCisJLSQoUk0pICQo REVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwc3RhJChl eGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25h dGJpbmQkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIp L2Jpbi9nbmF0YmwkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRv b2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNU RElSKSQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4dCkNCisJLSQoUk0pICQo REVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0ZGxsJChleGVleHQpDQorCS0k KFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGxpbmsk KGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9n bmF0bHMkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIp L2Jpbi9nbmF0bWFrZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQo dG9vbGRpcikvYmluL2duYXRtZW0kKGV4ZWV4dCkNCisJLSQoUk0pICQoREVT VERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bmFtZSQoZXhlZXh0KQ0KKwktJChS TSkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRwcmVwJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHBzdGEk KGV4ZWV4dCkNCiAjIEduYXRsYnIgYW5kIEduYXRjaG9wIGFyZSBvbmx5IHVz ZWQgb24gVk1TDQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0 KSAkKGJpbmRpcikvZ25hdGNob3AkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpL2duYXRjaG9wJChleGVleHQpDQogDQogIyBDbGVhbiBob29rczoN CiAjIEEgbG90IG9mIHRoZSBhbmNpbGxhcnkgZmlsZXMgYXJlIGRlbGV0ZWQg YnkgdGhlIG1haW4gbWFrZWZpbGUuDQpJbmRleDogZ2NjL2FkYS9NYWtlZmls ZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3Iv bG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvYWRhL01ha2VmaWxlLmlu LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNg0KZGlmZiAtdSAtcjEuMzYg TWFrZWZpbGUuaW4NCi0tLSBnY2MvYWRhL01ha2VmaWxlLmluCTI0IFNlcCAy MDAyIDAzOjQ0OjMyIC0wMDAwCTEuMzYNCisrKyBnY2MvYWRhL01ha2VmaWxl LmluCTEgSmFuIDIwMDMgMTc6Mjc6MzMgLTAwMDANCkBAIC0xNzExLDM4ICsx NzExLDM4IEBADQogIwlDcmVhdGUgdGhlIGRpcmVjdG9yeSBiZWZvcmUgZGVs ZXRpbmcgaXQsIGluIGNhc2UgdGhlIGRpcmVjdG9yeSBpcw0KICMJYSBsaXN0 IG9mIGRpcmVjdG9yaWVzIChhcyBpdCBtYXkgYmUgb24gVk1TKS4gVGhpcyBl bnN1cmVzIHdlIGFyZQ0KICMJZGVsZXRpbmcgdGhlIHJpZ2h0IG9uZS4NCi0J LSQoTUtESVIpICQoQURBX1JUTF9PQkpfRElSKQ0KLQktJChNS0RJUikgJChB REFfSU5DTFVERV9ESVIpDQotCSQoUk1ESVIpICQoQURBX1JUTF9PQkpfRElS KQ0KLQkkKFJNRElSKSAkKEFEQV9JTkNMVURFX0RJUikNCi0JLSQoTUtESVIp ICQoQURBX1JUTF9PQkpfRElSKQ0KLQktJChNS0RJUikgJChBREFfSU5DTFVE RV9ESVIpDQotCS0kKElOU1RBTExfREFUQSkgYWRhL3J0cy9NYWtlZmlsZS5h ZGFsaWIgJChBREFfUlRMX09CSl9ESVIpDQorCS0kKE1LRElSKSAkKERFU1RE SVIpJChBREFfUlRMX09CSl9ESVIpDQorCS0kKE1LRElSKSAkKERFU1RESVIp JChBREFfSU5DTFVERV9ESVIpDQorCSQoUk1ESVIpICQoREVTVERJUikkKEFE QV9SVExfT0JKX0RJUikNCisJJChSTURJUikgJChERVNURElSKSQoQURBX0lO Q0xVREVfRElSKQ0KKwktJChNS0RJUikgJChERVNURElSKSQoQURBX1JUTF9P QkpfRElSKQ0KKwktJChNS0RJUikgJChERVNURElSKSQoQURBX0lOQ0xVREVf RElSKQ0KKwktJChJTlNUQUxMX0RBVEEpIGFkYS9ydHMvTWFrZWZpbGUuYWRh bGliICQoREVTVERJUikkKEFEQV9SVExfT0JKX0RJUikNCiAJZm9yIGZpbGUg aW4gYWRhL3J0cy8qLmFsaTsgZG8gXA0KLQkgICAgJChJTlNUQUxMX0RBVEEp ICQkZmlsZSAkKEFEQV9SVExfT0JKX0RJUik7IFwNCisJICAgICQoSU5TVEFM TF9EQVRBKSAkJGZpbGUgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKTsg XA0KIAlkb25lDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzLyokKGFyZXh0KTtk byBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9P QkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERF U1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBpZmVxICgk KHN0cmlwICQoZmlsdGVyLW91dCBhbHBoYSUgZGVjIHZtcyUgb3BlbnZtcyUg YWxwaGF2bXMlLCQodGFyZykpKSwpDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRz L2xpYiokKHNvZXh0KTtkbyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRm aWxlICQoQURBX1JUTF9PQkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RB VEEpICQkZmlsZSAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQog CWRvbmUNCiBlbHNlDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzL2xpYiotKiok KHNvZXh0KTtkbyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQo QURBX1JUTF9PQkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQk ZmlsZSAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUN CiBlbmRpZg0KLQktJChMTl9TKSAkKEFEQV9SVExfT0JKX0RJUikvbGliZ25h dC0qJChzb2V4dCkgXA0KLQkgICAgICAgJChBREFfUlRMX09CSl9ESVIpL2xp YmduYXQkKHNvZXh0KQ0KLQktJChMTl9TKSAkKEFEQV9SVExfT0JKX0RJUikv bGliZ25hcmwtKiQoc29leHQpIFwNCi0JICAgICAgICQoQURBX1JUTF9PQkpf RElSKS9saWJnbmFybCQoc29leHQpDQorCS0oIGNkICQoREVTVERJUikkKEFE QV9SVExfT0JKX0RJUikgJiYgXA0KKwkgICQoTE5fUykgbGliZ25hdC0qJChz b2V4dCkgbGliZ25hdCQoc29leHQpICkNCisJLSggY2QgJChERVNURElSKSQo QURBX1JUTF9PQkpfRElSKSAmJiBcDQorCSAgJChMTl9TKSBsaWJnbmFybC0q JChzb2V4dCkgbGliZ25hcmwkKHNvZXh0KSApDQogIyBUaGlzIGNvcHkgbXVz dCBiZSBkb25lIHByZXNlcnZpbmcgdGhlIGRhdGUgb24gdGhlIG9yaWdpbmFs IGZpbGUuDQogCWZvciBmaWxlIGluIGFkYS9ydHMvKi5hZGIgYWRhL3J0cy8q LmFkczsgZG8gXA0KLQkgICAgJChJTlNUQUxMX0RBVEFfREFURSkgJCRmaWxl ICQoQURBX0lOQ0xVREVfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEFf REFURSkgJCRmaWxlICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJUik7IFwN CiAJZG9uZQ0KLQljZCAkKEFEQV9JTkNMVURFX0RJUik7ICQoQ0hNT0QpIGEt d3ggKi5hZGINCi0JY2QgJChBREFfSU5DTFVERV9ESVIpOyAkKENITU9EKSBh LXd4ICouYWRzDQorCWNkICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJUik7 ICQoQ0hNT0QpIGEtd3ggKi5hZGINCisJY2QgJChERVNURElSKSQoQURBX0lO Q0xVREVfRElSKTsgJChDSE1PRCkgYS13eCAqLmFkcw0KIA0KIC4uL3N0YW1w LWduYXRsaWIyOg0KIAkkKFJNKSBydHMvcy0qLmFsaQ0KQEAgLTE4NTQsNyAr MTg1NCw3IEBADQogICAgICAgICBlbmRpZg0KIA0KIGluc3RhbGwtcnRzOiBm b3JjZQ0KLQkkKENQKSAtciBydHMtJChSVFNfTkFNRSkgJChsaWJzdWJkaXIp Lw0KKwkkKENQKSAtciBydHMtJChSVFNfTkFNRSkgJChERVNURElSKSQobGli c3ViZGlyKS8NCiANCiBydHMtbm9uZTogZm9yY2UNCiAJJChNQUtFKSAkKEZM QUdTX1RPX1BBU1MpIHByZXBhcmUtcnRzIFwNCkluZGV4OiBnY2MvY29uZmln L3Qtc2xpYmdjYy1lbGYtdmVyDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9j b25maWcvdC1zbGliZ2NjLWVsZi12ZXIsdg0KcmV0cmlldmluZyByZXZpc2lv biAxLjQNCmRpZmYgLXUgLXIxLjQgdC1zbGliZ2NjLWVsZi12ZXINCi0tLSBn Y2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTkgTWF5IDIwMDIgMjE6MDE6 NTMgLTAwMDAJMS40DQorKysgZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZl cgkyOSBEZWMgMjAwMiAxNTo1Nzo0NiAtMDAwMA0KQEAgLTE5LDExICsxOSwx MSBAQA0KICMgJChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3Qg aXQgZnJvbSBleHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5t ay4gIFdlIHdhbnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxs IHRpbWUuDQogU0hMSUJfSU5TVEFMTCA9IFwNCi0JJCQoU0hFTEwpICQkKHNy Y2RpcikvbWtpbnN0YWxsZGlycyAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJ Ul9RVUFMKTsgXA0KKwkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxk aXJzICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVB TCk7IFwNCiAJJChJTlNUQUxMX0RBVEEpICQoU0hMSUJfTkFNRSkgXA0KLQkg ICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09O QU1FKTsgXA0KLQlybSAtZiAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9R VUFMKS8kKFNITElCX1NPTElOSyk7IFwNCisJICAkJChERVNURElSKSQkKHNs aWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsg XA0KKwlybSAtZiAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElC RElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKTsgXA0KIAkkKExOX1MpICQoU0hM SUJfU09OQU1FKSBcDQotCSAgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJf UVVBTCkvJChTSExJQl9TT0xJTkspDQorCSAgJCQoREVTVERJUikkJChzbGli ZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykNCiBT SExJQl9NS01BUCA9ICQoc3JjZGlyKS9ta21hcC1zeW12ZXIuYXdrDQogU0hM SUJfTUFQRklMRVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4 OiBnY2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9n Y2MvZ2NjL2NvbmZpZy90LXNsaWJnY2Mtc2xkLHYNCnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zDQpkaWZmIC11IC1yMS4zIHQtc2xpYmdjYy1zbGQNCi0tLSBn Y2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQJOSBNYXkgMjAwMiAyMTowMTo1MyAt MDAwMAkxLjMNCisrKyBnY2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQJMjkgRGVj IDIwMDIgMTU6NTg6MzAgLTAwMDANCkBAIC0xNywxMSArMTcsMTEgQEANCiAj ICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20g ZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3 YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0K IFNITElCX0lOU1RBTEwgPSBcDQotCSQkKFNIRUxMKSAkJChzcmNkaXIpL21r aW5zdGFsbGRpcnMgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCk7 IFwNCisJJCQoU0hFTEwpICQkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkJChE RVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpOyBcDQog CSQoSU5TVEFMTF9EQVRBKSAkKFNITElCX05BTUUpIFwNCi0JICAkJChzbGli ZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTkFNRSk7IFwN Ci0Jcm0gLWYgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChT SExJQl9TT0xJTkspOyBcDQorCSAgJCQoREVTVERJUikkJChzbGliZGlyKSQo U0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTkFNRSk7IFwNCisJcm0g LWYgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFM KS8kKFNITElCX1NPTElOSyk7IFwNCiAJJChMTl9TKSAkKFNITElCX1NPTkFN RSkgXA0KLQkgICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQo U0hMSUJfU09MSU5LKQ0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNI TElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTkspDQogU0hMSUJfTUtN QVAgPSAkKHNyY2RpcikvbWttYXAtc3ltdmVyLmF3aw0KIFNITElCX01BUEZJ TEVTID0gJChzcmNkaXIpL2xpYmdjYy1zdGQudmVyDQpJbmRleDogZ2NjL2Nv bmZpZy9hbHBoYS90LW9zZjQNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2Nv bmZpZy9hbHBoYS90LW9zZjQsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUN CmRpZmYgLXUgLXIxLjUgdC1vc2Y0DQotLS0gZ2NjL2NvbmZpZy9hbHBoYS90 LW9zZjQJMTMgSnVuIDIwMDEgMTQ6MjY6MDIgLTAwMDAJMS41DQorKysgZ2Nj L2NvbmZpZy9hbHBoYS90LW9zZjQJMjkgRGVjIDIwMDIgMTU6Mjk6NTQgLTAw MDANCkBAIC0xNyw2ICsxNyw2IEBADQogCSQoTE5fUykgJChTSExJQl9OQU1F KSAkKFNITElCX1NPTkFNRSkNCiAjICQoc2xpYmRpcikgZG91YmxlIHF1b3Rl ZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5n DQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1bnRpbCBh Y3R1YWwgaW5zdGFsbCB0aW1lLg0KLVNITElCX0lOU1RBTEwgPSAkKElOU1RB TExfREFUQSkgJChTSExJQl9OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX1NP TkFNRSk7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsg XA0KLQkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGlyKS8kKFNI TElCX05BTUUpDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAk KFNITElCX05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9T T05BTUUpOyBcDQorCXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChT SExJQl9OQU1FKTsgXA0KKwkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChE RVNURElSKSQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCkluZGV4OiBnY2Mv Y29uZmlnL2FyYy90LWFyYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29u ZmlnL2FyYy90LWFyYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlm ZiAtdSAtcjEuNSB0LWFyYw0KLS0tIGdjYy9jb25maWcvYXJjL3QtYXJjCTMx IE1heSAyMDAyIDIwOjExOjQ5IC0wMDAwCTEuNQ0KKysrIGdjYy9jb25maWcv YXJjL3QtYXJjCTI5IERlYyAyMDAyIDE1OjMwOjQyIC0wMDAwDQpAQCAtNjIs MTAgKzYyLDEwIEBADQogaW5zdGFsbC1tdWx0aWxpYi1hcmM6IGluc3RhbGwt bXVsdGlsaWINCiAJZm9yIGkgaW4gYCQoR0NDX0ZPUl9UQVJHRVQpIC0tcHJp bnQtbXVsdGktbGliYDsgZG8gXA0KIAkgIGRpcj1gZWNobyAkJGkgfCBzZWQg LWUgJ3MvOy4qJCQvLydgOyBcDQotCSAgcm0gLWYgJChsaWJzdWJkaXIpLyQk e2Rpcn0vY3J0aW5pdC5vOyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2Rp cn0vY3J0aW5pdC5vICQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsg XA0KLQkgIGNobW9kIGEteCAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0 Lm87IFwNCi0JICBybSAtZiAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRmaW5p Lm87IFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRmaW5pLm8g JChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0ZmluaS5vOyBcDQotCSAgY2htb2Qg YS14ICQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGZpbmkubzsgXA0KKwkgIHJt IC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87 IFwNCisJICAkKElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRpbml0Lm8gJChE RVNURElSKSQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0KKwkg IGNobW9kIGEteCAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0 aW5pdC5vOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS8k JHtkaXJ9L2NydGZpbmkubzsgXA0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtk aXJ9L2NydGZpbmkubyAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0v Y3J0ZmluaS5vOyBcDQorCSAgY2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1 YmRpcikvJCR7ZGlyfS9jcnRmaW5pLm87IFwNCiAJZG9uZQ0KSW5kZXg6IGdj Yy9jb25maWcvYXJtL3QtbmV0YnNkDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2dj Yy9jb25maWcvYXJtL3QtbmV0YnNkLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g MS41DQpkaWZmIC11IC1yMS41IHQtbmV0YnNkDQotLS0gZ2NjL2NvbmZpZy9h cm0vdC1uZXRic2QJMTMgRGVjIDIwMDEgMTQ6MjQ6MDMgLTAwMDAJMS41DQor KysgZ2NjL2NvbmZpZy9hcm0vdC1uZXRic2QJMjkgRGVjIDIwMDIgMTU6MzE6 MzMgLTAwMDANCkBAIC0xNiw5ICsxNiw5IEBADQogCSQoTE5fUykgJChTSExJ Ql9OQU1FKSAkKFNITElCX1NPTkFNRSkNCiAjICQoc2xpYmRpcikgZG91Ymxl IHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1 aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1 bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KLVNITElCX0lOU1RBTEwgPSAk KElOU1RBTExfREFUQSkgJChTSExJQl9OQU1FKSAkJChzbGliZGlyKS8kKFNI TElCX1NPTkFNRSk7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikvJChTSExJQl9O QU1FKTsgXA0KLQkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGly KS8kKFNITElCX05BTUUpDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9E QVRBKSAkKFNITElCX05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChT SExJQl9TT05BTUUpOyBcDQorCXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRp cikvJChTSExJQl9OQU1FKTsgXA0KKwkkKExOX1MpICQoU0hMSUJfU09OQU1F KSAkJChERVNURElSKSQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCiANCiAj IERvbid0IGJ1aWxkIGVucXVpcmUNCiBFTlFVSVJFPQ0KSW5kZXg6IGdjYy9j b25maWcvaWE2NC90LWhwdXgNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2Nv bmZpZy9pYTY0L3QtaHB1eCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0K ZGlmZiAtdSAtcjEuNSB0LWhwdXgNCi0tLSBnY2MvY29uZmlnL2lhNjQvdC1o cHV4CTEzIFNlcCAyMDAyIDE2OjU4OjI3IC0wMDAwCTEuNQ0KKysrIGdjYy9j b25maWcvaWE2NC90LWhwdXgJMSBKYW4gMjAwMyAxNzoyODo0NCAtMDAwMA0K QEAgLTQwLDkgKzQwLDkgQEANCiAJJChMTl9TKSBAc2hsaWJfYmFzZV9uYW1l QC5zbyBAc2hsaWJfYmFzZV9uYW1lQC5zby4wDQogIyAkKHNsaWJkaXIpIGRv dWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGls ZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5 ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxM ID0gJChJTlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALnNvICQkKHNs aWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvLjA7IFwNCi0Jcm0gLWYgJCQo c2xpYmRpcikvQHNobGliX2Jhc2VfbmFtZUAuc287IFwNCi0JJChMTl9TKSBA c2hsaWJfYmFzZV9uYW1lQC5zby4wICQkKHNsaWJkaXIpL0BzaGxpYl9iYXNl X25hbWVALnNvOyBcDQotCWNobW9kICt4ICQkKHNsaWJkaXIpL0BzaGxpYl9i YXNlX25hbWVALnNvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRB KSBAc2hsaWJfYmFzZV9uYW1lQC5zbyAkJChERVNURElSKSQkKHNsaWJkaXIp L0BzaGxpYl9iYXNlX25hbWVALnNvLjA7IFwNCisJcm0gLWYgJCQoREVTVERJ UikkJChzbGliZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zbzsgXA0KKwkkKExO X1MpIEBzaGxpYl9iYXNlX25hbWVALnNvLjAgJCQoREVTVERJUikkJChzbGli ZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zbzsgXA0KKwljaG1vZCAreCAkJChE RVNURElSKSQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvDQogDQog U0hMSUJfTUtNQVAgPSAkKHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCkluZGV4 OiBnY2MvY29uZmlnL21pcHMvdC1pcmlzNS02DQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMv Z2NjL2djYy9jb25maWcvbWlwcy90LWlyaXM1LTYsdg0KcmV0cmlldmluZyBy ZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgdC1pcmlzNS02DQotLS0gZ2Nj L2NvbmZpZy9taXBzL3QtaXJpczUtNgkyOSBKdWwgMjAwMiAyMjoyMTo0MSAt MDAwMAkxLjINCisrKyBnY2MvY29uZmlnL21pcHMvdC1pcmlzNS02CTI5IERl YyAyMDAyIDE1OjQwOjE3IC0wMDAwDQpAQCAtMjAsMTEgKzIwLDExIEBADQog IyAkKHNsaWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9t IGV4cGFuc2lvbiB3aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ug d2FudCB0aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4N CiBTSExJQl9JTlNUQUxMID0gXA0KLQkkJChTSEVMTCkgJCQoc3JjZGlyKS9t a2luc3RhbGxkaXJzICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp OyBcDQorCSQkKFNIRUxMKSAkJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJCQo REVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsgXA0K IAkkKElOU1RBTExfREFUQSkgJChTSExJQl9OQU1FKSBcDQotCSAgJCQoc2xp YmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBc DQotCXJtIC1mICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQo U0hMSUJfU09MSU5LKTsgXA0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikk KFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQorCXJt IC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVB TCkvJChTSExJQl9TT0xJTkspOyBcDQogCSQoTE5fUykgJChTSExJQl9TT05B TUUpIFwNCi0JICAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8k KFNITElCX1NPTElOSykNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIpJChT SExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQ0KIFNITElCX01L TUFQID0gJChzcmNkaXIpL21rbWFwLWZsYXQuYXdrDQogU0hMSUJfTUFQRklM RVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4OiBnY2MvY29u ZmlnL3BhL3QtaHB1eC1zaGxpYg0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2Mv Y29uZmlnL3BhL3QtaHB1eC1zaGxpYix2DQpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMQ0KZGlmZiAtdSAtcjEuMSB0LWhwdXgtc2hsaWINCi0tLSBnY2MvY29u ZmlnL3BhL3QtaHB1eC1zaGxpYgkxOSBEZWMgMjAwMSAxNzo1OTowNSAtMDAw MAkxLjENCisrKyBnY2MvY29uZmlnL3BhL3QtaHB1eC1zaGxpYgkyOSBEZWMg MjAwMiAxNTo1MDoxNyAtMDAwMA0KQEAgLTEzLDcgKzEzLDcgQEANCiAjICQo c2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhw YW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50 IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KIFNI TElCX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkgLW0gNTU1ICQoU0hMSUJf TkFNRSkgXA0KLQkkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCi0g ICAgICAgIHJtIC1mICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSk7IFwNCi0g ICAgICAgICQoTE5fUykgJChTSExJQl9TT05BTUUpICQkKHNsaWJkaXIpLyQo U0hMSUJfTkFNRSkNCisJJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElC X1NPTkFNRSk7IFwNCisgICAgICAgIHJtIC1mICQkKERFU1RESVIpJCQoc2xp YmRpcikvJChTSExJQl9OQU1FKTsgXA0KKyAgICAgICAgJChMTl9TKSAkKFNI TElCX1NPTkFNRSkgJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElCX05B TUUpDQogDQpJbmRleDogZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg0Mw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3Jj L2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL3JzNjAwMC90LWFpeDQzLHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOA0KZGlmZiAtdSAtcjEuMTggdC1h aXg0Mw0KLS0tIGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NDMJMjAgSnVsIDIw MDIgMDI6MjA6MTYgLTAwMDAJMS4xOA0KKysrIGdjYy9jb25maWcvcnM2MDAw L3QtYWl4NDMJMjkgRGVjIDIwMDIgMTU6NTE6MDkgLTAwMDANCkBAIC01NSw3 ICs1NSw3IEBADQogCXJtIC1mIEBtdWx0aWxpYl9kaXJAL3Noci5vDQogIyAk KHNsaWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4 cGFuc2lvbiB3aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2Fu dCB0aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1T SExJQl9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25h bWVALmEgJCQoc2xpYmRpcikvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFM TF9EQVRBKSBAc2hsaWJfYmFzZV9uYW1lQC5hICQkKERFU1RESVIpJCQoc2xp YmRpcikvDQogU0hMSUJfTElCUyA9IC1sYyBgY2FzZSBAc2hsaWJfYmFzZV9u YW1lQCBpbiAqcHRocmVhZCopIGVjaG8gLWxwdGhyZWFkIDs7IGVzYWNgDQog U0hMSUJfTUtNQVAgPSAkKHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCiBTSExJ Ql9NQVBGSUxFUyA9ICQoc3JjZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5kZXg6 IGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NTINCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9n Y2MvZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg1Mix2DQpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMQ0KZGlmZiAtdSAtcjEuMSB0LWFpeDUyDQotLS0gZ2NjL2Nv bmZpZy9yczYwMDAvdC1haXg1MgkxMCBPY3QgMjAwMiAxODoyOTozMyAtMDAw MAkxLjENCisrKyBnY2MvY29uZmlnL3JzNjAwMC90LWFpeDUyCTEgSmFuIDIw MDMgMTc6Mjk6MDAgLTAwMDANCkBAIC0zNiw3ICszNiw3IEBADQogCXJtIC1m IEBtdWx0aWxpYl9kaXJAL3Noci5vDQogIyAkKHNsaWJkaXIpIGRvdWJsZSBx dW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBidWls ZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQgdW50 aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxMID0gJChJ TlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALmEgJCQoc2xpYmRpcikv DQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJfYmFz ZV9uYW1lQC5hICQkKERFU1RESVIpJCQoc2xpYmRpcikvDQogU0hMSUJfTElC UyA9IC1sYyBgY2FzZSBAc2hsaWJfYmFzZV9uYW1lQCBpbiAqcHRocmVhZCop IGVjaG8gLWxwdGhyZWFkIDs7IGVzYWNgDQogU0hMSUJfTUtNQVAgPSAkKHNy Y2RpcikvbWttYXAtZmxhdC5hd2sNCiBTSExJQl9NQVBGSUxFUyA9ICQoc3Jj ZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5kZXg6IGdjYy9jcC9NYWtlLWxhbmcu aW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xv Y2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NwL01ha2UtbGFuZy5pbix2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI5DQpkaWZmIC11IC1yMS4xMjkg TWFrZS1sYW5nLmluDQotLS0gZ2NjL2NwL01ha2UtbGFuZy5pbgkzMCBEZWMg MjAwMiAxOTowMjowMyAtMDAwMAkxLjEyOQ0KKysrIGdjYy9jcC9NYWtlLWxh bmcuaW4JMSBKYW4gMjAwMyAxNzoyOToxMSAtMDAwMA0KQEAgLTEyOSwyNyAr MTI5LDMyIEBADQogYysrLmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0K IAktaWYgWyAtZiBjYzFwbHVzJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBp ZiBbIC1mIGcrKy1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBy bSAtZiAkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnKystY3Jvc3MkKGV4ZWV4dCkg JChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAg ICBjaG1vZCBhK3ggJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVl eHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhfQ1JPU1NfTkFN RSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoTE4pICQoYmluZGlyKS8kKEdYWF9D Uk9TU19OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJChDWFhfQ1JPU1NfTkFN RSkkKGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJChnY2NfdG9vbGRpcikv YmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICBybSAtZiAkKGdjY190b29sZGly KS9iaW4vZysrJChleGVleHQpOyBcDQotCSAgICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnKystY3Jvc3MkKGV4ZWV4dCkgJChnY2NfdG9vbGRpcikvYmluL2cr KyQoZXhlZXh0KTsgXA0KLQkgICAgICBybSAtZiAkKGdjY190b29sZGlyKS9i aW4vYysrJChleGVleHQpOyBcDQotCSAgICAgICQoTE4pICQoZ2NjX3Rvb2xk aXIpL2Jpbi9nKyskKGV4ZWV4dCkgJChnY2NfdG9vbGRpcikvYmluL2MrKyQo ZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8k KEdYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxM X1BST0dSQU0pIGcrKy1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5k aXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBjaG1v ZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8k KENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgKCBjZCAkKERF U1RESVIpJChiaW5kaXIpICYmIFwNCisJICAgICAgJChMTikgJChHWFhfQ1JP U1NfTkFNRSkkKGV4ZWV4dCkgJChDWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkg KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJChnY2NfdG9vbGRpcikv YmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICBybSAtZiAkKERFU1RESVIpJChn Y2NfdG9vbGRpcikvYmluL2crKyQoZXhlZXh0KTsgXA0KKwkgICAgICAkKElO U1RBTExfUFJPR1JBTSkgZysrLWNyb3NzJChleGVleHQpICQoREVTVERJUikk KGdjY190b29sZGlyKS9iaW4vZysrJChleGVleHQpOyBcDQorCSAgICAgIHJt IC1mICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4vYysrJChleGVleHQp OyBcDQorCSAgICAgICggY2QgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jp biAmJiBcDQorCSAgICAgICAgJChMTikgZysrJChleGVleHQpIGMrKyQoZXhl ZXh0KSApOyBcDQogCSAgICBlbHNlIHRydWU7IGZpOyBcDQogCSAgZWxzZSBc DQotCSAgICBybSAtZiAkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGcrKyQoZXhl ZXh0KSAkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsg XA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChMTikgJChiaW5k aXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQo Q1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJtIC1mICQo YmluZGlyKS8kKEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsg XA0KLQkgICAgJChMTikgJChiaW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkk KGV4ZWV4dCkgJChiaW5kaXIpLyQoR1hYX1RBUkdFVF9JTlNUQUxMX05BTUUp JChleGVleHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhfVEFS R0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoTE4pICQo YmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQoYmluZGly KS8kKENYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkg ICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZysr JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJUikk KGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkg ICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQorCSAgICAoIGNkICQoREVTVERJUikkKGJpbmRp cikgJiYgXA0KKwkgICAgICAkKExOKSAkKEdYWF9JTlNUQUxMX05BTUUpJChl eGVleHQpICQoQ1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgKTsgXA0KKwkg ICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9UQVJHRVRfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgKCBjZCAkKERFU1RESVIp JChiaW5kaXIpICYmIFwNCisJICAgICAgJChMTikgJChHWFhfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSAkKEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KSApOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQo Q1hYX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICAo IGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgXA0KKwkgICAgICAkKExOKSAk KENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQoQ1hYX1RBUkdFVF9JTlNU QUxMX05BTUUpJChleGVleHQpICk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAN CkBAIC0xNTgsMjMgKzE2MywyMyBAQA0KIGMrKy5pbnN0YWxsLW1hbjogaW5z dGFsbGRpcnMgJChzcmNkaXIpL2NwL2crKy4xDQogCS1pZiBbIC1mIGNjMXBs dXMkKGV4ZWV4dCkgXSA7IHRoZW4gXA0KIAkgIGlmIFsgLWYgZysrLWNyb3Nz JChleGVleHQpIF0gOyB0aGVuIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikv JChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElOU1RB TExfREFUQSkgJChzcmNkaXIpL2NwL2crKy4xICQobWFuMWRpcikvJChHWFhf Q1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJCht YW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJICAg IHJtIC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0NST1NTX05BTUUp JChtYW4xZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9jcC9nKysuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9DUk9TU19O QU1FKSQobWFuMWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIp JChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJ ICBlbHNlIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChHWFhfSU5TVEFM TF9OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvY3AvZysrLjEgJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRpcikv JChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIHJtIC1m ICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1h bjFleHQpOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2Nw L2crKy4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFN RSkkKG1hbjFleHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElSKSQo bWFuMWRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCiAJ ICBmaTsgXA0KIAllbHNlIHRydWU7IGZpDQogDQogYysrLnVuaW5zdGFsbDoN Ci0JLXJtIC1yZiAkKGJpbmRpcikvJChDWFhfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQo ZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChleGVleHQpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoR1hYX0NST1NT X05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEdYWF9J TlNUQUxMX05BTUUpJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikv JChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNU RElSKSQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpDQor CS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1F KSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChH WFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJ UikkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJt IC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUp JChtYW4xZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQo R1hYX0NST1NTX05BTUUpJChtYW4xZXh0KQ0KICMMDQogIyBDbGVhbiBob29r czoNCiAjIEEgbG90IG9mIHRoZSBhbmNpbGxhcnkgZmlsZXMgYXJlIGRlbGV0 ZWQgYnkgdGhlIG1haW4gbWFrZWZpbGUuDQpJbmRleDogZ2NjL2YvTWFrZS1s YW5nLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vz ci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9mL01ha2UtbGFuZy5p bix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE2DQpkaWZmIC11IC1yMS4x MTYgTWFrZS1sYW5nLmluDQotLS0gZ2NjL2YvTWFrZS1sYW5nLmluCTEgSmFu IDIwMDMgMTU6MjY6MDcgLTAwMDAJMS4xMTYNCisrKyBnY2MvZi9NYWtlLWxh bmcuaW4JMSBKYW4gMjAwMyAxNzoyOToyMiAtMDAwMA0KQEAgLTI0NiwxMyAr MjQ2LDEzIEBADQogZjc3Lmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0K IAktaWYgWyAtZiBmNzcxJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBpZiBb IC1mIGc3Ny1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBybSAt ZiAkKGJpbmRpcikvJChHNzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzctY3Jvc3MkKGV4ZWV4dCkgJChi aW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAgICBj aG1vZCBhK3ggJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQp OyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0NS T1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JB TSkgZzc3LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChH NzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAk KERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQp OyBcDQogCSAgZWxzZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChHNzdf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGc3NyQoZXhlZXh0KSAkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8k KEc3N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAk KERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzckKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8k KEc3N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQog CWVsc2UgdHJ1ZTsgZmkNCiAJQGlmIFsgLWYgZjc3LWluc3RhbGwtb2sgLW8g LWYgJChzcmNkaXIpL2Y3Ny1pbnN0YWxsLW9rIF07IHRoZW4gXA0KQEAgLTI2 OSw0MyArMjY5LDQzIEBADQogIyB0byBkbyB0aGUgaW5zdGFsbC4gIFRoZSBz ZWQgcnVsZSB3YXMgY29waWVkIGZyb20gc3RtcC1pbnQtaGRycy4NCiBmNzcu aW5zdGFsbC1pbmZvOiBmNzcuaW5mbyBpbnN0YWxsZGlycw0KIAlpZiBbIC1m ICQoc3JjZGlyKS9mL2c3Ny5pbmZvIF0gOyB0aGVuIFwNCi0JICBybSAtZiAk KGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIHJtIC1mICQoREVTVERJUikk KGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KIAkgIGZvciBmIGluICQoc3JjZGly KS9mL2c3Ny5pbmZvKjsgZG8gXA0KIAkgICAgICByZWFsZmlsZT1gZWNobyAk JGYgfCBzZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0JICAg ICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVhbGZpbGU7 IFwNCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChp bmZvZGlyKS8kJHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KLQkgIGNobW9k IGEteCAkKGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIGNobW9kIGEteCAk KERFU1RESVIpJChpbmZvZGlyKS9nNzcuaW5mbyo7IFwNCiAJZWxzZSB0cnVl OyBmaQ0KIAlAaWYgWyAtZiAkKHNyY2RpcikvZi9nNzcuaW5mbyBdIDsgdGhl biBcDQogCSAgaWYgJChTSEVMTCkgLWMgJ2luc3RhbGwtaW5mbyAtLXZlcnNp b24gfCBzZWQgMXEgfCBmZ3JlcCAtcyAtdiAtaSBkZWJpYW4nID4vZGV2L251 bGwgMj4mMTsgdGhlbiBcDQotCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0t aW5mby1kaXI9JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIjsgXA0K LQkgICAgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JChpbmZvZGlyKSAkKGlu Zm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAgICBlY2hvICIgaW5zdGFs bC1pbmZvIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgJChERVNU RElSKSQoaW5mb2RpcikvZzc3LmluZm8iOyBcDQorCSAgICBpbnN0YWxsLWlu Zm8gLS1pbmZvLWRpcj0kKERFU1RESVIpJChpbmZvZGlyKSAkKERFU1RESVIp JChpbmZvZGlyKS9nNzcuaW5mbyB8fCA6IDsgXA0KIAkgIGVsc2UgOiA7IGZp OyBcDQogCWVsc2UgOiA7IGZpDQogDQogZjc3Lmluc3RhbGwtbWFuOiAkKEdF TkVSQVRFRF9NQU5QQUdFUykgaW5zdGFsbGRpcnMNCiAJLWlmIFsgLWYgZjc3 MSQoZXhlZXh0KSBdIDsgdGhlbiBcDQogCSAgaWYgWyAtZiBnNzctY3Jvc3Mk KGV4ZWV4dCkgXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8k KEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0NS T1NTX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFu MWRpcikvJChHNzdfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBy bSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQo bWFuMWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikv Zi9nNzcuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1F KSQobWFuMWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJCht YW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBl bHNlIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9O QU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNy Y2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEc3 N19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChE RVNURElSKSQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcu MSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJCht YW4xZXh0KTsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFk aXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAgZmk7 IFwNCiAJZWxzZSB0cnVlOyBmaQ0KIA0KIGY3Ny51bmluc3RhbGw6IGluc3Rh bGxkaXJzDQogCWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12ZXJz aW9uIHwgc2VkIDFxIHwgZmdyZXAgLXMgLXYgLWkgZGViaWFuJyA+L2Rldi9u dWxsIDI+JjE7IHRoZW4gXA0KLQkgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1k ZWxldGUgLS1pbmZvLWRpcj0kKGluZm9kaXIpICQoaW5mb2RpcikvZzc3Lmlu Zm8iOyBcDQotCSAgaW5zdGFsbC1pbmZvIC0tZGVsZXRlIC0taW5mby1kaXI9 JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAg ZWNobyAiIGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVT VERJUikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZv IjsgXA0KKwkgIGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQo REVTVERJUikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5p bmZvIHx8IDogOyBcDQogCWVsc2UgOiA7IGZpDQotCXJtIC1yZiAkKGJpbmRp cikvJChHNzdfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQlybSAtcmYg JChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCXJt IC1yZiAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQp OyBcDQotCXJtIC1yZiAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUpJCht YW4xZXh0KTsgXA0KLQlybSAtcmYgJChpbmZvZGlyKS9nNzcuaW5mbyoNCisJ cm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8k KEc3N19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNU RElSKSQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7 IFwNCisJcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3X0NST1NT X05BTUUpJChtYW4xZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoaW5m b2RpcikvZzc3LmluZm8qDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMgQSBs b3Qgb2YgdGhlIGFuY2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0aGUg bWFpbiBtYWtlZmlsZS4NCkluZGV4OiBnY2MvamF2YS9NYWtlLWxhbmcuaW4N Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2Fs L3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2phdmEvTWFrZS1sYW5nLmluLHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS45NQ0KZGlmZiAtdSAtcjEuOTUgTWFr ZS1sYW5nLmluDQotLS0gZ2NjL2phdmEvTWFrZS1sYW5nLmluCTEgSmFuIDIw MDMgMTU6MTA6MDAgLTAwMDAJMS45NQ0KKysrIGdjYy9qYXZhL01ha2UtbGFu Zy5pbgkxIEphbiAyMDAzIDE3OjI5OjMyIC0wMDAwDQpAQCAtMTcxLDUzICsx NzEsNTQgQEANCiBqYXZhLmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0K IAktaWYgWyAtZiAkKEdDSikkKGV4ZWV4dCkgXTsgdGhlbiBcDQogCSAgaWYg WyAtZiAkKEdDSiktY3Jvc3MkKGV4ZWV4dCkgXTsgdGhlbiBcDQotCSAgICBy bSAtZiAkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChHQ0opLWNyb3NzJChleGVl eHQpICQoYmluZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN Ci0JICAgIGNobW9kIGEreCAkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUp JChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIp LyQoSkFWQV9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNU QUxMX1BST0dSQU0pICQoR0NKKS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpLyQoSkFWQV9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkg ICAgY2htb2QgYSt4ICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NST1NT X05BTUUpJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICBybSAtZiAk KGJpbmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKEdDSikkKGV4ZWV4dCkgJChiaW5k aXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICBj aG1vZCBhK3ggJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChKQVZBX1RBUkdFVF9J TlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICAkKExOKSAkKGJpbmRp cikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQo SkFWQV9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAg cm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQoR0NK KSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElS KSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K KwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEpBVkFfVEFSR0VU X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgICggY2QgJChERVNU RElSKSQoYmluZGlyKSAmJiBcDQorCSAgICAgICQoTE4pICQoSkFWQV9JTlNU QUxMX05BTUUpJChleGVleHQpICQoSkFWQV9UQVJHRVRfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KSApOyBcDQogCSAgZmkgOyBcDQogCWZpIDsgXA0KICAgICAg ICAgZm9yIHRvb2wgaW4gJChKQVZBX1RBUkdFVF9JTkRFUEVOREVOVF9CSU5f VE9PTFMpOyBkbyBcDQogCSAgdG9vbF90cmFuc2Zvcm1lZF9uYW1lPWBlY2hv ICQkdG9vbHxzZWQgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYDsgXA0K ICAgICAgICAgICBpZiBbIC1mICQkdG9vbCQoZXhlZXh0KSBdOyB0aGVuIFwN Ci0JICAgIHJtIC1mICQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRfbmFt ZSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkdG9v bCQoZXhlZXh0KSAkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUk KGV4ZWV4dCk7IFwNCi0JICAgIGNobW9kIGEreCAkKGJpbmRpcikvJCR0b29s X3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQo REVTVERJUikkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4 ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJHRvb2wkKGV4 ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRf bmFtZSQoZXhlZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJUikk KGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7IFwN CiAgICAgICAgICAgZmkgOyBcDQogICAgICAgIGRvbmUNCiANCiBqYXZhLmlu c3RhbGwtbWFuOg0KIA0KIGphdmEudW5pbnN0YWxsOg0KLQktcm0gLXJmICQo YmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQktcm0g LXJmICQoYmluZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCi0J LXJtIC1yZiAkKG1hbjFkaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChtYW4x ZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUp JChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvZ2NqaCQobWFuMWV4 dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpL2p2LXNjYW4kKG1hbjFleHQpDQot CS1ybSAtcmYgJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCi0JLXJt IC1yZiAkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1h bjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNU RElSKSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0K Kwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NST1NTX05B TUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikv JChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChE RVNURElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4xZXh0 KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL2djamgkKG1hbjFl eHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikvanYtc2NhbiQo bWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9qY2Yt ZHVtcCQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGly KS9naWokKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRp cikvanYtY29udmVydCQobWFuMWV4dCkNCiANCiBqYXZhLmluc3RhbGwtaW5m bzogaW5zdGFsbGRpcnMNCiAJaWYgWyAtZiBqYzEkKGV4ZWV4dCkgXSA7IHRo ZW4gXA0KIAkgIGlmIFsgLWYgJChzcmNkaXIpL2phdmEvZ2NqLmluZm8gXTsg dGhlbiBcDQotCSAgICBybSAtZiAkKGluZm9kaXIpL2djai5pbmZvKjsgXA0K KwkgICAgcm0gLWYgJChERVNURElSKSQoaW5mb2RpcikvZ2NqLmluZm8qOyBc DQogCSAgICBmb3IgZiBpbiAkKHNyY2RpcikvamF2YS9nY2ouaW5mbyo7IGRv IFwNCiAJICAgICAgcmVhbGZpbGU9YGVjaG8gJCRmIHwgc2VkIC1lICdzfC4q L1woW14vXSpcKSQkfFwxfCdgOyBcDQotCSAgICAgICQoSU5TVEFMTF9EQVRB KSAkJGYgJChpbmZvZGlyKS8kJHJlYWxmaWxlOyBcDQorCSAgICAgICQoSU5T VEFMTF9EQVRBKSAkJGYgJChERVNURElSKSQoaW5mb2RpcikvJCRyZWFsZmls ZTsgXA0KIAkgICAgZG9uZTsgXA0KLQkgICAgY2htb2QgYS14ICQoaW5mb2Rp cikvZ2NqLmluZm8qOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElSKSQo aW5mb2RpcikvZ2NqLmluZm8qOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsgXA0K IAllbHNlIHRydWU7IGZpDQotCS1pZiBbIC1mIGpjMSQoZXhlZXh0KSBdICYm IFsgLWYgJChpbmZvZGlyKS9nY2ouaW5mbyBdOyB0aGVuIFwNCisJLWlmIFsg LWYgamMxJChleGVleHQpIF0gJiYgWyAtZiAkKERFU1RESVIpJChpbmZvZGly KS9nY2ouaW5mbyBdOyB0aGVuIFwNCiAJICBpZiAkKFNIRUxMKSAtYyAnaW5z dGFsbC1pbmZvIC0tdmVyc2lvbicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwN Ci0JICAgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5mb2RpcikvZGly ICQoaW5mb2RpcikvZ2NqLmluZm87IFwNCisJICAgIGluc3RhbGwtaW5mbyAt LWRpci1maWxlPSQoREVTVERJUikkKGluZm9kaXIpL2RpciAkKERFU1RESVIp JChpbmZvZGlyKS9nY2ouaW5mbzsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwN CiAJZWxzZSB0cnVlOyBmaQ0KIA0KQEAgLTQxOSwzMyArNDIwLDMzIEBADQog amF2YS5pbnN0YWxsLW1hbjogaW5zdGFsbGRpcnMgJChHRU5FUkFURURfSkFW QV9NQU5QQUdFUykNCiAJLWlmIFsgLWYgJChHQ0opJChleGVleHQpIF07IHRo ZW4gXA0KIAkgIGlmIFsgLWYgJChHQ0opLWNyb3NzJChleGVleHQpIF07IHRo ZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFN RSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNk aXIpL2phdmEvZ2NqLjEgJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkk KG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEpB VkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQp OyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvZ2Nq LjEgJChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJCht YW4xZXh0KTsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFk aXIpLyQoSkFWQV9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBlbHNl IFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFN RSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNk aXIpL2phdmEvZ2NqLjEgJChtYW4xZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1F KSQobWFuMWV4dCk7IFwNCi0JICAgIGNobW9kIGEteCAkKG1hbjFkaXIpLyQo SkFWQV9JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1h bjFleHQpOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2ph dmEvZ2NqLjEgJChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExf TkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElS KSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBc DQogCSAgZmkgOyBcDQogCWZpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2djamgk KG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEv Z2NqaC4xICQobWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCi0JLWNobW9kIGEt eCAkKG1hbjFkaXIpL2djamgkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFk aXIpL2p2LXNjYW4kKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2phdmEvanYtc2Nhbi4xICQobWFuMWRpcikvanYtc2NhbiQobWFu MWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIpL2p2LXNjYW4kKG1hbjFl eHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0K LQktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2pjZi1kdW1wLjEg JChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAk KG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW4x ZGlyKS9naWokKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNk aXIpL2phdmEvZ2lqLjEgJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQotCS1j aG1vZCBhLXggJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQotCS1ybSAtZiAk KG1hbjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQotCS0kKElOU1RBTExf REFUQSkgJChzcmNkaXIpL2phdmEvanYtY29udmVydC4xICQobWFuMWRpcikv anYtY29udmVydCQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIp L2p2LWNvbnZlcnQkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL3Jt aWMkKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2ph dmEvcm1pYy4xICQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCi0JLWNobW9k IGEteCAkKG1hbjFkaXIpL3JtaWMkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1h bjFkaXIpL3JtaXJlZ2lzdHJ5JChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RB VEEpICQoc3JjZGlyKS9qYXZhL3JtaXJlZ2lzdHJ5LjEgJChtYW4xZGlyKS9y bWlyZWdpc3RyeSQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIp L3JtaXJlZ2lzdHJ5JChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQo bWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvamF2YS9nY2poLjEgJChERVNURElSKSQobWFuMWRpcikvZ2Nq aCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGly KS9nY2poJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRp cikvanYtc2NhbiQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKHNy Y2RpcikvamF2YS9qdi1zY2FuLjEgJChERVNURElSKSQobWFuMWRpcikvanYt c2NhbiQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4x ZGlyKS9qdi1zY2FuJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQo bWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQorCS0kKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2phdmEvamNmLWR1bXAuMSAkKERFU1RESVIpJChtYW4x ZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RE SVIpJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCisJLXJtIC1mICQo REVTVERJUikkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCisJLSQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9naWouMSAkKERFU1RESVIpJChtYW4x ZGlyKS9naWokKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChERVNURElSKSQo bWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQo bWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvamF2YS9qdi1jb252ZXJ0LjEgJChERVNURElSKSQo bWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAk KERFU1RESVIpJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KKwkt cm0gLWYgJChERVNURElSKSQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCisJ LSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9ybWljLjEgJChERVNU RElSKSQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCisJLWNobW9kIGEteCAk KERFU1RESVIpJChtYW4xZGlyKS9ybWljJChtYW4xZXh0KQ0KKwktcm0gLWYg JChERVNURElSKSQobWFuMWRpcikvcm1pcmVnaXN0cnkkKG1hbjFleHQpDQor CS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvcm1pcmVnaXN0cnku MSAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlyZWdpc3RyeSQobWFuMWV4dCkN CisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlyZWdpc3Ry eSQobWFuMWV4dCkNCkluZGV4OiBnY2MvdHJlZWxhbmcvTWFrZS1sYW5nLmlu DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy90cmVlbGFuZy9NYWtlLWxhbmcu aW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjkNCmRpZmYgLXUgLXIxLjkg TWFrZS1sYW5nLmluDQotLS0gZ2NjL3RyZWVsYW5nL01ha2UtbGFuZy5pbgky MyBEZWMgMjAwMiAxOToyNjo0OCAtMDAwMAkxLjkNCisrKyBnY2MvdHJlZWxh bmcvTWFrZS1sYW5nLmluCTEgSmFuIDIwMDMgMTc6MzE6NTEgLTAwMDANCkBA IC0xNjcsMTAgKzE2NywxMCBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYgJCRu YW1lIF0gOyB0aGVuIFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2VuYW1l ICQkbmFtZVxgIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUp JyBgIjsgXA0KLQkgICAgcm0gLWYgJChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4 dCk7IFwNCi0JICAgIGVjaG8gJChJTlNUQUxMX1BST0dSQU0pICQkbmFtZSQo ZXhlZXh0KSAkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKGJpbmRpcikv JCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGly KS8kJG5hbWUyJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIp JChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgIGVjaG8gJChJ TlNUQUxMX1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSAkJG5hbWUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8k JG5hbWUyJChleGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElS KSQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQog CWRvbmUNCiAJJChTVEFNUCkgdHJlZWxhbmcuaW5zdGFsbC5jb21tb24uZG9u ZQ0KQEAgLTE4MCw5ICsxODAsOSBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYg JCRuYW1lIF0gOyB0aGVuIFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2Vu YW1lICQkbmFtZVxgIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25h bWUpJyBgIjsgXA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkbmFtZTIk KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5hbWUk KGV4ZWV4dCkgJChsaWJzdWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0J ICAgIGNobW9kIGEreCAkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsg XA0KKwkgICAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS8kJG5hbWUy JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRuYW1l JChleGVleHQpICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhl ZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJUikkKGxpYnN1YmRp cikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlkb25lDQog DQpAQCAtMTk0LDggKzE5NCw4IEBADQogCSAgZWNobyAkJG5hbWU7IFwNCiAJ ICBuYW1lMj0iYGVjaG8gJCRuYW1lIHwgc2VkIC1lICckKHByb2dyYW1fdHJh bnNmb3JtX25hbWUpJyBgIjsgXA0KIAkgIGVjaG8gYmVjb21lcyAkJG5hbWUy OyBcDQotCSAgZWNobyAtcm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVl eHQpOyBcDQotCSAgcm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVleHQp OyBcDQorCSAgZWNobyAtcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJCRu YW1lMiQoZXhlZXh0KTsgXA0KKwkgIHJtIC1yZiAkKERFU1RESVIpJChiaW5k aXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCiAJZG9uZQ0KIAktcm0gdHJlZWxh bmcuaW5zdGFsbC5jb21tb24uZG9uZQ0KIA0KSW5kZXg6IGxpYmYyYy9NYWtl ZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91 c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9saWJmMmMvTWFrZWZpbGUu aW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjU0DQpkaWZmIC11IC1yMS41 NCBNYWtlZmlsZS5pbg0KLS0tIGxpYmYyYy9NYWtlZmlsZS5pbgkyMyBTZXAg MjAwMiAwMzo1Mjo1MCAtMDAwMAkxLjU0DQorKysgbGliZjJjL01ha2VmaWxl LmluCTEgSmFuIDIwMDMgMTc6MzE6NTMgLTAwMDANCkBAIC04MSw2ICs4MSw3 IEBADQogCVdBUk5fQ0ZMQUdTPSckKFdBUk5fQ0ZMQUdTKScgXA0KIAlDRkxB R1M9JyQoQ0ZMQUdTKScgXA0KIAlDUFBGTEFHUz0nJChDUFBGTEFHUyknIFwN CisJREVTVERJUj0nJChERVNURElSKScgXA0KIAlBUj0nJChBUiknIFwNCiAJ UkFOTElCPSckKFJBTkxJQiknIFwNCiAJcHJlZml4PSckKHByZWZpeCknIFwN CkBAIC0yMTQsMjEgKzIxNSwyMSBAQA0KIAljZCBsaWJVNzc7ICQoTUFLRSkg Rzc3RElSPS4uLy4uLy4uL2djYy8gY2hlY2sNCiANCiBpbnN0YWxsOiBhbGwN Ci0JJChTSEVMTCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMg JChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KLQkkKExJQlRPT0wpIC0tbW9k ZT1pbnN0YWxsICQoSU5TVEFMTCkgJChMSUJHMkMpICQoZ2xpYmNwcF90b29s ZXhlY2xpYmRpcikNCi0JJChJTlNUQUxMX0RBVEEpIGxpYmZydGJlZ2luLmEg JChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KLQkkKFJBTkxJQikgJChnbGli Y3BwX3Rvb2xleGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQotCSQoSU5TVEFM TF9EQVRBKSBnMmMuaCAkKGxpYnN1YmRpcikvaW5jbHVkZS9nMmMuaA0KKwkk KFNIRUxMKSAkKHRvcGxldmVsX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKERF U1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwkkKExJQlRPT0wp IC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChMSUJHMkMpICQoREVTVERJ UikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQorCSQoSU5TVEFMTF9EQVRB KSBsaWJmcnRiZWdpbi5hICQoREVTVERJUikkKGdsaWJjcHBfdG9vbGV4ZWNs aWJkaXIpDQorCSQoUkFOTElCKSAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xl eGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQorCSQoSU5TVEFMTF9EQVRBKSBn MmMuaCAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUvZzJjLmgNCiAJ JChNVUxUSURPKSAkKEZMQUdTX1RPX1BBU1MpIG11bHRpLWRvIERPPSIkQCIN Ci0JQC0kKExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChnbGliY3BwX3Rvb2xl eGVjbGliZGlyKQ0KKwlALSQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKERF U1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KIA0KIGluc3RhbGwt c3RyaXA6DQogCSQoTUFLRSkgSU5TVEFMTF9QUk9HUkFNPSckKElOU1RBTExf UFJPR1JBTSkgLXMnIGluc3RhbGwNCiANCiB1bmluc3RhbGw6DQotCXJtIC1m ICQobGlic3ViZGlyKS9pbmNsdWRlL2cyYy5oDQotCXJtIC1mICQoZ2xpYmNw cF90b29sZXhlY2xpYmRpcikvbGliZnJ0YmVnaW4uYQ0KLQkkKExJQlRPT0wp IC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJChnbGliY3BwX3Rvb2xleGVjbGli ZGlyKSQoTElCRzJDX0JBU0UpLmxhDQorCXJtIC1mICQoREVTVERJUikkKGxp YnN1YmRpcikvaW5jbHVkZS9nMmMuaA0KKwlybSAtZiAkKERFU1RESVIpJChn bGliY3BwX3Rvb2xleGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQorCSQoTElC VE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAkKERFU1RESVIpJChnbGli Y3BwX3Rvb2xleGVjbGliZGlyKSQoTElCRzJDX0JBU0UpLmxhDQogCSQoTVVM VElETykgJChGTEFHU19UT19QQVNTKSBtdWx0aS1kbyBETz0iJEAiDQogDQog bW9zdGx5Y2xlYW46DQpJbmRleDogbGliaWJlcnR5L01ha2VmaWxlLmluDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9z cmMvY3ZzL2djYy1jdnMvZ2NjL2xpYmliZXJ0eS9NYWtlZmlsZS5pbix2DQpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgNCmRpZmYgLXUgLXIxLjc4IE1ha2Vm aWxlLmluDQotLS0gbGliaWJlcnR5L01ha2VmaWxlLmluCTIyIE5vdiAyMDAy IDIwOjAxOjA3IC0wMDAwCTEuNzgNCisrKyBsaWJpYmVydHkvTWFrZWZpbGUu aW4JMSBKYW4gMjAwMyAxNzozMjowNSAtMDAwMA0KQEAgLTg0LDYgKzg0LDcg QEANCiAJIkFSX0ZMQUdTPSQoQVJfRkxBR1MpIiBcDQogCSJDQz0kKENDKSIg XA0KIAkiQ0ZMQUdTPSQoQ0ZMQUdTKSIgXA0KKwkiREVTVERJUj0kKERFU1RE SVIpIiBcDQogCSJMSUJDRkxBR1M9JChMSUJDRkxBR1MpIiBcDQogCSJFWFRS QV9PRklMRVM9JChFWFRSQV9PRklMRVMpIiBcDQogCSJIREVGSU5FUz0kKEhE RUZJTkVTKSIgXA0KSW5kZXg6IGxpYm9iamMvTWFrZWZpbGUuaW4NCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9j dnMvZ2NjLWN2cy9nY2MvbGlib2JqYy9NYWtlZmlsZS5pbix2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMjINCmRpZmYgLXUgLXIxLjIyIE1ha2VmaWxlLmlu DQotLS0gbGlib2JqYy9NYWtlZmlsZS5pbgkyMyBTZXAgMjAwMiAwMzo1Mjo1 MyAtMDAwMAkxLjIyDQorKysgbGlib2JqYy9NYWtlZmlsZS5pbgkxIEphbiAy MDAzIDE3OjMzOjE1IC0wMDAwDQpAQCAtMTE4LDYgKzExOCw3IEBADQogCSJB Ul9GTEFHUz0kKEFSX0ZMQUdTKSIgXA0KIAkiQ0M9JChDQykiIFwNCiAJIkNG TEFHUz0kKENGTEFHUykiIFwNCisJIkRFU1RESVI9JChERVNURElSKSIgXA0K IAkiTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKSIgXA0KIAkiRVhUUkFfT0ZJTEVT PSQoRVhUUkFfT0ZJTEVTKSIgXA0KIAkiSERFRklORVM9JChIREVGSU5FUyki IFwNCkBAIC0zMTgsMjEgKzMxOSwyMSBAQA0KIGluc3RhbGw6IGluc3RhbGwt bGlicyBpbnN0YWxsLWhlYWRlcnMNCiANCiBpbnN0YWxsLWxpYnM6IGluc3Rh bGxkaXJzDQotCSQoU0hFTEwpICQodG9wbGV2ZWxfc3JjZGlyKS9ta2luc3Rh bGxkaXJzICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikNCi0JJChMSUJUT09M X0lOU1RBTEwpICQoSU5TVEFMTCkgbGlib2JqYy5sYSAkKGdsaWJjcHBfdG9v bGV4ZWNsaWJkaXIpOw0KKwkkKFNIRUxMKSAkKHRvcGxldmVsX3NyY2Rpcikv bWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGli ZGlyKQ0KKwkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMKSBsaWJvYmpj LmxhICQoREVTVERJUikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpOw0KIAlp ZiBbICIkKE9CSkNfQk9FSE1fR0MpIiBdOyB0aGVuIFwNCiAJICAkKExJQlRP T0xfSU5TVEFMTCkgJChJTlNUQUxMKSBsaWJvYmpjX2djLmxhIFwNCi0JCQkJ JChnbGliY3BwX3Rvb2xleGVjbGliZGlyKTtcDQorCQkJCSQoREVTVERJUikk KGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpO1wNCiAJZmkNCiAJJChNVUxUSURP KSAkKEZMQUdTX1RPX1BBU1MpIG11bHRpLWRvIERPPSIkQCINCi0JQC0kKExJ QlRPT0wpIC0tbW9kZT1maW5pc2ggJChnbGliY3BwX3Rvb2xleGVjbGliZGly KQ0KKwlALSQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKERFU1RESVIpJChn bGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KIA0KICMgQ29weSBPYmplY3RpdmUg QyBoZWFkZXJzIHRvIGluc3RhbGxhdGlvbiBpbmNsdWRlIGRpcmVjdG9yeS4N CiBpbnN0YWxsLWhlYWRlcnM6DQotCSQoU0hFTEwpICQodG9wbGV2ZWxfc3Jj ZGlyKS9ta2luc3RhbGxkaXJzICQobGlic3ViZGlyKS9pbmNsdWRlL29iamMN CisJJChTSEVMTCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMg JChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlL29iamMNCiAJZm9yIGZp bGUgaW4gJChPQkpDX0gpOyBkbyBcDQogCSAgcmVhbGZpbGU9JChzcmNkaXIp L29iamMvJCR7ZmlsZX07IFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7cmVh bGZpbGV9ICQobGlic3ViZGlyKS9pbmNsdWRlL29iamM7IFwNCisJICAkKElO U1RBTExfREFUQSkgJCR7cmVhbGZpbGV9ICQoREVTVERJUikkKGxpYnN1YmRp cikvaW5jbHVkZS9vYmpjOyBcDQogCWRvbmUNCiANCiBjaGVjayB1bmluc3Rh bGwgaW5zdGFsbC1zdHJpcCBkaXN0IGluc3RhbGxjaGVjayBpbnN0YWxsZGly czoNCkluZGV4OiBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5hbQ0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwv c3JjL2N2cy9nY2MtY3ZzL2djYy9saWJzdGRjKystdjMvaW5jbHVkZS9NYWtl ZmlsZS5hbSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQNCmRpZmYgLXUg LXIxLjQ0IE1ha2VmaWxlLmFtDQotLS0gbGlic3RkYysrLXYzL2luY2x1ZGUv TWFrZWZpbGUuYW0JMTYgRGVjIDIwMDIgMTk6MDE6NTcgLTAwMDAJMS40NA0K KysrIGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtCTEgSmFuIDIw MDMgMTc6MzM6NDEgLTAwMDANCkBAIC00NzAsMzIgKzQ3MCwzMiBAQA0KICMg dGhlIHJlc3QgYXJlIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSB0 cmVlLg0KIGd4eF9pbmNsdWRlX2RpciA9IEBneHhfaW5jbHVkZV9kaXJADQog aW5zdGFsbC1kYXRhLWxvY2FsOg0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4 X2luY2x1ZGVfZGlyfQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQorCSQobWtpbnN0YWxsZGlycykg JChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfQ0KKwkkKG1raW5zdGFsbGRp cnMpICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxk ZGlyfQ0KIAlmb3IgZmlsZSBpbiAke2JpdHNfaGVhZGVyc307IGRvIFwNCi0J ICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9 LyR7Yml0c19idWlsZGRpcn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJzKSAk e2d4eF9pbmNsdWRlX2Rpcn0vJHtiYWNrd2FyZF9idWlsZGRpcn0NCisJICAk KElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxs ZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJk X2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke2JhY2t3YXJkX2hlYWRlcnN9 OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4X2lu Y2x1ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGlyfTsgZG9uZQ0KLQkkKG1r aW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRp cn0NCisJICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7 Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGlyfTsgZG9uZQ0K KwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rp cn0vJHtleHRfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7ZXh0X2hlYWRl cnN9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRpcn07IGRvbmUNCi0JJChta2lu c3RhbGxkaXJzKSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jhc2VfYnVpbGRk aXJ9DQorCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICQoREVTVERJUikk e2d4eF9pbmNsdWRlX2Rpcn0vJHtleHRfYnVpbGRkaXJ9OyBkb25lDQorCSQo bWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8k e2NfYmFzZV9idWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4gJHtjX2Jhc2VfaGVh ZGVyc19yZW5hbWV9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICR7Y19i YXNlX2J1aWxkZGlyfS8kJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn07IGRv bmUNCisJICAkKElOU1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9LyQk e2ZpbGV9ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jhc2Vf YnVpbGRkaXJ9OyBkb25lDQogCWNfYmFzZV9oZWFkZXJzX2V4dHJhX2luc3Rh bGw9JyQoY19iYXNlX2hlYWRlcnNfZXh0cmEpJztcDQogCWZvciBmaWxlIGlu ICQkY19iYXNlX2hlYWRlcnNfZXh0cmFfaW5zdGFsbDsgZG8gXA0KLQkgICQo SU5TVEFMTF9EQVRBKSAkJGZpbGUgJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0 c19idWlsZGRpcn07IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxl ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGly fTsgZG9uZQ0KIAljX2NvbXBhdGliaWxpdHlfaGVhZGVyc19pbnN0YWxsPSck KGNfY29tcGF0aWJpbGl0eV9oZWFkZXJzX2V4dHJhKSc7XA0KIAlmb3IgZmls ZSBpbiAkJGNfY29tcGF0aWJpbGl0eV9oZWFkZXJzX2luc3RhbGw7IGRvIFwN Ci0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlICR7Z3h4X2luY2x1ZGVfZGly fTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGly fS8ke3N0ZF9idWlsZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxl ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn07IGRvbmUNCisJJChta2lu c3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7c3Rk X2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3N0ZF9oZWFkZXJzX3JlbmFt ZX07IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJHtzdGRfYnVpbGRkaXJ9 LyQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KLQkkKG1raW5z dGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWlsZGRp cn0NCisJICAkKElOU1RBTExfREFUQSkgJHtzdGRfYnVpbGRkaXJ9LyQke2Zp bGV9ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRk aXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4 X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWlsZGRpcn0NCiAJZm9yIGZpbGUg aW4gJHt0YXJnZXRfaGVhZGVyc30gJHt0YXJnZXRfaGVhZGVyc19leHRyYX0g XA0KIAkgJHt0aHJlYWRfdGFyZ2V0X2hlYWRlcnN9OyBkbyBcDQotCSAgJChJ TlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfS8ke3Rh cmdldF9idWlsZGRpcn07IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkgJCR7 ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9i dWlsZGRpcn07IGRvbmUNCiANCiAjIEJ5IGFkZGluZyB0aGVzZSBmaWxlcyBo ZXJlLCBhdXRvbWFrZSB3aWxsIHJlbW92ZSB0aGVtIGZvciAnbWFrZSBjbGVh bicNCiAjQ0xFQU5GSUxFUyA9ICR7YWxsc3RhbXBzfQ0K --8323584-62734452-1041452575=:11826 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir2-doc.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir2-doc.diff" SW5kZXg6IGdjYy9kb2MvaW5zdGFsbC50ZXhpDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMv Z2NjL2djYy9kb2MvaW5zdGFsbC50ZXhpLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4xNTkNCmRpZmYgLXUgLXIxLjE1OSBpbnN0YWxsLnRleGkNCi0tLSBn Y2MvZG9jL2luc3RhbGwudGV4aQkzMSBEZWMgMjAwMiAxOToxNjoyNCAtMDAw MAkxLjE1OQ0KKysrIGdjYy9kb2MvaW5zdGFsbC50ZXhpCTEgSmFuIDIwMDMg MTc6Mjk6MTkgLTAwMDANCkBAIC0xMzkxLDYgKzEzOTEsNDUgQEANCiBwYXJ0 cyBvZiB0aGUgY29tcGlsZXIgaW4gQGZpbGV7QHZhcntsaWJkaXJ9L2djYy1s aWJ9OyBkb2N1bWVudGF0aW9uIGluDQogaW5mbyBmb3JtYXQgaW4gQGZpbGV7 QHZhcntpbmZvZGlyfX0gKG5vcm1hbGx5IEBmaWxle0B2YXJ7cHJlZml4fS9p bmZvfSkuDQogDQorSW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aS1hcmNoaXRl Y3R1cmFsIHN5c3RlbXMsIEdDQydzDQorZXhlY3V0YWJsZXMgYXJlIG5vdCBv bmx5IGluc3RhbGxlZCBpbnRvIEBmaWxle0B2YXJ7YmluZGlyfX0sDQordGhh dCBpcywgQGZpbGV7QHZhcntleGVjLXByZWZpeH0vYmlufSwgYnV0IGFkZGl0 aW9uYWxseSBpbnRvDQorQGZpbGV7QHZhcntleGVjLXByZWZpeH0vQHZhcnt0 YXJnZXQtYWxpYXN9L2Jpbn0sIGlmIHRoYXQgZGlyZWN0b3J5DQorZXhpc3Rz LiAgVHlwaWNhbGx5LCBzdWNoIEBkZm57dG9vbGRpcnN9IGhvbGQgdGFyZ2V0 LXNwZWNpZmljDQorYmludXRpbHMsIGluY2x1ZGluZyBhc3NlbWJsZXIgYW5k IGxpbmtlci4NCisNCitJbnN0YWxsYXRpb24gaW50byBhIHRlbXBvcmFyeSBz dGFnaW5nIGFyZWEgb3IgaW50byBhIGNocm9vdCBqYWlsIGNhbiBiZQ0KK2Fj aGlldmVkIHdpdGggdGhlIGNvbW1hbmQNCitAZXhhbXBsZQ0KK21ha2UgREVT VERJUj1AdmFye3BhdGgtdG8tcm9vdGRpcn0gaW5zdGFsbA0KK0BlbmQgZXhh bXBsZQ0KK0Bub2luZGVudCB3aGVyZSBAdmFye3BhdGgtdG8tcm9vdGRpcn0g aXMgdGhlIGFic29sdXRlIHBhdGggb2YgYSBkaXJlY3RvcnkNCityZWxhdGl2 ZSB0byB3aGljaCBhbGwgaW5zdGFsbGF0aW9uIHBhdGhzIHdpbGwgYmUgaW50 ZXJwcmV0ZWQuDQorDQorVXNpbmcgQGNvZGV7REVTVERJUn0gaGFzIHNldmVy YWwgYWR2YW50YWdlcyBvdmVyIHRlbXBvcmFyaWx5DQorY2hhbmdpbmcgQGNv ZGV7cHJlZml4fSBkdXJpbmcgaW5zdGFsbGF0aW9uLiAgTW9zdCBpbXBvcnRh bnQsIHRoZQ0KK3NldHRpbmcgb2YgQGNvZGV7REVTVERJUn0gaXMgbmV2ZXIg Y29tcGlsZWQgaW50byBiaW5hcmllcywgbm9yIGRvZXMNCitpdCBnZXQgc3Rv cmVkIHBlcm1hbmVudGx5IGluIGFueSBjb25maWd1cmF0aW9uLCBpdCBvbmx5 IGFmZmVjdHMNCitpbnN0YWxsYXRpb24gKGFuZCB1bmluc3RhbGxhdGlvbiwg b25jZSB0aGF0IGlzIGZ1bGx5IHN1cHBvcnRlZCkNCithbmQgY2FuIGJlIGNo b3NlbiBhcmJpdHJhcmlseSBhdCBpbnN0YWxsYXRpb24gdGltZS4gIE1vcmVv dmVyLA0KK3NldHRpbmcgQGNvZGV7REVTVERJUn0gcmVsb2NhdGVzIGFsbCBp bnN0YWxsYXRpb24gZGlyZWN0b3JpZXMNCitjb25zaXN0ZW50bHksIGV2ZW4g dGhvc2Ugc2V0IHRvIGZpeGVkIHZhbHVlcyBkdXJpbmcgY29uZmlndXJhdGlv bi4NCitGb3IgZXhhbXBsZSwgY29uZmlndXJpbmcgd2l0aCBAc2FtcHstLWlu Zm9kaXI9L3Vzci9zaGFyZS9pbmZvfSBtYWtlcw0KK0Bjb2Rle2luZm9kaXJ9 IGluZGVwZW5kZW50IG9mIEBjb2Rle3ByZWZpeH0sIGJ1dCBpbnN0YWxsYXRp b24gd2l0aA0KK0BzYW1we0RFU1RESVI9QHZhcntwYXRoLXRvLXJvb3RkaXJ9 fSB3b3VsZCBjb3JyZWN0bHkgaW5zdGFsbCBpbmZvDQorZmlsZXMgaW50byBA ZmlsZXtAdmFye3BhdGgtdG8tcm9vdGRpcn0vdXNyL3NoYXJlL2luZm99LiAg Tm90ZSB0aGF0DQordGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgQGNvZGV7 REVTVERJUn0gbmVlZCBub3QgZXhpc3QgeWV0Ow0KK2l0IHdpbGwgYmUgY3Jl YXRlZCBpZiBuZWNlc3NhcnkuDQorDQorVGhlcmUgaXMgYSBzdWJ0bGUgcG9p bnQgd2l0aCB0b29sZGlycyBhbmQNCitAY29kZXtERVNURElSfTogSWYgeW91 IHJlbG9jYXRlIHRoZSBpbnN0YWxsYXRpb24gdG8NCitlLmcuQDogQHNhbXB7 REVTVERJUj1AdmFye3Jvb3RkaXJ9fSwgdGhlbiB0aGUgZGlyZWN0b3J5DQor QGZpbGV7QHZhcntyb290ZGlyfS9AdmFye2V4ZWMtcHJlZml4fS9AdmFye3Rh cmdldC1hbGlhc30vYmlufSB3aWxsDQorYmUgZmlsbGVkIHdpdGggZHVwbGlj YXRlZCBHQ0MgZXhlY3V0YWJsZXMgb25seSBpZiBpdCBhbHJlYWR5IGV4aXN0 cywNCitpdCB3aWxsIG5vdCBiZSBjcmVhdGVkIG90aGVyd2lzZS4gIFRoaXMg aXMgcmVnYXJkZWQgYXMgYSBmZWF0dXJlLA0KK25vdCBhcyBhIGJ1ZywgYmVj YXVzZSBpdCBnaXZlcyBzbGlnaHRseSBtb3JlIGNvbnRyb2wgdG8gdGhlIHBh Y2thZ2Vycw0KK3VzaW5nIHRoZSBAY29kZXtERVNURElSfSBmZWF0dXJlLg0K Kw0KIElmIHlvdSBidWlsdCBhIHJlbGVhc2VkIHZlcnNpb24gb2YgR0NDIHVz aW5nIEBzYW1we21ha2UgYm9vdHN0cmFwfSB0aGVuIHBsZWFzZQ0KIHF1aWNr bHkgcmV2aWV3IHRoZSBidWlsZCBzdGF0dXMgcGFnZSBmb3IgeW91ciByZWxl YXNlLCBhdmFpbGFibGUgZnJvbQ0KIEB1cmVme2h0dHA6Ly9nY2MuZ251Lm9y Zy9idWlsZHN0YXQuaHRtbH0uDQo= --8323584-62734452-1041452575=:11826 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir2-no-am.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir2-no-am.diff" SW5kZXg6IGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmluDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMv Y3ZzL2djYy1jdnMvZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxl LmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41OA0KZGlmZiAtdSAtcjEu NTggTWFrZWZpbGUuaW4NCi0tLSBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtl ZmlsZS5pbgkxNiBEZWMgMjAwMiAxOTowMTo1OCAtMDAwMAkxLjU4DQorKysg bGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuaW4JMSBKYW4gMjAwMyAx NzozMzo0MSAtMDAwMA0KQEAgLTY4OCwzMiArNjg4LDMyIEBADQogCSAgICAt ZSAncyxeI2luY2x1ZGUgIlwoLipcKSIsI2luY2x1ZGUgPGJpdHMvXDE+LGcn IFwNCiAJICAgIDwgJHt0b3BsZXZlbF9zcmNkaXJ9L2djYy8ke2dsaWJjcHBf dGhyZWFkX2h9ID4gJEANCiBpbnN0YWxsLWRhdGEtbG9jYWw6DQotCSQobWtp bnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9DQotCSQobWtpbnN0YWxs ZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19idWlsZGRpcn0NCisJ JChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9 DQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVf ZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7Yml0c19o ZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAk e2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9uZQ0KLQkk KG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJk X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERF U1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19idWlsZGRpcn07IGRv bmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7 YmFja3dhcmRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkg JCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRk aXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9k aXJ9LyR7ZXh0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtm aWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRf YnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRpcn0NCiAJZm9yIGZp bGUgaW4gJHtleHRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFU QSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1aWxkZGly fTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGly fS8ke2NfYmFzZV9idWlsZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJCR7 ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWls ZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtn eHhfaW5jbHVkZV9kaXJ9LyR7Y19iYXNlX2J1aWxkZGlyfQ0KIAlmb3IgZmls ZSBpbiAke2NfYmFzZV9oZWFkZXJzX3JlbmFtZX07IGRvIFwNCi0JICAkKElO U1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9LyQke2ZpbGV9ICR7Z3h4 X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAke2Nf YmFzZV9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn07IGRvbmUNCiAJY19iYXNlX2hl YWRlcnNfZXh0cmFfaW5zdGFsbD0nJChjX2Jhc2VfaGVhZGVyc19leHRyYSkn O1wNCiAJZm9yIGZpbGUgaW4gJCRjX2Jhc2VfaGVhZGVyc19leHRyYV9pbnN0 YWxsOyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAke2d4eF9p bmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9uZQ0KKwkgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQogCWNfY29tcGF0aWJpbGl0eV9o ZWFkZXJzX2luc3RhbGw9JyQoY19jb21wYXRpYmlsaXR5X2hlYWRlcnNfZXh0 cmEpJztcDQogCWZvciBmaWxlIGluICQkY19jb21wYXRpYmlsaXR5X2hlYWRl cnNfaW5zdGFsbDsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUg JHtneHhfaW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykg JHtneHhfaW5jbHVkZV9kaXJ9LyR7c3RkX2J1aWxkZGlyfQ0KKwkgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikke2d4eF9p bmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7 c3RkX2hlYWRlcnNfcmVuYW1lfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRB KSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9 OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9 LyR7dGFyZ2V0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAke3N0 ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVf ZGlyfS8ke3N0ZF9idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJz KSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxk ZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3RhcmdldF9oZWFkZXJzfSAke3Rhcmdl dF9oZWFkZXJzX2V4dHJhfSBcDQogCSAke3RocmVhZF90YXJnZXRfaGVhZGVy c307IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhf aW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsgZG9uZQ0KKwkgICQo SU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsgZG9uZQ0KIA0KICMgQnkgYWRk aW5nIHRoZXNlIGZpbGVzIGhlcmUsIGF1dG9tYWtlIHdpbGwgcmVtb3ZlIHRo ZW0gZm9yICdtYWtlIGNsZWFuJw0KICNDTEVBTkZJTEVTID0gJHthbGxzdGFt cHN9DQo= --8323584-62734452-1041452575=:11826 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir2-no-ag.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir2-no-ag.diff" SW5kZXg6IE1ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL01ha2Vm aWxlLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDMNCmRpZmYgLXUg LXIxLjE0MyBNYWtlZmlsZS5pbg0KLS0tIE1ha2VmaWxlLmluCTMxIERlYyAy MDAyIDIwOjEwOjUzIC0wMDAwCTEuMTQzDQorKysgTWFrZWZpbGUuaW4JMSBK YW4gMjAwMyAxNzoyNjozMyAtMDAwMA0KQEAgLTM4NSw2ICszODUsNyBAQA0K IAkiQ1hYRkxBR1M9JChDWFhGTEFHUykiIFwNCiAJIkNYWEZMQUdTX0ZPUl9U QVJHRVQ9JChDWFhGTEFHU19GT1JfVEFSR0VUKSIgXA0KIAkiQ1hYX0ZPUl9U QVJHRVQ9JChDWFhfRk9SX1RBUkdFVCkiIFwNCisJIkRFU1RESVI9JChERVNU RElSKSIgXA0KIAkiRExMVE9PTF9GT1JfVEFSR0VUPSQoRExMVE9PTF9GT1Jf VEFSR0VUKSIgXA0KIAkiSU5TVEFMTD0kKElOU1RBTEwpIiBcDQogCSJJTlNU QUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpIiBcDQpAQCAtMTA3Niw3ICsxMDc3 LDcgQEANCiBpbnN0YWxsLWluZm86IGRvLWluc3RhbGwtaW5mbyBkaXIuaW5m bw0KIAlzPWBjZCAkKHNyY2Rpcik7ICR7UFdEfWA7IGV4cG9ydCBzOyBcDQog CWlmIFsgLWYgZGlyLmluZm8gXSA7IHRoZW4gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSBkaXIuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvIDsgXA0KKwkgICQo SU5TVEFMTF9EQVRBKSBkaXIuaW5mbyAkKERFU1RESVIpJChpbmZvZGlyKS9k aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgZmkNCiANCiBsb2NhbC1jbGVh bjoNCkBAIC0xMjA3LDcgKzEyMDgsNyBAQA0KIA0KIGRpci5pbmZvOiBkby1p bnN0YWxsLWluZm8NCiAJaWYgWyAtZiAkKHNyY2RpcikvdGV4aW5mby9nZW4t aW5mby1kaXIgXSA7IHRoZW4gXA0KLQkgICQoc3JjZGlyKS90ZXhpbmZvL2dl bi1pbmZvLWRpciAkKGluZm9kaXIpICQoc3JjZGlyKS90ZXhpbmZvL2Rpci5p bmZvLXRlbXBsYXRlID4gZGlyLmluZm8ubmV3IDsgXA0KKwkgICQoc3JjZGly KS90ZXhpbmZvL2dlbi1pbmZvLWRpciAkKERFU1RESVIpJChpbmZvZGlyKSAk KHNyY2RpcikvdGV4aW5mby9kaXIuaW5mby10ZW1wbGF0ZSA+IGRpci5pbmZv Lm5ldyA7IFwNCiAJICBtdiAtZiBkaXIuaW5mby5uZXcgZGlyLmluZm8gOyBc DQogCWVsc2UgdHJ1ZSA7IFwNCiAJZmkNCg== --8323584-62734452-1041452575=:11826-- From gcc-patches-return-74865-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:26:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21655 invoked by alias); 1 Jan 2003 20:26:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21648 invoked from network); 1 Jan 2003 20:26:09 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 1 Jan 2003 20:26:09 -0000 Received: from localhost (IDENT:vuOB1LO0tCvHcneIeS9PouT9E1ahiCOm@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h01KPulU025849; Wed, 1 Jan 2003 15:25:56 -0500 Date: Wed, 01 Jan 2003 15:25:55 -0500 (EST) Message-Id: <20030101.152555.59669184.kazu@cs.umass.edu> To: neil@daikokuya.co.uk Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] h8300.c: Include cpplib.h. From: Kazu Hirata In-Reply-To: <20030101201406.GA1098@daikokuya.co.uk> References: <20030101.151019.48819726.kazu@cs.umass.edu> <20030101201123.GA1070@daikokuya.co.uk> <20030101201406.GA1098@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -7.3, Required: 5 X-Spam-Tests: IN_REP_TO,DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -7.3 hits, 5 required; SPAM: * -3.4 -- Found a In-Reply-To header SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi Neil, > In fact, the #ifdef should now be unnecessary; please scrap it too. Sure. Committed. Kazu Hirata 2003-01-01 Kazu Hirata * config/arm/arm-protos.h: Remove #ifdef GCC_C_PRAGMA_H. * config/h8300/h8300-protos.h: Likewise. * config/sh/sh-protos.h: Likewise. Index: arm/arm-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/arm-protos.h,v retrieving revision 1.39 diff -u -r1.39 arm-protos.h --- arm/arm-protos.h 1 Jan 2003 20:15:50 -0000 1.39 +++ arm/arm-protos.h 1 Jan 2003 20:18:19 -0000 @@ -210,10 +210,8 @@ enum machine_mode, int)); #endif -#ifdef GCC_C_PRAGMA_H /* included from code that cares about pragmas */ extern void arm_pr_long_calls PARAMS ((struct cpp_reader *)); extern void arm_pr_no_long_calls PARAMS ((struct cpp_reader *)); extern void arm_pr_long_calls_off PARAMS ((struct cpp_reader *)); -#endif #endif /* ! GCC_ARM_PROTOS_H */ Index: h8300/h8300-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300-protos.h,v retrieving revision 1.42 diff -u -r1.42 h8300-protos.h --- h8300/h8300-protos.h 1 Jan 2003 20:15:50 -0000 1.42 +++ h8300/h8300-protos.h 1 Jan 2003 20:18:19 -0000 @@ -91,9 +91,7 @@ extern void asm_file_end PARAMS ((FILE *)); extern int h8300_initial_elimination_offset PARAMS ((int, int)); -#ifdef GCC_C_PRAGMA_H extern void h8300_pr_interrupt PARAMS ((struct cpp_reader *)); extern void h8300_pr_saveall PARAMS ((struct cpp_reader *)); -#endif #endif /* ! GCC_H8300_PROTOS_H */ Index: sh/sh-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/sh/sh-protos.h,v retrieving revision 1.36 diff -u -r1.36 sh-protos.h --- sh/sh-protos.h 1 Jan 2003 20:15:51 -0000 1.36 +++ sh/sh-protos.h 1 Jan 2003 20:18:20 -0000 @@ -137,10 +137,8 @@ extern void fpscr_set_from_mem PARAMS ((int, HARD_REG_SET)); #endif -#ifdef GCC_C_PRAGMA_H extern void sh_pr_interrupt PARAMS ((struct cpp_reader *)); extern void sh_pr_trapa PARAMS ((struct cpp_reader *)); extern void sh_pr_nosave_low_regs PARAMS ((struct cpp_reader *)); -#endif #endif /* ! GCC_SH_PROTOS_H */ From gcc-patches-return-74866-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:30:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22594 invoked by alias); 1 Jan 2003 20:30:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22570 invoked from network); 1 Jan 2003 20:30:16 -0000 Received: from unknown (HELO mail.cdt.org) (206.112.85.61) by 209.249.29.67 with SMTP; 1 Jan 2003 20:30:16 -0000 Received: from dberlin.org (h-69-3-5-6.MCLNVA23.covad.net [69.3.5.6]) by mail.cdt.org (Postfix) with ESMTP id EF01A490189 for ; Wed, 1 Jan 2003 15:26:00 -0500 (EST) Received: from [192.168.1.2] (HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.0.3) with ESMTP-TLS id 2050711 for gcc-patches@gcc.gnu.org; Wed, 01 Jan 2003 15:30:03 -0500 Date: Wed, 1 Jan 2003 15:30:02 -0500 (EST) From: Daniel Berlin To: gcc-patches@gcc.gnu.org Subject: [PATCH]: Allocate bbs/edges using pool Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII 2002-12-30 Daniel Berlin * cfg.c: Include alloc-pool.h (edge_pool): New pool. (bb_pool): New pool. (first_deleted_edge): Remove. (first_deleted_block): Remove. (init_flow): Alloc/free the pools. (free_edge): Use pools. (alloc_block): Ditto. (expunge_block): Ditto. (cached_make_edge): Ditto. Index: cfg.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cfg.c,v retrieving revision 1.38 diff -u -3 -p -r1.38 cfg.c --- cfg.c 16 Dec 2002 18:19:06 -0000 1.38 +++ cfg.c 1 Jan 2003 20:27:16 -0000 @@ -57,12 +57,21 @@ Software Foundation, 59 Temple Place - S #include "toplev.h" #include "tm_p.h" #include "obstack.h" +#include "alloc-pool.h" /* The obstack on which the flow graph components are allocated. */ struct obstack flow_obstack; static char *flow_firstobj; +/* Basic block object pool. */ + +static alloc_pool bb_pool; + +/* Edge object pool. */ + +static alloc_pool edge_pool; + /* Number of basic blocks in the current function. */ int n_basic_blocks; @@ -75,11 +84,6 @@ int last_basic_block; int n_edges; -/* First edge in the deleted edges chain. */ - -edge first_deleted_edge; -static basic_block first_deleted_block; - /* The basic block array. */ varray_type basic_block_info; @@ -140,8 +144,6 @@ init_flow () { static int initialized; - first_deleted_edge = 0; - first_deleted_block = 0; n_edges = 0; if (!initialized) @@ -152,9 +154,15 @@ init_flow () } else { + free_alloc_pool (bb_pool); + free_alloc_pool (edge_pool); obstack_free (&flow_obstack, flow_firstobj); flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0); } + bb_pool = create_alloc_pool ("Basic block pool", + sizeof (struct basic_block_def), 100); + edge_pool = create_alloc_pool ("Edge pool", + sizeof (struct edge_def), 100); } /* Helper function for remove_edge and clear_edges. Frees edge structure @@ -165,9 +173,7 @@ free_edge (e) edge e; { n_edges--; - memset (e, 0, sizeof *e); - e->succ_next = first_deleted_edge; - first_deleted_edge = e; + pool_free (edge_pool, e); } /* Free the memory associated with the edge structures. */ @@ -216,18 +222,8 @@ basic_block alloc_block () { basic_block bb; - - if (first_deleted_block) - { - bb = first_deleted_block; - first_deleted_block = (basic_block) bb->succ; - bb->succ = NULL; - } - else - { - bb = (basic_block) obstack_alloc (&flow_obstack, sizeof *bb); - memset (bb, 0, sizeof *bb); - } + bb = pool_alloc (bb_pool); + memset (bb, 0, sizeof (*bb)); return bb; } @@ -272,7 +268,6 @@ compact_blocks () last_basic_block = n_basic_blocks; } - /* Remove block B from the basic block array. */ void @@ -282,12 +277,7 @@ expunge_block (b) unlink_block (b); BASIC_BLOCK (b->index) = NULL; n_basic_blocks--; - - /* Invalidate data to make bughunting easier. */ - memset (b, 0, sizeof *b); - b->index = -3; - b->succ = (edge) first_deleted_block; - first_deleted_block = (basic_block) b; + pool_free (bb_pool, b); } /* Create an edge connecting SRC and DST with FLAGS optionally using @@ -329,17 +319,10 @@ cached_make_edge (edge_cache, src, dst, } break; } - - if (first_deleted_edge) - { - e = first_deleted_edge; - first_deleted_edge = e->succ_next; - } - else - { - e = (edge) obstack_alloc (&flow_obstack, sizeof *e); - memset (e, 0, sizeof *e); - } + + + e = pool_alloc (edge_pool); + memset (e, 0, sizeof (*e)); n_edges++; e->succ_next = src->succ; From gcc-patches-return-74867-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:36:34 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23493 invoked by alias); 1 Jan 2003 20:36:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23472 invoked from network); 1 Jan 2003 20:36:26 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 1 Jan 2003 20:36:26 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01KaEk13825 for ; Wed, 1 Jan 2003 15:36:14 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18TpZi-0002ob-00 for ; Wed, 01 Jan 2003 15:34:50 -0500 Date: Wed, 1 Jan 2003 15:34:50 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/3009 Message-ID: <20030101203450.GA9784@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. + g++.dg/lookup/template1.C: New test. Index: g++.dg/lookup/template1.C =================================================================== RCS file: g++.dg/lookup/template1.C diff -N g++.dg/lookup/template1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/lookup/template1.C 1 Jan 2003 20:34:33 -0000 @@ -0,0 +1,23 @@ +/* PR c++/3009 */ +/* { dg-do run } */ +// According to 14.6.2.4 of C++ Standard: +// "If a base class is a dependent type, a member of that +// class cannot hide a name declared within a template, or a +// name from the template's enclosing scopes." + +class B { +public: + int foo() { return 1; } +}; + +int foo() { return 0; } + +template class C : public T { +public: + int caller() { return foo(); } // This must be ::foo, not B::foo. +}; + +int main() { + C c; + return c.caller(); // Returns 1 if we got the wrong one. +} From gcc-patches-return-74868-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 20:40:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25047 invoked by alias); 1 Jan 2003 20:40:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25037 invoked from network); 1 Jan 2003 20:40:10 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 1 Jan 2003 20:40:10 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18Tpdu-0000Km-00 for ; Wed, 01 Jan 2003 20:39:10 +0000 Date: Wed, 1 Jan 2003 20:39:10 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: Kill more out-of-band dependence on c-pragma.h Message-ID: <20030101203910.GA1261@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i Tested with cris target, applied. Neil. * config/darwin-protos.h, config/c4x/c4x-protos.h, config/cris/cris-protos.h, config/i370/i370-protos.h, config/i960/i960-protos.h, config/ia64/ia64-protos.h, config/v850/v850-protos.h: Use struct, and don't conditionally compile on GCC_C_PRAGMA_H. Index: config/darwin-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/darwin-protos.h,v retrieving revision 1.17 diff -u -p -r1.17 darwin-protos.h --- config/darwin-protos.h 29 Sep 2002 19:55:07 -0000 1.17 +++ config/darwin-protos.h 1 Jan 2003 20:34:52 -0000 @@ -72,11 +72,9 @@ extern void machopic_select_section PARA extern void machopic_select_rtx_section PARAMS ((enum machine_mode, rtx, unsigned HOST_WIDE_INT)); -#ifdef GCC_C_PRAGMA_H -extern void darwin_pragma_ignore PARAMS ((cpp_reader *)); -extern void darwin_pragma_options PARAMS ((cpp_reader *)); -extern void darwin_pragma_unused PARAMS ((cpp_reader *)); -#endif +extern void darwin_pragma_ignore PARAMS ((struct cpp_reader *)); +extern void darwin_pragma_options PARAMS ((struct cpp_reader *)); +extern void darwin_pragma_unused PARAMS ((struct cpp_reader *)); /* Expanded by EXTRA_SECTION_FUNCTIONS into varasm.o. */ extern void const_section PARAMS ((void)); Index: config/c4x/c4x-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/c4x/c4x-protos.h,v retrieving revision 1.28 diff -u -p -r1.28 c4x-protos.h --- config/c4x/c4x-protos.h 16 Jul 2002 02:16:35 -0000 1.28 +++ config/c4x/c4x-protos.h 1 Jan 2003 20:34:52 -0000 @@ -293,15 +293,13 @@ extern enum machine_mode c4x_caller_save extern int c4x_rpts_cycles; /* Max cycles for RPTS. */ extern int c4x_cpu_version; /* Cpu version C30/31/32/40/44. */ -#ifdef GCC_C_PRAGMA_H -extern void c4x_pr_CODE_SECTION PARAMS ((cpp_reader *)); -extern void c4x_pr_DATA_SECTION PARAMS ((cpp_reader *)); -extern void c4x_pr_FUNC_IS_PURE PARAMS ((cpp_reader *)); -extern void c4x_pr_FUNC_NEVER_RETURNS PARAMS ((cpp_reader *)); -extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *)); -extern void c4x_pr_ignored PARAMS ((cpp_reader *)); +extern void c4x_pr_CODE_SECTION PARAMS ((struct cpp_reader *)); +extern void c4x_pr_DATA_SECTION PARAMS ((struct cpp_reader *)); +extern void c4x_pr_FUNC_IS_PURE PARAMS ((struct cpp_reader *)); +extern void c4x_pr_FUNC_NEVER_RETURNS PARAMS ((struct cpp_reader *)); +extern void c4x_pr_INTERRUPT PARAMS ((struct cpp_reader *)); +extern void c4x_pr_ignored PARAMS ((struct cpp_reader *)); extern void c4x_init_pragma PARAMS ((int (*) (tree *))); -#endif extern GTY(()) tree code_tree; extern GTY(()) tree data_tree; Index: config/cris/cris-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/cris/cris-protos.h,v retrieving revision 1.5 diff -u -p -r1.5 cris-protos.h --- config/cris/cris-protos.h 20 Oct 2002 22:37:09 -0000 1.5 +++ config/cris/cris-protos.h 1 Jan 2003 20:34:52 -0000 @@ -52,9 +52,7 @@ extern rtx cris_expand_builtin_va_arg PA # endif #endif /* RTX_CODE */ -#ifdef GCC_C_PRAGMA_H -extern void cris_pragma_expand_mul PARAMS ((cpp_reader *)); -#endif +extern void cris_pragma_expand_mul PARAMS ((struct cpp_reader *)); /* Need one that returns an int; usable in expressions. */ extern int cris_fatal PARAMS ((char *)); Index: config/i370/i370-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i370/i370-protos.h,v retrieving revision 1.6 diff -u -p -r1.6 i370-protos.h --- config/i370/i370-protos.h 21 Sep 2002 16:10:33 -0000 1.6 +++ config/i370/i370-protos.h 1 Jan 2003 20:34:52 -0000 @@ -51,8 +51,6 @@ extern int mvs_check_alias PARAMS ((cons extern void check_label_emit PARAMS ((void)); extern void mvs_free_label_list PARAMS ((void)); -#ifdef GCC_C_PRAGMA_H -extern void i370_pr_map PARAMS ((cpp_reader *)); -#endif +extern void i370_pr_map PARAMS ((struct cpp_reader *)); #endif /* ! GCC_I370_PROTOS_H */ Index: config/i960/i960-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i960/i960-protos.h,v retrieving revision 1.10 diff -u -p -r1.10 i960-protos.h --- config/i960/i960-protos.h 20 Oct 2002 22:37:10 -0000 1.10 +++ config/i960/i960-protos.h 1 Jan 2003 20:34:52 -0000 @@ -98,9 +98,7 @@ extern int compute_frame_size PARAMS ((i extern void output_function_profiler PARAMS ((FILE *, int)); extern void i960_scan_opcode PARAMS ((const char *)); -#ifdef GCC_C_PRAGMA_H -extern void i960_pr_align PARAMS ((cpp_reader *)); -extern void i960_pr_noalign PARAMS ((cpp_reader *)); -#endif +extern void i960_pr_align PARAMS ((struct cpp_reader *)); +extern void i960_pr_noalign PARAMS ((struct cpp_reader *)); #endif /* ! GCC_I960_PROTOS_H */ Index: config/ia64/ia64-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64-protos.h,v retrieving revision 1.49 diff -u -p -r1.49 ia64-protos.h --- config/ia64/ia64-protos.h 20 Oct 2002 22:37:11 -0000 1.49 +++ config/ia64/ia64-protos.h 1 Jan 2003 20:34:52 -0000 @@ -145,8 +145,5 @@ extern void sbss_section PARAMS ((void)) extern enum direction ia64_hpux_function_arg_padding PARAMS ((enum machine_mode, tree)); #endif /* ARGS_SIZE_RTX */ -#ifdef GCC_C_PRAGMA_H -extern void ia64_hpux_handle_builtin_pragma PARAMS ((cpp_reader *)); -#endif - +extern void ia64_hpux_handle_builtin_pragma PARAMS ((struct cpp_reader *)); extern void ia64_hpux_asm_file_end PARAMS ((FILE *)); Index: config/v850/v850-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/v850/v850-protos.h,v retrieving revision 1.15 diff -u -p -r1.15 v850-protos.h --- config/v850/v850-protos.h 15 Sep 2002 20:44:01 -0000 1.15 +++ config/v850/v850-protos.h 1 Jan 2003 20:34:53 -0000 @@ -89,16 +89,14 @@ extern int function_arg_partial_nregs #endif #endif -#ifdef GCC_C_PRAGMA_H -extern void ghs_pragma_section PARAMS ((cpp_reader *)); -extern void ghs_pragma_interrupt PARAMS ((cpp_reader *)); -extern void ghs_pragma_starttda PARAMS ((cpp_reader *)); -extern void ghs_pragma_startsda PARAMS ((cpp_reader *)); -extern void ghs_pragma_startzda PARAMS ((cpp_reader *)); -extern void ghs_pragma_endtda PARAMS ((cpp_reader *)); -extern void ghs_pragma_endsda PARAMS ((cpp_reader *)); -extern void ghs_pragma_endzda PARAMS ((cpp_reader *)); -#endif +extern void ghs_pragma_section PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_interrupt PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_starttda PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_startsda PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_startzda PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_endtda PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_endsda PARAMS ((struct cpp_reader *)); +extern void ghs_pragma_endzda PARAMS ((struct cpp_reader *)); #undef Mmode From gcc-patches-return-74869-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 21:03:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2287 invoked by alias); 1 Jan 2003 21:03:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2280 invoked from network); 1 Jan 2003 21:03:27 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.169) by 209.249.29.67 with SMTP; 1 Jan 2003 21:03:27 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h01L3DF26970 for ; Wed, 1 Jan 2003 16:03:13 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Tpzs-000245-00 for ; Wed, 01 Jan 2003 16:01:52 -0500 Date: Wed, 1 Jan 2003 16:01:52 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/2743 Message-ID: <20030101210152.GA6512@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. + g++.dg/lookup/exception1.C: New test. Index: g++.dg/lookup/exception1.C =================================================================== RCS file: g++.dg/lookup/exception1.C diff -N g++.dg/lookup/exception1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/lookup/exception1.C 1 Jan 2003 21:01:16 -0000 @@ -0,0 +1,33 @@ +/* PR 2743 */ +/* {dg-do compile} */ + +namespace ns { + class Exception + { + }; +} + +namespace ns +{ + class Test { + public: + inline Test() throw( Exception ); + inline Test(int n ) throw( Exception ); + private: + int i; + }; +} + +// This line used to fail because Exception wasn't looked up in the +// right scope. +ns::Test::Test() throw( Exception ) : i( 1 ) +{ +} + +ns::Test::Test( int n ) throw( Exception ) : i( n ) +{ +} + +int main(int argc, char* argv) { + ns::Test test; +} From gcc-patches-return-74870-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 21:34:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15863 invoked by alias); 1 Jan 2003 21:34:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15850 invoked from network); 1 Jan 2003 21:34:07 -0000 Received: from unknown (HELO ns2.tudelft.nl) (130.161.180.65) by 209.249.29.67 with SMTP; 1 Jan 2003 21:34:07 -0000 Received: from CONVERSION-DAEMON.mailhost1.tudelft.nl by mailhost1.tudelft.nl (PMDF V6.1-1 #40924) id <0H820070118IBA@mailhost1.tudelft.nl> for gcc-patches@gcc.gnu.org; Wed, 01 Jan 2003 22:33:55 +0100 (MET) Received: from lr0nt3.lr.tudelft.nl (lr0nt3.lr.tudelft.nl [130.161.166.23]) by mailhost1.tudelft.nl (PMDF V6.1-1 #40924) with ESMTP id <0H8200KIC18I8N@mailhost1.tudelft.nl>; Wed, 01 Jan 2003 22:33:54 +0100 (MET) Received: by lr0nt3.lr.tudelft.nl with Internet Mail Service (5.5.2656.59) id ; Wed, 01 Jan 2003 22:34:38 +0100 Content-return: allowed Date: Wed, 01 Jan 2003 22:34:37 +0100 From: "S. Bosscher" Subject: RE: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. To: "'Joseph S. Myers '" , 'Steven Bosscher ' Cc: "'gcc-patches@gcc.gnu.org '" Message-id: <4195D82C2DB1D211B9910008C7C9B06F01F372F3@lr0nt3.lr.tudelft.nl> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Joseph S. Myers wrote: > On 1 Jan 2003, Steven Bosscher wrote: > > > # Top level -*- makefile -*- fragment for GNU Objective-C > > ! # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. > > In cases like this where 2002 isn't listed, you should check when adding > 2003 whether 2002 (and sometimes more intermediate years) had any > changes and so needs to be added; please check this for all files where > you added 2003 if they didn't have 2002. Well, wouldn't that be the responsibility for whoever changed these files in the years in between? I'm sorry, but I'm not going to do that. > (Also, if changing a program with a proper --version output including > copyright date, that needs updating to 2003 (only the most recent year > is given in the --version output). I don't know whether back end > changes require the driver's --version copyright date to be updated.) Hmmm... Didn't think about that one. If this patch goes in, I'll fix this in a separate patch. Greetz Steven From gcc-patches-return-74871-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 21:38:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17265 invoked by alias); 1 Jan 2003 21:38:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17258 invoked from network); 1 Jan 2003 21:38:17 -0000 Received: from unknown (HELO ns2.tudelft.nl) (130.161.180.65) by 209.249.29.67 with SMTP; 1 Jan 2003 21:38:17 -0000 Received: from CONVERSION-DAEMON.mailhost1.tudelft.nl by mailhost1.tudelft.nl (PMDF V6.1-1 #40924) id <0H82007011FGZS@mailhost1.tudelft.nl> for gcc-patches@gcc.gnu.org; Wed, 01 Jan 2003 22:38:05 +0100 (MET) Received: from lr0nt3.lr.tudelft.nl (lr0nt3.lr.tudelft.nl [130.161.166.23]) by mailhost1.tudelft.nl (PMDF V6.1-1 #40924) with ESMTP id <0H8200KJK1FG8N@mailhost1.tudelft.nl>; Wed, 01 Jan 2003 22:38:04 +0100 (MET) Received: by lr0nt3.lr.tudelft.nl with Internet Mail Service (5.5.2656.59) id ; Wed, 01 Jan 2003 22:38:49 +0100 Content-return: allowed Date: Wed, 01 Jan 2003 22:38:48 +0100 From: "S. Bosscher" Subject: RE: [Java Patch] Fix copyright headers for Java To: "'Joseph S. Myers '" , 'Steven Bosscher ' Cc: "'gcc-patches@gcc.gnu.org '" Message-id: <4195D82C2DB1D211B9910008C7C9B06F01F372F4@lr0nt3.lr.tudelft.nl> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Joseph S. Myers wrote: > On 1 Jan 2003, Steven Bosscher wrote: > > > the copyright years with 2003. I also changed some files to say "This > > file is part of GCC", that seemed like the right thing to do but I'm > > not sure about it. > > Once the "GNU CC" references have been dealt with, it might be worth > auditing the different versions of the licence notices that are used. > The standard GNU notice, as stated in > , would be (the line breaks and > indentation being insignificant): >From what I've seen so far, the files I touched all have at least this text, but the line breaks are probably different in many cases. I'll see if I can come up with a script to fix the breaks and indentations... Greetz Steven From gcc-patches-return-74872-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 21:45:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19383 invoked by alias); 1 Jan 2003 21:45:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19376 invoked from network); 1 Jan 2003 21:45:11 -0000 Received: from unknown (HELO gold.csi.cam.ac.uk) (131.111.8.12) by 209.249.29.67 with SMTP; 1 Jan 2003 21:45:11 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by gold.csi.cam.ac.uk with esmtp (Exim 4.10) id 18Tqfb-0000SZ-00; Wed, 01 Jan 2003 21:44:59 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18Tqfb-0005Tw-00; Wed, 01 Jan 2003 21:44:59 +0000 Date: Wed, 1 Jan 2003 21:44:56 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: "S. Bosscher" cc: "'gcc-patches@gcc.gnu.org '" Subject: RE: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. In-Reply-To: <4195D82C2DB1D211B9910008C7C9B06F01F372F3@lr0nt3.lr.tudelft.nl> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 1 Jan 2003, S. Bosscher wrote: > > In cases like this where 2002 isn't listed, you should check when adding > > 2003 whether 2002 (and sometimes more intermediate years) had any > > changes and so needs to be added; please check this for all files where > > you added 2003 if they didn't have 2002. > > Well, wouldn't that be the responsibility for whoever changed these files in > the years in between? I'm sorry, but I'm not going to do that. It's accepted practice when updating copyright notices (see e.g. the reminder sent two years ago ) that the action is to bring it up to date rather than just blindly to add the current year without regard to possible legal problems later. The time required to identify who forgot to add a previous year is the same as that needed to determine whether a previous year should have been added, and adding the year is quicker than filing a PR and assigning it to them. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74873-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 21:56:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26037 invoked by alias); 1 Jan 2003 21:56:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26030 invoked from network); 1 Jan 2003 21:56:15 -0000 Received: from unknown (HELO ns2.tudelft.nl) (130.161.180.65) by 209.249.29.67 with SMTP; 1 Jan 2003 21:56:15 -0000 Received: from CONVERSION-DAEMON.mailhost1.tudelft.nl by mailhost1.tudelft.nl (PMDF V6.1-1 #40924) id <0H8200C0129E1O@mailhost1.tudelft.nl> for gcc-patches@gcc.gnu.org; Wed, 01 Jan 2003 22:56:03 +0100 (MET) Received: from lr0nt3.lr.tudelft.nl (lr0nt3.lr.tudelft.nl [130.161.166.23]) by mailhost1.tudelft.nl (PMDF V6.1-1 #40924) with ESMTP id <0H8200A3Z29EW4@mailhost1.tudelft.nl>; Wed, 01 Jan 2003 22:56:02 +0100 (MET) Received: by lr0nt3.lr.tudelft.nl with Internet Mail Service (5.5.2656.59) id ; Wed, 01 Jan 2003 22:56:47 +0100 Content-return: allowed Date: Wed, 01 Jan 2003 22:56:46 +0100 From: "S. Bosscher" Subject: RE: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. To: "'Joseph S. Myers '" Cc: "''gcc-patches@gcc.gnu.org ' '" Message-id: <4195D82C2DB1D211B9910008C7C9B06F01F372F5@lr0nt3.lr.tudelft.nl> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 OK, so I'm doomed :-) The number of occurences of "GNU CC"s in the config/ directory is just *huge* (>500), and the copyrights in some of them are missing several years. But, I'll try... Greetz Steven -----Original Message----- From: Joseph S. Myers To: S. Bosscher Cc: 'gcc-patches@gcc.gnu.org ' Sent: 1-1-03 22:44 Subject: RE: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. On Wed, 1 Jan 2003, S. Bosscher wrote: > > In cases like this where 2002 isn't listed, you should check when adding > > 2003 whether 2002 (and sometimes more intermediate years) had any > > changes and so needs to be added; please check this for all files where > > you added 2003 if they didn't have 2002. > > Well, wouldn't that be the responsibility for whoever changed these files in > the years in between? I'm sorry, but I'm not going to do that. It's accepted practice when updating copyright notices (see e.g. the reminder sent two years ago ) that the action is to bring it up to date rather than just blindly to add the current year without regard to possible legal problems later. The time required to identify who forgot to add a previous year is the same as that needed to determine whether a previous year should have been added, and adding the year is quicker than filing a PR and assigning it to them. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74874-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 22:07:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31878 invoked by alias); 1 Jan 2003 22:07:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31854 invoked from network); 1 Jan 2003 22:07:24 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 1 Jan 2003 22:07:24 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18Tr16-0007EO-00; Wed, 01 Jan 2003 22:07:12 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18Tr16-0005xN-00; Wed, 01 Jan 2003 22:07:12 +0000 Date: Wed, 1 Jan 2003 22:07:09 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: "S. Bosscher" cc: "''gcc-patches@gcc.gnu.org ' '" Subject: RE: [Patch] Replace "GNU CC" with "GCC" in copyright headers for Obj-C. In-Reply-To: <4195D82C2DB1D211B9910008C7C9B06F01F372F5@lr0nt3.lr.tudelft.nl> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 1 Jan 2003, S. Bosscher wrote: > OK, so I'm doomed :-) > > The number of occurences of "GNU CC"s in the config/ directory is just > *huge* (>500), and the copyrights in some of them are missing several years. > But, I'll try... rsyncing the repository (or the parts you're working on) can be convenient for this sort of thing. (Grep the files for those missing 2002 - and then automatically examine the logs for whether they were changed (on mainline) since their last copyright date.) -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74875-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 00:19:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10652 invoked by alias); 2 Jan 2003 00:19:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10502 invoked from network); 2 Jan 2003 00:19:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 2 Jan 2003 00:19:11 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA01154; Wed, 1 Jan 2003 17:18:41 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id F3FAD4F8087; Wed, 1 Jan 2003 17:21:03 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: Classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Where's my SOCIAL WORKER? Date: 01 Jan 2003 17:21:03 -0700 Message-ID: <87adik4d1s.fsf@fleche.redhat.com> Lines: 90 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in; a classpath comparison after today's merge activity. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.59 diff -u -r1.59 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 31 Dec 2002 22:30:46 -0000 1.59 +++ libgcj-classpath-compare.html 2 Jan 2003 00:18:18 -0000 @@ -8,7 +8,7 @@

This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2002-12-31. +2003-01-01. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -18,45 +18,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -69,8 +32,6 @@ - - @@ -140,8 +101,6 @@ - - From gcc-patches-return-74876-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 00:52:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18636 invoked by alias); 2 Jan 2003 00:52:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18612 invoked from network); 2 Jan 2003 00:52:35 -0000 Received: from unknown (HELO smtp0.euronet.nl) (194.134.35.141) by 209.249.29.67 with SMTP; 2 Jan 2003 00:52:35 -0000 Received: from koffie.nl (rot2-p2360.dial.wanadoo.nl [194.134.139.56]) by smtp0.euronet.nl (Postfix) with ESMTP id C38C62465E; Thu, 2 Jan 2003 01:52:19 +0100 (MET) Message-ID: <3E138D45.7F5A0EC0@koffie.nl> Date: Thu, 02 Jan 2003 01:52:26 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: David Edelsohn , Richard Kenner Cc: gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <3E111A25.816F2D1E@koffie.nl> <200212310451.XAA23960@makai.watson.ibm.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit David Edelsohn wrote: > > The combine pass is called "combine" because it is predicated on > combining instructions and uses decreased instructions as the goal. Yes, I understand that. > If more optimal instruction sequences should be used, that needs to be > optimized by a different pass. Your bitfield+mfcr -> logic instruction > example might be appropriate as define_peephole2 patterns. Your load+mask > -> narrower load already should be handled correctly by other > optimizations or the combiner because it seem like it should decrease the > number of instructions. Well, all these optimizations are already there, in simplify-rtx.c etc., it's just that they never get done by the current combine, because it doesn't decrease the number of rtl insns _if looking through a very small (3 insn) window_. > If the code size is decreasing then the number of > instructions is decreasing, so maybe we need to add patterns transforming > three instructions into two instructions. That's a lot of different patterns; also, it's not only 3->2, but also 4->3 and I saw an 8->7, even. Richard Kenner wrote: > > Without it, lots of simplifications don't ever get applied. This results > in worse code. For example, with the patch applied, bootstrap time goes > down by a few percent (powerpc-unknown-linux-gnu), as well as code size. > > One common example is, without the patch, computations involving bitfields > use mfcr insns; with it, they use logic instructions. > > But that's not what combine is supposed to do! The purpose of combine > is what it's name says, to *combine* insns. Yes, but sometimes doing a 2->2 simplification will allow it to do a 2->1 simplification, or two 2->2 simplifications will allow a 3->2, or maybe some even longer chain. If combine is supposed to apply (recursively) all possible simplifications, it needs to do all canonicalizations that are in simplify-rtx and friends, or it will fail to do some simplifications because the simplification patterns assume their "sub patterns" (child nodes? nomenclature fails me) are already simplified. > If there is a simpler way to do an insn, it should be in the MD file. Most of these are not machine dependent. The mcrf thing just stuck out because I looked at GCC itself as an example of "normal" big code, which of course it is not (much too many bitfields). Segher From gcc-patches-return-74877-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 01:39:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 889 invoked by alias); 2 Jan 2003 01:39:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 881 invoked from network); 2 Jan 2003 01:39:00 -0000 Received: from unknown (HELO vlsi1.ultra.nyu.edu) (128.122.140.213) by 209.249.29.67 with SMTP; 2 Jan 2003 01:39:00 -0000 Received: by vlsi1.ultra.nyu.edu (4.1/1.34) id AA00392; Wed, 1 Jan 03 20:41:01 EST Date: Wed, 1 Jan 03 20:41:01 EST From: kenner@vlsi1.ultra.nyu.edu (Richard Kenner) Message-Id: <10301020141.AA00392@vlsi1.ultra.nyu.edu> To: segher@koffie.nl Subject: Re: rs6000 fused multiply-add patch [+ patchlet] Cc: gcc-patches@gcc.gnu.org Yes, but sometimes doing a 2->2 simplification will allow it to do a 2->1 simplification, or two 2->2 simplifications will allow a 3->2, or maybe some even longer chain. But that should get done when combining 3 insns, for example. From gcc-patches-return-74878-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 01:44:34 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2299 invoked by alias); 2 Jan 2003 01:44:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2292 invoked from network); 2 Jan 2003 01:44:33 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 2 Jan 2003 01:44:33 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h021i3e19835; Wed, 1 Jan 2003 17:44:03 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <3E111A25.816F2D1E@koffie.nl> <200212310451.XAA23960@makai.watson.ibm.com> <3E138D45.7F5A0EC0@koffie.nl> From: Geoff Keating Date: 01 Jan 2003 17:44:03 -0800 In-Reply-To: <3E138D45.7F5A0EC0@koffie.nl> Message-ID: Lines: 42 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Segher Boessenkool writes: > David Edelsohn wrote: > > > > The combine pass is called "combine" because it is predicated on > > combining instructions and uses decreased instructions as the goal. > > Yes, I understand that. > > > If more optimal instruction sequences should be used, that needs to be > > optimized by a different pass. Your bitfield+mfcr -> logic instruction > > example might be appropriate as define_peephole2 patterns. Your load+mask > > -> narrower load already should be handled correctly by other > > optimizations or the combiner because it seem like it should decrease the > > number of instructions. > > Well, all these optimizations are already there, in simplify-rtx.c etc., it's > just that they never get done by the current combine, because it doesn't > decrease the number of rtl insns _if looking through a very small (3 insn) > window_. What you usually do in this case is create a combination insn+splitter to give combine an appropriate intermediate result. If you could provide testcases/code samples for the cases you mention, it would be easier to see precisely what's going on. Often several iterations and many eyes are necessary to get the proper fix. It is also possible that some rearchitecting of combine might be necessary, but that's something that would require careful consideration and an examination of all the possible alternatives, not an ad-hoc patch to solve a specific problem. > > If the code size is decreasing then the number of > > instructions is decreasing, so maybe we need to add patterns transforming > > three instructions into two instructions. > > That's a lot of different patterns; also, it's not only 3->2, but also 4->3 > and I saw an 8->7, even. -- - Geoffrey Keating From gcc-patches-return-74879-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 02:20:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21442 invoked by alias); 2 Jan 2003 02:20:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21241 invoked from network); 2 Jan 2003 02:20:20 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 2 Jan 2003 02:20:20 -0000 Received: from localhost (IDENT:Ex5nd5u/pygCNdx/lGwtp8lcSylXVpcu@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h022K8lU026118 for ; Wed, 1 Jan 2003 21:20:08 -0500 Date: Wed, 01 Jan 2003 21:20:05 -0500 (EST) Message-Id: <20030101.212005.18593639.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.c: Fix a warning. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to fix a warning. Committed as obvious. Kazu Hirata 2003-01-01 Kazu Hirata * config/h8300/h8300.c (output_logical_op): Fix a warning. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.192 diff -u -r1.192 h8300.c --- h8300.c 1 Jan 2003 19:39:18 -0000 1.192 +++ h8300.c 2 Jan 2003 02:15:56 -0000 @@ -2203,8 +2203,7 @@ && code == AND && (det & 0xffff0000) == 0xff000000) { - sprintf (insn_buf, "extu.w\t%%e0", opname); - output_asm_insn (insn_buf, operands); + output_asm_insn ("extu.w\t%e0", operands); } else if (TARGET_H8300H || TARGET_H8300S) { From gcc-patches-return-74880-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 02:43:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9522 invoked by alias); 2 Jan 2003 02:43:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9515 invoked from network); 2 Jan 2003 02:43:20 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 2 Jan 2003 02:43:20 -0000 Received: from localhost (IDENT:Xc2zIWp0S6QQQ1p1gzH3Xfh4N3BYEMUp@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h022h8lU027678 for ; Wed, 1 Jan 2003 21:43:08 -0500 Date: Wed, 01 Jan 2003 21:43:05 -0500 (EST) Message-Id: <20030101.214305.45194736.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.md: Reorder some patters. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.9, Required: 5 X-Spam-Tests: DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -3.9 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to reorder some patterns for readability. Committed as obvious. Kazu Hirata 2003-01-01 Kazu Hirata * config/h8300/h8300.md: Reorder some patterns. Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.139 diff -u -r1.139 h8300.md --- h8300.md 31 Dec 2002 21:06:43 -0000 1.139 +++ h8300.md 2 Jan 2003 02:40:29 -0000 @@ -2409,6 +2409,26 @@ [(set_attr "cc" "clobber") (set_attr "length" "2")]) +(define_insn "*iorsi3_ashift_16" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") + (const_int 16)) + (match_operand:SI 2 "register_operand" "0")))] + "TARGET_H8300H || TARGET_H8300S" + "or.w\\t%f1,%e0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + +(define_insn "*iorsi3_two_hi" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "0")) + (ashift:SI (match_operand:SI 2 "register_operand" "r") + (const_int 16))))] + "TARGET_H8300H || TARGET_H8300S" + "mov.w\\t%f2,%e0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + ;; xor:HI (define_insn "*xorhi3_zextqi" @@ -2444,26 +2464,6 @@ && REG_P (operands[1]) && REGNO (operands[0]) != REGNO (operands[1])" "xor\\t%X1,%w0" - [(set_attr "cc" "clobber") - (set_attr "length" "2")]) - -(define_insn "*iorsi3_two_hi" - [(set (match_operand:SI 0 "register_operand" "=r") - (ior:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "0")) - (ashift:SI (match_operand:SI 2 "register_operand" "r") - (const_int 16))))] - "TARGET_H8300H || TARGET_H8300S" - "mov.w\\t%f2,%e0" - [(set_attr "cc" "clobber") - (set_attr "length" "2")]) - -(define_insn "*iorsi3_ashift_16" - [(set (match_operand:SI 0 "register_operand" "=r") - (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") - (const_int 16)) - (match_operand:SI 2 "register_operand" "0")))] - "TARGET_H8300H || TARGET_H8300S" - "or.w\\t%f1,%e0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) From gcc-patches-return-74881-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 03:32:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21296 invoked by alias); 2 Jan 2003 03:32:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21254 invoked from network); 2 Jan 2003 03:32:40 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 2 Jan 2003 03:32:40 -0000 Received: from koffie.nl (p3276.vwr.wanadoo.nl [212.129.224.212]) by smtp1.euronet.nl (Postfix) with ESMTP id 060696715F; Thu, 2 Jan 2003 04:31:51 +0100 (MET) Message-ID: <3E13914D.3250308A@koffie.nl> Date: Thu, 02 Jan 2003 02:09:37 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Jeroen van Bemmel Cc: Gerald Pfeifer , gcc-patches@gcc.gnu.org, Neil Booth , gcc-bugs@gcc.gnu.org Subject: Re: PATCH gnatsweb.pl wrt to optimization/9086: Missing attachmentfor #9085 References: <20021228215240.7043.qmail@sources.redhat.com> <20021228220152.GA12300@daikokuya.co.uk> <000701c2af68$9538c360$377c78d4@CC68271A> <3E110D7B.6BA56462@koffie.nl> <02e301c2b0c3$ea9d3dc0$377c78d4@CC68271A> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Jeroen van Bemmel wrote: > > > Bugzilla suffers from the same problem. Once your web browser changes > > from URL, it forgets about file attachments you set in a form (and all > > other values you set in the form), and rightfully so, because of > > security considerations (or at least it should!) > > Not all, but at least inputs of type 'file' and 'password'. The other fields > are remembers, for example I don't have to type 'description' all over again > when 'submit' detects a problem with my input All file attachments I know are put in a "file" field... ;) > Other than these, what other cases are there that cause 'submit' to fail ? Can be anything, like some timeout or whatever you can imagine. > > The third and easiest solution would be adding a field "number of > attachments" > > and having the server-side complain and the user rectify the problem > > if this number is inconsistent with the actual received attachments. A > simple > > flag "with attachments" might be enough, too. > > I recommend this solution, as it's probably the most robust, and quite > easy to > > implement, too. Sorry, no patch; I would have no way of testing it. > > Problem with this is that it becomes hard for the user to change his mind: > how can he > remove the attachement again? The attachement field appears empty, yet the > server complains since it has hidden state that the user cannot change. I didn't say the flag should be hidden -- a checkbox or something like that would probably do just fine. Segher From gcc-patches-return-74882-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 03:33:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22081 invoked by alias); 2 Jan 2003 03:33:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22070 invoked from network); 2 Jan 2003 03:33:11 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 2 Jan 2003 03:33:11 -0000 Received: from koffie.nl (p3276.vwr.wanadoo.nl [212.129.224.212]) by smtp1.euronet.nl (Postfix) with ESMTP id 7F6E867197; Thu, 2 Jan 2003 04:32:50 +0100 (MET) Message-ID: <3E139200.80EAA27B@koffie.nl> Date: Thu, 02 Jan 2003 02:12:37 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Aldy Hernandez Cc: gcc-patches@gcc.gnu.org Subject: Re: Some Altivec patches. References: <547ECEB2-1CC7-11D7-9D86-000393750C1E@redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Aldy Hernandez wrote: > > i don't see you in the MAINTAINERS file. i assume you want me to > commit this for you once approved (?). Yes please. I sent them to you because you are the Altivec maintainer. > however... could you please submit the patches individually? I sent them as separate attachments, but I can send separate mails if you prefer. Segher From gcc-patches-return-74883-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 07:57:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26412 invoked by alias); 2 Jan 2003 07:57:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26405 invoked from network); 2 Jan 2003 07:57:35 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 2 Jan 2003 07:57:35 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 4777D146C5; Thu, 2 Jan 2003 08:57:23 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18U0EE-0002xn-00; Thu, 02 Jan 2003 08:57:22 +0100 Mail-Copies-To: never To: Daniel Berlin Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH]: Allocate bbs/edges using pool From: Andreas Jaeger Date: Thu, 02 Jan 2003 08:57:22 +0100 In-Reply-To: (Daniel Berlin's message of "Wed, 1 Jan 2003 15:30:02 -0500 (EST)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Daniel, did you bootstrap and regtest the patch? On which platforms? Does it give any performance improvements? Daniel Berlin writes: > 2002-12-30 Daniel Berlin > > * cfg.c: Include alloc-pool.h > (edge_pool): New pool. > (bb_pool): New pool. > (first_deleted_edge): Remove. > (first_deleted_block): Remove. > (init_flow): Alloc/free the pools. > (free_edge): Use pools. > (alloc_block): Ditto. > (expunge_block): Ditto. > (cached_make_edge): Ditto. > [...] Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74884-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 10:31:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2498 invoked by alias); 2 Jan 2003 10:31:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2490 invoked from network); 2 Jan 2003 10:31:48 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 2 Jan 2003 10:31:48 -0000 Received: from [128.130.111.28] (naos [128.130.111.28]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h02AVXB5013325; Thu, 2 Jan 2003 11:31:35 +0100 (CET) Date: Thu, 2 Jan 2003 11:31:32 +0100 (CET) From: Gerald Pfeifer To: Steven Bosscher cc: Daniel Jacobowitz , gcc-patches@gcc.gnu.org Subject: Re: [PATCH] fix SSA passes documentation In-Reply-To: <1041349156.967.14.camel@steven> Message-ID: References: <1041343203.967.5.camel@steven> <1041349156.967.14.camel@steven> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Tue, 31 Dec 2002, Steven Bosscher wrote: > Tue Dec 31 Steven Bosscher > * doc/passes.texi: Fix documentation for -fssa-ccp I fixed the ChangeLog entry (by adding the missing blank line and changing the date -- you didn't include a year) 2003-01-02 Steven Bosscher * doc/passes.texi: Fix documentation for -fssa-ccp and committed the change. Thanks, Gerald -- Gerald "Jerry" pfeifer@dbai.tuwien.ac.at http://www.pfeifer.com/gerald/ From gcc-patches-return-74885-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 10:36:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4987 invoked by alias); 2 Jan 2003 10:36:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4969 invoked from network); 2 Jan 2003 10:36:26 -0000 Received: from unknown (HELO smtp4.wanadoo.nl) (194.134.35.175) by 209.249.29.67 with SMTP; 2 Jan 2003 10:36:26 -0000 Received: from steven.lr-s.tudelft.nl (3eea1aaf.cable.wanadoo.nl [62.234.26.175]) by smtp4.wanadoo.nl (Postfix) with ESMTP id D9B1F3E6C1; Thu, 2 Jan 2003 11:36:12 +0100 (CET) Subject: [Patch] Fix copyright dates From: Steven Bosscher To: "Joseph S. Myers" Cc: "'gcc-patches@gcc.gnu.org " ' In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 02 Jan 2003 11:37:12 +0100 Message-Id: <1041503832.759.7.camel@steven> Mime-Version: 1.0 Op wo 01-01-2003, om 22:44 schreef Joseph S. Myers: > On Wed, 1 Jan 2003, S. Bosscher wrote: > > > > In cases like this where 2002 isn't listed, you should check when adding > > > 2003 whether 2002 (and sometimes more intermediate years) had any > > > changes and so needs to be added; please check this for all files where > > > you added 2003 if they didn't have 2002. > > > > Well, wouldn't that be the responsibility for whoever changed these files in > > the years in between? I'm sorry, but I'm not going to do that. > > It's accepted practice when updating copyright notices (see e.g. the > reminder sent two years ago > ) that the action is to > bring it up to date rather than just blindly to add the current year > without regard to possible legal problems later. The time required to > identify who forgot to add a previous year is the same as that needed to > determine whether a previous year should have been added, and adding the > year is quicker than filing a PR and assigning it to them. > > -- > Joseph S. Myers > jsm28@cam.ac.uk Here you go, again comment only. Let the lawyers come! :-) Greetz Steven 2003-01-02 Steven Bosscher * cp/except.c, cp/expr.c, cp/friend.c, cp/g++spec.c, cp/lang-options.h, cp/lang-specs.h, cp/lex.h, cp/ptree.c, cp/repo.c, java/jcf-reader.c, java/jvgenmain.c, java/keyword.gperf, java/lang-options.h, java/mangle.c, java/mangle_name.c, java/xref.c, java/zextract.c,java/zipfile.h, objc/Make-lang.in, objc/config-lang.in, objc/lang-specs.h, objc/objc-act.h: Fix Copyright years. Index: gcc/cp/except.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/except.c,v retrieving revision 1.151 diff -c -r1.151 except.c *** gcc/cp/except.c 1 Jan 2003 11:58:57 -0000 1.151 --- gcc/cp/except.c 2 Jan 2003 10:17:14 -0000 *************** *** 1,6 **** /* Handle exceptional things in C++. Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann Rewritten by Mike Stump , based upon an initial re-implementation courtesy Tad Hunt. --- 1,6 ---- /* Handle exceptional things in C++. Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Tiemann Rewritten by Mike Stump , based upon an initial re-implementation courtesy Tad Hunt. Index: gcc/cp/expr.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/expr.c,v retrieving revision 1.69 diff -c -r1.69 expr.c *** gcc/cp/expr.c 1 Jan 2003 11:58:57 -0000 1.69 --- gcc/cp/expr.c 2 Jan 2003 10:17:14 -0000 *************** *** 1,7 **** /* Convert language-specific tree expression to rtl instructions, for GNU compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 2000, 2001 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /* Convert language-specific tree expression to rtl instructions, for GNU compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/cp/friend.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/friend.c,v retrieving revision 1.80 diff -c -r1.80 friend.c *** gcc/cp/friend.c 1 Jan 2003 11:58:57 -0000 1.80 --- gcc/cp/friend.c 2 Jan 2003 10:17:15 -0000 *************** *** 1,5 **** /* Help friends in C++. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Help friends in C++. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 ! Free Software Foundation, Inc. This file is part of GCC. Index: gcc/cp/g++spec.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/g++spec.c,v retrieving revision 1.33 diff -c -r1.33 g++spec.c *** gcc/cp/g++spec.c 1 Jan 2003 11:58:57 -0000 1.33 --- gcc/cp/g++spec.c 2 Jan 2003 10:17:16 -0000 *************** *** 1,5 **** /* Specific flags and argument handling of the C++ front-end. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Specific flags and argument handling of the C++ front-end. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 ! Free Software Foundation, Inc. This file is part of GCC. Index: gcc/cp/lang-options.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lang-options.h,v retrieving revision 1.44 diff -c -r1.44 lang-options.h *** gcc/cp/lang-options.h 1 Jan 2003 11:58:58 -0000 1.44 --- gcc/cp/lang-options.h 2 Jan 2003 10:17:16 -0000 *************** *** 1,6 **** /* Definitions for switches for C++. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 ! Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Definitions for switches for C++. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/cp/lang-specs.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lang-specs.h,v retrieving revision 1.55 diff -c -r1.55 lang-specs.h *** gcc/cp/lang-specs.h 1 Jan 2003 11:58:58 -0000 1.55 --- gcc/cp/lang-specs.h 2 Jan 2003 10:17:16 -0000 *************** *** 1,6 **** /* Definitions for specs for C++. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Definitions for specs for C++. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/cp/lex.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/lex.h,v retrieving revision 1.20 diff -c -r1.20 lex.h *** gcc/cp/lex.h 1 Jan 2003 11:58:58 -0000 1.20 --- gcc/cp/lex.h 2 Jan 2003 10:17:16 -0000 *************** *** 1,6 **** /* Define constants and variables for communication with the parser. Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 2000 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) and by Brendan Kehoe (brendan@cygnus.com). --- 1,6 ---- /* Define constants and variables for communication with the parser. Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) and by Brendan Kehoe (brendan@cygnus.com). Index: gcc/cp/ptree.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/ptree.c,v retrieving revision 1.31 diff -c -r1.31 ptree.c *** gcc/cp/ptree.c 1 Jan 2003 11:58:58 -0000 1.31 --- gcc/cp/ptree.c 2 Jan 2003 10:17:16 -0000 *************** *** 1,6 **** /* Prints out trees in human readable form. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, ! 1999 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GCC. --- 1,6 ---- /* Prints out trees in human readable form. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, ! 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GCC. Index: gcc/cp/repo.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/cp/repo.c,v retrieving revision 1.45 diff -c -r1.45 repo.c *** gcc/cp/repo.c 1 Jan 2003 11:58:58 -0000 1.45 --- gcc/cp/repo.c 2 Jan 2003 10:17:17 -0000 *************** *** 1,5 **** /* Code to maintain a C++ template repository. ! Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com) This file is part of GCC. --- 1,6 ---- /* Code to maintain a C++ template repository. ! Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003 ! Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com) This file is part of GCC. Index: gcc/java/jcf-reader.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf-reader.c,v retrieving revision 1.17 diff -c -r1.17 jcf-reader.c *** gcc/java/jcf-reader.c 1 Jan 2003 15:10:01 -0000 1.17 --- gcc/java/jcf-reader.c 2 Jan 2003 10:17:21 -0000 *************** *** 1,7 **** /* This file read a Java(TM) .class file. It is not stand-alone: It depends on tons of macros, and the intent is you #include this file after you've defined the macros. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /* This file read a Java(TM) .class file. It is not stand-alone: It depends on tons of macros, and the intent is you #include this file after you've defined the macros. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/java/jvgenmain.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jvgenmain.c,v retrieving revision 1.30 diff -c -r1.30 jvgenmain.c *** gcc/java/jvgenmain.c 1 Jan 2003 15:10:01 -0000 1.30 --- gcc/java/jvgenmain.c 2 Jan 2003 10:17:22 -0000 *************** *** 1,5 **** /* Program to generate "main" a Java(TM) class containing a main method. ! Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Program to generate "main" a Java(TM) class containing a main method. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ! Free Software Foundation, Inc. This file is part of GCC. Index: gcc/java/keyword.gperf =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/keyword.gperf,v retrieving revision 1.9 diff -c -r1.9 keyword.gperf *** gcc/java/keyword.gperf 1 Jan 2003 15:10:01 -0000 1.9 --- gcc/java/keyword.gperf 2 Jan 2003 10:17:22 -0000 *************** *** 1,6 **** %{ /* Keyword definition for the GNU compiler for the Java(TM) language. ! Copyright (C) 1997, 1998, 2003 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GCC. --- 1,7 ---- %{ /* Keyword definition for the GNU compiler for the Java(TM) language. ! Copyright (C) 1997, 1998, 2001, 2002, 2003 ! Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GCC. Index: gcc/java/lang-options.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/lang-options.h,v retrieving revision 1.32 diff -c -r1.32 lang-options.h *** gcc/java/lang-options.h 1 Jan 2003 15:10:01 -0000 1.32 --- gcc/java/lang-options.h 2 Jan 2003 10:17:22 -0000 *************** *** 1,5 **** /* Switch definitions for the GNU compiler for the Java(TM) language. ! Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,5 ---- /* Switch definitions for the GNU compiler for the Java(TM) language. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/java/mangle.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/mangle.c,v retrieving revision 1.25 diff -c -r1.25 mangle.c *** gcc/java/mangle.c 1 Jan 2003 15:10:02 -0000 1.25 --- gcc/java/mangle.c 2 Jan 2003 10:17:23 -0000 *************** *** 1,6 **** /* Functions related to mangling class names for the GNU compiler for the Java(TM) language. ! Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /* Functions related to mangling class names for the GNU compiler for the Java(TM) language. ! Copyright (C) 1998, 1999, 2001, 2002, 2003 ! Free Software Foundation, Inc. This file is part of GCC. Index: gcc/java/mangle_name.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/mangle_name.c,v retrieving revision 1.7 diff -c -r1.7 mangle_name.c *** gcc/java/mangle_name.c 1 Jan 2003 15:10:02 -0000 1.7 --- gcc/java/mangle_name.c 2 Jan 2003 10:17:23 -0000 *************** *** 1,6 **** /* Shared functions related to mangling names for the GNU compiler for the Java(TM) language. ! Copyright (C) 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Shared functions related to mangling names for the GNU compiler for the Java(TM) language. ! Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/java/xref.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/xref.c,v retrieving revision 1.12 diff -c -r1.12 xref.c *** gcc/java/xref.c 1 Jan 2003 15:10:03 -0000 1.12 --- gcc/java/xref.c 2 Jan 2003 10:17:23 -0000 *************** *** 1,6 **** /* Write cross reference information extracted from Java(TM) source and bytecode files, in one of formats documented below. ! Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GCC. --- 1,6 ---- /* Write cross reference information extracted from Java(TM) source and bytecode files, in one of formats documented below. ! Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GCC. Index: gcc/java/zextract.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/zextract.c,v retrieving revision 1.14 diff -c -r1.14 zextract.c *** gcc/java/zextract.c 1 Jan 2003 15:10:03 -0000 1.14 --- gcc/java/zextract.c 2 Jan 2003 10:17:24 -0000 *************** *** 1,7 **** /* Handle a .class file embedded in a .zip archive. This extracts a member from a .zip file, but does not handle uncompression (since that is not needed for classes.zip). ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /* Handle a .class file embedded in a .zip archive. This extracts a member from a .zip file, but does not handle uncompression (since that is not needed for classes.zip). ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/java/zipfile.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/zipfile.h,v retrieving revision 1.14 diff -c -r1.14 zipfile.h *** gcc/java/zipfile.h 1 Jan 2003 15:10:03 -0000 1.14 --- gcc/java/zipfile.h 2 Jan 2003 10:17:24 -0000 *************** *** 1,5 **** /* Definitions for using a zipped' archive. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,5 ---- /* Definitions for using a zipped' archive. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. Index: gcc/objc/Make-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/Make-lang.in,v retrieving revision 1.51 diff -c -r1.51 Make-lang.in *** gcc/objc/Make-lang.in 1 Jan 2003 12:49:13 -0000 1.51 --- gcc/objc/Make-lang.in 2 Jan 2003 10:17:25 -0000 *************** *** 1,5 **** # Top level -*- makefile -*- fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc. #This file is part of GCC. --- 1,6 ---- # Top level -*- makefile -*- fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003 ! # Free Software Foundation, Inc. #This file is part of GCC. Index: gcc/objc/config-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/config-lang.in,v retrieving revision 1.9 diff -c -r1.9 config-lang.in *** gcc/objc/config-lang.in 1 Jan 2003 12:49:13 -0000 1.9 --- gcc/objc/config-lang.in 2 Jan 2003 10:17:25 -0000 *************** *** 1,5 **** # Top level configure fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc. #This file is part of GCC. --- 1,6 ---- # Top level configure fragment for GNU Objective-C ! # Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003 ! # Free Software Foundation, Inc. #This file is part of GCC. Index: gcc/objc/lang-specs.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/lang-specs.h,v retrieving revision 1.27 diff -c -r1.27 lang-specs.h *** gcc/objc/lang-specs.h 1 Jan 2003 12:49:14 -0000 1.27 --- gcc/objc/lang-specs.h 2 Jan 2003 10:17:25 -0000 *************** *** 1,5 **** /* Definitions for specs for Objective-C. ! Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Definitions for specs for Objective-C. ! Copyright (C) 1998, 1999, 2002, 2002, 2003 ! Free Software Foundation, Inc. This file is part of GCC. Index: gcc/objc/objc-act.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/objc/objc-act.h,v retrieving revision 1.14 diff -c -r1.14 objc-act.h *** gcc/objc/objc-act.h 1 Jan 2003 12:49:14 -0000 1.14 --- gcc/objc/objc-act.h 2 Jan 2003 10:17:26 -0000 *************** *** 1,5 **** /* Declarations for objc-act.c. ! Copyright (C) 1990, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GCC. --- 1,6 ---- /* Declarations for objc-act.c. ! Copyright (C) 1990, 2000, 2001, 2002, 2003 ! Free Software Foundation, Inc. This file is part of GCC. From gcc-patches-return-74886-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 11:04:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13755 invoked by alias); 2 Jan 2003 11:04:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13747 invoked from network); 2 Jan 2003 11:04:54 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 2 Jan 2003 11:04:54 -0000 Received: from [128.130.111.28] (naos [128.130.111.28]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h02B48B5014275; Thu, 2 Jan 2003 12:04:09 +0100 (CET) Date: Thu, 2 Jan 2003 12:04:07 +0100 (CET) From: Gerald Pfeifer To: "Joseph S. Myers" cc: gcc-patches@gcc.gnu.org Subject: Re: PATCH for Re: installation instructions; glitchlet In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Tue, 31 Dec 2002, Joseph S. Myers wrote: >> +@command{gcc/config.gcc} script for a complete list of supported models. > This should be @file, not @command. Why? Because it is a program (command) that is only invoked by other programs, not by a user? Or because the user won't execute it, but read its source? (http://www.gnu.org/manual/texinfo/html_node/command.html#command doesn't have much on that.) Gerald -- Gerald "Jerry" pfeifer@dbai.tuwien.ac.at http://www.pfeifer.com/gerald/ From gcc-patches-return-74887-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 11:14:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16555 invoked by alias); 2 Jan 2003 11:14:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16548 invoked from network); 2 Jan 2003 11:14:54 -0000 Received: from unknown (HELO brown.csi.cam.ac.uk) (131.111.8.14) by 209.249.29.67 with SMTP; 2 Jan 2003 11:14:54 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by brown.csi.cam.ac.uk with esmtp (Exim 4.10) id 18U3JC-00084M-00; Thu, 02 Jan 2003 11:14:42 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18U3JC-0004Tl-00; Thu, 02 Jan 2003 11:14:42 +0000 Date: Thu, 2 Jan 2003 11:14:39 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Gerald Pfeifer cc: Subject: Re: PATCH for Re: installation instructions; glitchlet In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 2 Jan 2003, Gerald Pfeifer wrote: > On Tue, 31 Dec 2002, Joseph S. Myers wrote: > >> +@command{gcc/config.gcc} script for a complete list of supported models. > > This should be @file, not @command. > > Why? Because it is a program (command) that is only invoked by other > programs, not by a user? Or because the user won't execute it, but read > its source? The user only reads its source; the reference is only to reading its source. But config.gcc is never executed as a command at all even by other programs; it's a program _fragment_ sourced multiple times from within configure. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-74888-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 11:39:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21054 invoked by alias); 2 Jan 2003 11:39:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21013 invoked from network); 2 Jan 2003 11:39:02 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 2 Jan 2003 11:39:02 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 826A214454; Thu, 2 Jan 2003 12:38:50 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18U3gX-0002k0-00; Thu, 02 Jan 2003 12:38:49 +0100 Mail-Copies-To: never To: Steven Bosscher Cc: "Joseph S. Myers" , "'gcc-patches@gcc.gnu.org " ' Subject: Re: [Patch] Fix copyright dates References: <1041503832.759.7.camel@steven> From: Andreas Jaeger Date: Thu, 02 Jan 2003 12:38:48 +0100 In-Reply-To: <1041503832.759.7.camel@steven> (Steven Bosscher's message of "02 Jan 2003 11:37:12 +0100") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Steven Bosscher writes: > Op wo 01-01-2003, om 22:44 schreef Joseph S. Myers: >> On Wed, 1 Jan 2003, S. Bosscher wrote: >> >> > > In cases like this where 2002 isn't listed, you should check when adding >> > > 2003 whether 2002 (and sometimes more intermediate years) had any >> > > changes and so needs to be added; please check this for all files where >> > > you added 2003 if they didn't have 2002. >> > >> > Well, wouldn't that be the responsibility for whoever changed these files in >> > the years in between? I'm sorry, but I'm not going to do that. >> >> It's accepted practice when updating copyright notices (see e.g. the >> reminder sent two years ago >> ) that the action is to >> bring it up to date rather than just blindly to add the current year >> without regard to possible legal problems later. The time required to >> identify who forgot to add a previous year is the same as that needed to >> determine whether a previous year should have been added, and adding the >> year is quicker than filing a PR and assigning it to them. >> >> -- >> Joseph S. Myers >> jsm28@cam.ac.uk > > Here you go, again comment only. Let the lawyers come! :-) > Greetz > Steven > > > 2003-01-02 Steven Bosscher > > * cp/except.c, cp/expr.c, cp/friend.c, cp/g++spec.c, > cp/lang-options.h, cp/lang-specs.h, cp/lex.h, > cp/ptree.c, cp/repo.c, > java/jcf-reader.c, java/jvgenmain.c, > java/keyword.gperf, java/lang-options.h, > java/mangle.c, java/mangle_name.c, > java/xref.c, java/zextract.c,java/zipfile.h, > objc/Make-lang.in, objc/config-lang.in, > objc/lang-specs.h, objc/objc-act.h: Fix > Copyright years. Committed - after splitting up the ChangeLog entry to the correct subdirs. Thanks, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74889-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 12:41:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8964 invoked by alias); 2 Jan 2003 12:41:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8948 invoked from network); 2 Jan 2003 12:41:17 -0000 Received: from unknown (HELO atrey.karlin.mff.cuni.cz) (195.113.31.123) by 209.249.29.67 with SMTP; 2 Jan 2003 12:41:17 -0000 Received: by atrey.karlin.mff.cuni.cz (Postfix, from userid 4018) id D9FCE4F939; Thu, 2 Jan 2003 13:41:04 +0100 (CET) Date: Thu, 2 Jan 2003 13:41:04 +0100 From: Jan Hubicka To: Mark Mitchell Cc: gcc-patches@gcc.gnu.org Subject: Re: C++ PATCH: Parser speedup Message-ID: <20030102124104.GA21462@atrey.karlin.mff.cuni.cz> References: <200212310005.gBV05Nw13393@gandalf.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200212310005.gBV05Nw13393@gandalf.codesourcery.com> User-Agent: Mutt/1.3.28i > > This patch gets me about 17% on Paolo's first test case. > > Tested on i686-pc-linux-gnu, applied on the mainline. It seems to fix 70% of the eon regression too. Thanks! Honza From gcc-patches-return-74890-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 13:15:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17412 invoked by alias); 2 Jan 2003 13:15:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17355 invoked from network); 2 Jan 2003 13:14:50 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 2 Jan 2003 13:14:50 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h02ClOB27596; Thu, 2 Jan 2003 07:47:24 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h02DEca31637; Thu, 2 Jan 2003 08:14:38 -0500 Received: from redhat.com (vpn50-24.rdu.redhat.com [172.16.50.24]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h02DEcL20549; Thu, 2 Jan 2003 08:14:38 -0500 Date: Thu, 2 Jan 2003 09:14:37 -0400 Subject: Re: Some Altivec patches. Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: gcc-patches@gcc.gnu.org To: Segher Boessenkool From: Aldy Hernandez In-Reply-To: <3E139200.80EAA27B@koffie.nl> Message-Id: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> Content-Transfer-Encoding: 7bit > >> however... could you please submit the patches individually? > > I sent them as separate attachments, but I can send separate mails > if you prefer. separate mails with separate explanations. it makes them easier to approve. lazy me. > > > Segher > > From gcc-patches-return-74891-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 13:24:53 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22469 invoked by alias); 2 Jan 2003 13:24:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22457 invoked from network); 2 Jan 2003 13:24:46 -0000 Received: from unknown (HELO mta3.srv.hcvlny.cv.net) (167.206.5.9) by 209.249.29.67 with SMTP; 2 Jan 2003 13:24:46 -0000 Received: from asv8.srv.hcvlny.cv.net (asv8.srv.hcvlny.cv.net [167.206.5.47]) by mta3.srv.hcvlny.cv.net (iPlanet Messaging Server 5.2 HotFix 1.05 (built Nov 6 2002)) with ESMTP id <0H8300G8D98OQP@mta3.srv.hcvlny.cv.net> for gcc-patches@gcc.gnu.org; Thu, 02 Jan 2003 08:24:24 -0500 (EST) Received: from mta9.srv.hcvlny.cv.net (mta9.srv.hcvlny.cv.net [167.206.5.133]) by asv8.srv.hcvlny.cv.net (8.12.6/8.11.6) with ESMTP id h02DOItA002247 for ; Thu, 02 Jan 2003 08:24:19 -0500 (EST) Received: from dragon.optonline.net (ool-182c98bf.dyn.optonline.net [24.44.152.191]) by mta9.srv.hcvlny.cv.net (iPlanet Messaging Server 5.2 HotFix 1.05 (built Nov 6 2002)) with ESMTP id <0H83006RA97VWM@mta9.srv.hcvlny.cv.net> for gcc-patches@gcc.gnu.org; Thu, 02 Jan 2003 08:23:55 -0500 (EST) Received: from jlquinn by dragon.optonline.net with local (Exim 3.36 #1 (Debian)) id 18U5Kn-0002jt-00; Thu, 02 Jan 2003 08:24:29 -0500 Date: Thu, 02 Jan 2003 08:24:29 -0500 From: Jerry Quinn Subject: Re: [PATCH] Optimization docs part 3 In-reply-to: To: Gerald Pfeifer Cc: gcc-patches@gcc.gnu.org Message-id: <15892.15757.411274.126002@dragon.optonline.net> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT References: <15889.43774.302910.988834@dragon.optonline.net> Gerald Pfeifer writes: > On Tue, 31 Dec 2002, Jerry Quinn wrote: > > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00859.html > > For -Os, Geoff had noted > > Should this also say something like "This enables the following > optimisation flags" (plus a list of the flags)? > > but the patch hasn't changed. (The new documentation is still better > than the previous one, so I committed the patch anyway.) I had thought that it was clearer and easier to maintain, since -Os is so similar to -O2 at the flag level. Do you think an explicit list would be better? > > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00860.html > > Has this been reviewed by Geoff or someone else more familiar with > the options than me as well? It turns out there was some discussion about it (see http://gcc.gnu.org/ml/gcc-patches/2002-08/msg01778.html), but it wasn't approved at the time. The issue was a list of platforms for -fomit-frame-pointer. I removed the list from the revised patch to avoid the issue. > I'm happy to actually apply these patches or review and apply simpler > ones, but someone like Geoff should better review the more substantial > ones. > > > ps: parts 4 and 5 are > > > > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00866.html > > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00867.html > > Part 5 is now also installed on mainline and the > 3.3-branch. Thanks! Great! So I still need Geoff or equivalent to look at these two, right? http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00860.html http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00866.html I appreciate your getting these patches applied. Jerry From gcc-patches-return-74892-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 15:06:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3600 invoked by alias); 2 Jan 2003 15:06:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3578 invoked from network); 2 Jan 2003 15:05:59 -0000 Received: from unknown (HELO mail.cdt.org) (206.112.85.61) by 209.249.29.67 with SMTP; 2 Jan 2003 15:05:59 -0000 Received: from dberlin.org (h-69-3-5-6.MCLNVA23.covad.net [69.3.5.6]) by mail.cdt.org (Postfix) with ESMTP id 4E7C74900E8; Thu, 2 Jan 2003 10:01:40 -0500 (EST) Received: from [192.168.1.2] (HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.0.3) with ESMTP-TLS id 2080668; Thu, 02 Jan 2003 10:05:46 -0500 Date: Thu, 2 Jan 2003 10:05:45 -0500 (EST) From: Daniel Berlin To: Andreas Jaeger Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH]: Allocate bbs/edges using pool In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 2 Jan 2003, Andreas Jaeger wrote: > > Daniel, > > did you bootstrap and regtest the patch? Yes, on i686-pc-linux-gnu and powerpc-apple-darwin6.3 >On which platforms? Does it > give any performance improvements? Yes, it improves performance between 1 and 10%, depending on platform, on testcases i have with more than 1000 bb's. The et-forest patch I submitted weeks ago does more, improving performance 10-15% on testcases i have that consist of mainly generated code (IE where you end up with dominator computation being 10-20 seconds, it's now 10, rather than 20). Even if it gave 0% performance improvement (and no performance loss), it still removes a lot of ad-hoc code in favor of a standardized interface, and removes usage of the flow_obstack. > > Daniel Berlin writes: > > > 2002-12-30 Daniel Berlin > > > > * cfg.c: Include alloc-pool.h > > (edge_pool): New pool. > > (bb_pool): New pool. > > (first_deleted_edge): Remove. > > (first_deleted_block): Remove. > > (init_flow): Alloc/free the pools. > > (free_edge): Use pools. > > (alloc_block): Ditto. > > (expunge_block): Ditto. > > (cached_make_edge): Ditto. > > [...] > > Andreas > -- > Andreas Jaeger > SuSE Labs aj@suse.de > private aj@arthur.inka.de > http://www.suse.de/~aj > From gcc-patches-return-74893-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 15:07:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4836 invoked by alias); 2 Jan 2003 15:07:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4828 invoked from network); 2 Jan 2003 15:07:45 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 2 Jan 2003 15:07:45 -0000 Received: from localhost (IDENT:+iJJrb9k9yFV7gv70a7AyPe39+8WjZFd@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h02F7VlU020762 for ; Thu, 2 Jan 2003 10:07:32 -0500 Date: Thu, 02 Jan 2003 10:07:28 -0500 (EST) Message-Id: <20030102.100728.35676492.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300: Prevent non-atomic stack adjustment. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.9, Required: 5 X-Spam-Tests: DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -3.9 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to prevent non-atomic stack adjustment. H8/300 does not have an instruction for a 16-bit wide constant addition. Without the patch, code like the following is generated. add.b #8,r7l addx #0,r7h This is very dangerous. If an interrupt comes in between add.b and addx, then the stack pointer may contain a broken value, causing a disaster. The patch fixes the problem by adding a splitter and a peephole. The peephole is used to convert the above sequence to mov.w #8,r3 add.w r3,r7 if a scratch register, r3 in this case, is available. If not, the splitter converts the above sequence to adds #2,r7 adds #2,r7 adds #2,r7 adds #2,r7 Tested on h8300 port. Committed to both mainline and branch. Kazu Hirata 2003-01-02 Kazu Hirata * config/h8300/h8300.c (stack_pointer_operand): New. (const_int_gt_2_operand): Likewise. (const_int_ge_8_operand): Likewise. * config/h8300/h8300.md (a splitter): Likewise. (a peephole2): Likewise. * config/h8300/h8300-protos.h: Add prototypes for the new functions above. 2003-01-02 Kazu Hirata * gcc.dg/h8300-stack-1.c: New. Index: h8300-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300-protos.h,v retrieving revision 1.43 diff -u -r1.43 h8300-protos.h --- h8300-protos.h 1 Jan 2003 20:23:02 -0000 1.43 +++ h8300-protos.h 2 Jan 2003 04:15:06 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. Hitachi H8/300 version generating coff - Copyright (C) 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). @@ -62,8 +62,11 @@ extern int jump_address_operand PARAMS ((rtx, enum machine_mode)); extern int bit_operand PARAMS ((rtx, enum machine_mode)); extern int bit_memory_operand PARAMS ((rtx, enum machine_mode)); +extern int stack_pointer_operand PARAMS ((rtx, enum machine_mode)); extern int const_int_le_2_operand PARAMS ((rtx, enum machine_mode)); extern int const_int_le_6_operand PARAMS ((rtx, enum machine_mode)); +extern int const_int_gt_2_operand PARAMS ((rtx, enum machine_mode)); +extern int const_int_ge_8_operand PARAMS ((rtx, enum machine_mode)); extern int const_int_qi_operand PARAMS ((rtx, enum machine_mode)); extern int const_int_hi_operand PARAMS ((rtx, enum machine_mode)); extern int incdec_operand PARAMS ((rtx, enum machine_mode)); Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.193 diff -u -r1.193 h8300.c --- h8300.c 2 Jan 2003 02:19:59 -0000 1.193 +++ h8300.c 2 Jan 2003 04:15:08 -0000 @@ -1827,6 +1827,16 @@ } } +/* Return nonzero if X is a stack pointer. */ + +int +stack_pointer_operand (x, mode) + rtx x; + enum machine_mode mode ATTRIBUTE_UNUSED; +{ + return x == stack_pointer_rtx; +} + /* Return nonzero if X is a constant whose absolute value is no greater than 2. */ @@ -1849,6 +1859,30 @@ { return (GET_CODE (x) == CONST_INT && abs (INTVAL (x)) <= 6); +} + +/* Return nonzero if X is a constant whose absolute value is greater + than 2. */ + +int +const_int_gt_2_operand (x, mode) + rtx x; + enum machine_mode mode ATTRIBUTE_UNUSED; +{ + return (GET_CODE (x) == CONST_INT + && abs (INTVAL (x)) > 2); +} + +/* Return nonzero if X is a constant whose absolute value is no + smaller than 8. */ + +int +const_int_ge_8_operand (x, mode) + rtx x; + enum machine_mode mode ATTRIBUTE_UNUSED; +{ + return (GET_CODE (x) == CONST_INT + && abs (INTVAL (x)) >= 8); } /* Return nonzero if X is a constant expressible in QImode. */ Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.140 diff -u -r1.140 h8300.md --- h8300.md 2 Jan 2003 02:42:57 -0000 1.140 +++ h8300.md 2 Jan 2003 04:15:08 -0000 @@ -1,6 +1,6 @@ ;; GCC machine description for Hitachi H8/300 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -;; 2001, 2002 Free Software Foundation, Inc. +;; 2001, 2002, 2003 Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com), ;; Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). @@ -783,6 +783,35 @@ [(set_attr "length" "2,2,2,4,2") (set_attr "cc" "none_0hit,none_0hit,clobber,clobber,set_zn")]) +;; This splitter is very important to make the stack adjustment +;; interrupt-safe. The combination of add.b and addx is unsafe! +;; +;; We apply this split after the peephole2 pass so that we won't end +;; up creating too many adds/subs when a scratch register is +;; available, which is actually a common case because stack unrolling +;; tends to happen immediately after a function call. + +(define_split + [(set (match_operand:HI 0 "stack_pointer_operand" "") + (plus:HI (match_dup 0) + (match_operand 1 "const_int_gt_2_operand" "")))] + "TARGET_H8300 && flow2_completed" + [(const_int 0)] + "split_adds_subs (HImode, operands, 0); DONE;") + +(define_peephole2 + [(match_scratch:HI 2 "r") + (set (match_operand:HI 0 "stack_pointer_operand" "") + (plus:HI (match_dup 0) + (match_operand:HI 1 "const_int_ge_8_operand" "")))] + "TARGET_H8300" + [(set (match_dup 2) + (match_dup 1)) + (set (match_dup 0) + (plus:HI (match_dup 0) + (match_dup 2)))] + "") + (define_insn "*addhi3_h8300hs" [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r") (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0") @@ -2577,6 +2606,26 @@ ;; Convert (A << B) & C to (A & 255) << B if C == 255 << B. +(define_insn_and_split "*andhi_ashift_const" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (and:HI (ashift:HI (match_operand:HI 1 "register_operand" "0,0") + (match_operand:HI 2 "const_int_operand" "S,n")) + (match_operand:HI 3 "const_int_operand" "n,n"))) + (clobber (match_scratch:QI 4 "=X,&r"))] + "(TARGET_H8300H || TARGET_H8300S) + && INTVAL (operands[3]) == (255 << INTVAL (operands[2]))" + "#" + "&& reload_completed" + [(set (match_dup 0) + (and:HI (match_dup 0) + (const_int 255))) + (parallel + [(set (match_dup 0) + (ashift:HI (match_dup 0) + (match_dup 2))) + (clobber (match_dup 4))])] + "") + (define_peephole2 [(parallel [(set (match_operand:HI 0 "register_operand" "") @@ -2586,7 +2635,8 @@ (set (match_dup 0) (and:HI (match_dup 0) (match_operand:HI 3 "const_int_operand" "")))] - "INTVAL (operands[3]) == (255 << INTVAL (operands[1]))" + "TARGET_H8300 + && INTVAL (operands[3]) == (255 << INTVAL (operands[1]))" [(set (match_dup 0) (and:HI (match_dup 0) (const_int 255))) Index: h8300-stack-1.c =================================================================== RCS file: h8300-stack-1.c diff -N h8300-stack-1.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ h8300-stack-1.c 2 Jan 2003 14:55:54 -0000 @@ -0,0 +1,14 @@ +/* Make sure that the H8 backend does not generate a non-atomic stack + adjustment. */ +/* { dg-do compile { target h8300-*-* } } */ +/* { dg-options "" } */ + +void foo (short, short, short, short, short, short); + +void +bar () +{ + foo (0, 0, 0, 0, 0, 0); +} + +/* { dg-final { scan-assembler-not "addx" } } */ From gcc-patches-return-74894-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 16:07:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27212 invoked by alias); 2 Jan 2003 16:07:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27192 invoked from network); 2 Jan 2003 16:07:18 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 2 Jan 2003 16:07:18 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h02G6Z315936; Thu, 2 Jan 2003 11:06:35 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h02G6YT40222; Thu, 2 Jan 2003 11:06:34 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id LAA27616; Thu, 2 Jan 2003 11:06:34 -0500 Message-Id: <200301021606.LAA27616@makai.watson.ibm.com> To: Mark Mitchell cc: gcc-patches@gcc.gnu.org Subject: C++ Parser testcase failure on AIX Date: Thu, 02 Jan 2003 11:06:34 -0500 From: David Edelsohn Now that the bulk of the issues with the new C++ Parser have been fixed, there is a new regression in check-g++ that was introduced by the new C++ Parser. The testcase is g++.dg/ext/typeof2.C. This failure occurs for powerpc-ibm-aix4.3.3.0. The testcase uses __asm ("barX") to change the name of a symbol "fooX" to "barX". With the introduction of the new parser, not all references to fooX are replaced. The first two cases which *do not* use __typeof (fooX) are converted, but the latter two cases with __typeof (fooX) retain fooX in the symbol name. Thanks, David From gcc-patches-return-74895-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 17:04:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20782 invoked by alias); 2 Jan 2003 17:04:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20775 invoked from network); 2 Jan 2003 17:04:33 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 2 Jan 2003 17:04:33 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id MAA04513; Thu, 2 Jan 2003 12:04:21 -0500 (EST) Date: Thu, 2 Jan 2003 12:04:21 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301021704.MAA04513@caip.rutgers.edu> To: dje@watson.ibm.com Subject: Re: C++ Parser testcase failure on AIX Cc: gcc-patches@gcc.gnu.org, mark@codesourcery.com > From: David Edelsohn > > Now that the bulk of the issues with the new C++ Parser have been > fixed, there is a new regression in check-g++ that was introduced by > the new C++ Parser. The testcase is g++.dg/ext/typeof2.C. This > failure occurs for powerpc-ibm-aix4.3.3.0. > > The testcase uses __asm ("barX") to change the name of a symbol "fooX" > to "barX". With the introduction of the new parser, not all > references to fooX are replaced. > > The first two cases which *do not* use __typeof (fooX) are converted, > but the latter two cases with __typeof (fooX) retain fooX in the > symbol name. FWIW, I get the same exact problem (wrt __typeof) on mips-sgi-irix6.5. E.g. http://gcc.gnu.org/ml/gcc-testresults/2003-01/msg00031.html I also get some other (different) g++ testsuite regressions which I'll report on seperately. Are you going to file a PR for typeof2.C ? If yes, then I won't bother. -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-74896-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 17:47:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5551 invoked by alias); 2 Jan 2003 17:47:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5544 invoked from network); 2 Jan 2003 17:47:56 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 2 Jan 2003 17:47:56 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h02HlE312570; Thu, 2 Jan 2003 12:47:14 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h02HlET38806; Thu, 2 Jan 2003 12:47:14 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id MAA27748; Thu, 2 Jan 2003 12:47:13 -0500 Message-Id: <200301021747.MAA27748@makai.watson.ibm.com> To: "Kaveh R. Ghazi" cc: gcc-patches@gcc.gnu.org, mark@codesourcery.com Subject: Re: C++ Parser testcase failure on AIX In-Reply-To: Message from "Kaveh R. Ghazi" of "Thu, 02 Jan 2003 12:04:21 EST." <200301021704.MAA04513@caip.rutgers.edu> Date: Thu, 02 Jan 2003 12:47:13 -0500 From: David Edelsohn >>>>> Kaveh R Ghazi writes: Kaveh> FWIW, I get the same exact problem (wrt __typeof) on mips-sgi-irix6.5. Kaveh> E.g. http://gcc.gnu.org/ml/gcc-testresults/2003-01/msg00031.html Kaveh> I also get some other (different) g++ testsuite regressions which I'll Kaveh> report on seperately. Kaveh> Are you going to file a PR for typeof2.C ? If yes, then I won't bother. Okay, it helps that it's not just me and AIX. Does Mark want PRs or email? He hasn't said to me that he wants PRs. David From gcc-patches-return-74897-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 17:57:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14536 invoked by alias); 2 Jan 2003 17:57:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14448 invoked from network); 2 Jan 2003 17:57:38 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 17:57:38 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02Hrws01309; Thu, 2 Jan 2003 09:53:58 -0800 Date: Thu, 02 Jan 2003 09:53:58 -0800 From: Mark Mitchell To: David Edelsohn , "Kaveh R. Ghazi" cc: "gcc-patches@gcc.gnu.org" Subject: Re: C++ Parser testcase failure on AIX Message-ID: <38250000.1041530038@warlock.codesourcery.com> In-Reply-To: <200301021747.MAA27748@makai.watson.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Thursday, January 02, 2003 12:47:13 PM -0500 David Edelsohn wrote: >>>>>> Kaveh R Ghazi writes: > > Kaveh> FWIW, I get the same exact problem (wrt __typeof) on > mips-sgi-irix6.5. Kaveh> E.g. > http://gcc.gnu.org/ml/gcc-testresults/2003-01/msg00031.html > > Kaveh> I also get some other (different) g++ testsuite regressions which > I'll Kaveh> report on seperately. > > Kaveh> Are you going to file a PR for typeof2.C ? If yes, then I won't > bother. > > Okay, it helps that it's not just me and AIX. Does Mark want PRs > or email? He hasn't said to me that he wants PRs. So far, I'm keeping up by email -- I think. If you think that I'm ignoring you, file a PR and make it high priority, and assign it to me. And then hassle me. I've got a fix for the report you (David) sent about typeof, and I'm testing that now. That may be Dave Anglin's bug as well. Then on to Neil's. (A few people have bugged me about long-standing bugs that happenned not to get fixed by the new parser; those are much less of a priority for me, even though I'd like to deal with them too.) -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74898-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 17:59:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15874 invoked by alias); 2 Jan 2003 17:59:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15864 invoked from network); 2 Jan 2003 17:59:19 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 17:59:19 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02Htis01313; Thu, 2 Jan 2003 09:55:45 -0800 Date: Thu, 02 Jan 2003 09:55:44 -0800 From: Mark Mitchell To: Nathanael Nerode , "gcc-patches@gcc.gnu.org" Subject: Re: Testcase for fixed PR c++/250 Message-ID: <40400000.1041530144@warlock.codesourcery.com> In-Reply-To: <20030101125215.GA26628@doctormoo> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Wednesday, January 01, 2003 07:52:15 AM -0500 Nathanael Nerode wrote: > Applied. > > * g++.dg/lookup/scope-operator1.C: New test. Thanks a lot for doing this! Would you mind keeping a tally of how many existing PRs are being closed by the new parser? (It would be fun to claim that we fixed N PRs with a single check-in!) -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74899-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:13:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22603 invoked by alias); 2 Jan 2003 18:13:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22596 invoked from network); 2 Jan 2003 18:13:17 -0000 Received: from unknown (HELO gandalf.codesourcery.com) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 18:13:17 -0000 Received: (from mitchell@localhost) by gandalf.codesourcery.com (8.11.6/8.11.6) id h02I5SE23498; Thu, 2 Jan 2003 10:05:28 -0800 Date: Thu, 2 Jan 2003 10:05:28 -0800 Message-Id: <200301021805.h02I5SE23498@gandalf.codesourcery.com> X-Authentication-Warning: gandalf.codesourcery.com: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Subject: C++ PATCH: Fix parser/typeof regression Reply-to: mark@codesourcery.com This patch fixes the regression David reported on typeof expressions. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-02 Mark Mitchell * parser.c (cp_parser_sizeof_operand): Do not evaluate the expression. Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.12 diff -c -p -r1.12 parser.c *** parser.c 1 Jan 2003 11:58:57 -0000 1.12 --- parser.c 2 Jan 2003 18:11:34 -0000 *************** *** 1,5 **** /* C++ Parser. ! Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Mark Mitchell . This file is part of GCC. --- 1,5 ---- /* C++ Parser. ! Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Written by Mark Mitchell . This file is part of GCC. *************** cp_parser_sizeof_operand (parser, keywor *** 14432,14437 **** --- 14432,14439 ---- saved_constant_expression_p = parser->constant_expression_p; parser->constant_expression_p = false; + /* Do not actually evaluate the expression. */ + ++skip_evaluation; /* If it's a `(', then we might be looking at the type-id construction. */ if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) *************** cp_parser_sizeof_operand (parser, keywor *** 14468,14473 **** --- 14470,14477 ---- looking at the unary-expression production. */ if (!expr) expr = cp_parser_unary_expression (parser, /*address_p=*/false); + /* Go back to evaluating expressions. */ + --skip_evaluation; /* Free the message we created. */ free ((char *) parser->type_definition_forbidden_message); From gcc-patches-return-74900-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:41:46 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32595 invoked by alias); 2 Jan 2003 18:41:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32583 invoked from network); 2 Jan 2003 18:41:44 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 2 Jan 2003 18:41:44 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h02IfWw13403 for ; Thu, 2 Jan 2003 10:41:32 -0800 (PST) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Thu, 2 Jan 2003 10:41:31 -0800 Received: from isolde (isolde.apple.com [17.201.24.249]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id h02IfVQ18585; Thu, 2 Jan 2003 10:41:31 -0800 (PST) Date: Thu, 2 Jan 2003 10:43:02 -0800 Subject: Re: PATCH: improve vtable emission Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: "gcc-patches@gcc.gnu.org" To: Mark Mitchell From: Matt Austern In-Reply-To: <183870000.1041278310@warlock.codesourcery.com> Message-Id: <05FBB6EB-1E82-11D7-A7CA-00039390D9E0@apple.com> Content-Transfer-Encoding: 7bit On Monday, December 30, 2002, at 11:58 AM, Mark Mitchell wrote: > I'm not sure what this is for; the key method does not cease to be the > key method just because it ends up inline You're right, I misinterpreted a sentence from section 5.2.3 of the ABI document. Good, that makes things easier. I'll send out a new version of the patch later today. (After verifying that it works with the new parser.) --Matt From gcc-patches-return-74901-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:52:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3135 invoked by alias); 2 Jan 2003 18:52:05 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3124 invoked from network); 2 Jan 2003 18:52:02 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 2 Jan 2003 18:52:02 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id NAA25304; Thu, 2 Jan 2003 13:51:50 -0500 (EST) Date: Thu, 2 Jan 2003 13:51:50 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301021851.NAA25304@caip.rutgers.edu> To: dje@watson.ibm.com, mark@codesourcery.com Subject: Re: C++ Parser testcase failure on AIX Cc: gcc-patches@gcc.gnu.org References: <38250000.1041530038@warlock.codesourcery.com> > From: Mark Mitchell > > > Okay, it helps that it's not just me and AIX. Does Mark want PRs > > or email? He hasn't said to me that he wants PRs. > > So far, I'm keeping up by email -- I think. If you think that I'm > ignoring you, file a PR and make it high priority, and assign it to me. > And then hassle me. Mark - By using PRs I never meant to suggest that you were ignoring anything. I had thought that was the preferred method for logging complete information to track any error and reproduce it. Plus when I include you in the CC PR status field you get an email anyway. I've filed two more reports related to the new parser, (beyond David's typeof report.) Again, no implication about your responsiveness meant. I believe that covers all errors with the new parser arising on my test platforms, though there are still a few extra XPASSes. But that's a good problem to have. E.g. XPASS: g++.bugs/900404_04.C , (test for errors, line 15) XPASS: g++.jason/access8.C cannot convert to inh (test for errors, line 28) XPASS: g++.other/decl5.C ::Q not a member of B (test for errors, line 34) Is it appripriate to remove the XFAILs for these cases? Thanks, --Kaveh -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-74902-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:54:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5684 invoked by alias); 2 Jan 2003 18:54:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5601 invoked from network); 2 Jan 2003 18:54:02 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 2 Jan 2003 18:54:02 -0000 Received: from localhost (IDENT:jXt1S58vvjPketpwFYG9KUrgCoPh1iAF@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h02IrjlU025494 for ; Thu, 2 Jan 2003 13:53:47 -0500 Date: Thu, 02 Jan 2003 13:53:39 -0500 (EST) Message-Id: <20030102.135339.58930135.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.md: Relax conditions on some insns. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.9, Required: 5 X-Spam-Tests: DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -3.9 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to relax conditions on some insns. Some insns have REG_P as a part of the insn conditions, causing subregs not to be accepted. The patch relax those conditions. Tested on h8300 port. Committed. Kazu Hirata 2003-01-02 Kazu Hirata * config/h8300/h8300.md (*iorhi3_zext): Relax the condition. (*iorhi3_two_qi): Likewise. (*iorsi3_zexthi): Likewise. (*xorhi3_zextqi): Likewise. (*xorsi3_zexthi): Likewise. (*xorsi3_zextqi): Likewise. Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.141 diff -u -r1.141 h8300.md --- h8300.md 2 Jan 2003 14:59:30 -0000 1.141 +++ h8300.md 2 Jan 2003 18:41:28 -0000 @@ -2376,9 +2376,7 @@ [(set (match_operand:HI 0 "register_operand" "=r") (ior:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r")) (match_operand:HI 2 "register_operand" "0")))] - "REG_P (operands[0]) - && REG_P (operands[1]) - && REGNO (operands[0]) != REGNO (operands[1])" + "" "or\\t%X1,%s0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) @@ -2408,9 +2406,7 @@ (ior:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "0")) (ashift:HI (match_operand:HI 2 "register_operand" "r") (const_int 8))))] - "REG_P (operands[0]) - && REG_P (operands[2]) - && REGNO (operands[0]) != REGNO (operands[2])" + "" "mov.b\\t%s2,%t0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) @@ -2421,10 +2417,7 @@ [(set (match_operand:SI 0 "register_operand" "=r") (ior:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "r")) (match_operand:SI 2 "register_operand" "0")))] - "(TARGET_H8300H || TARGET_H8300S) - && REG_P (operands[0]) - && REG_P (operands[1]) - && (REGNO (operands[0]) != REGNO (operands[1]))" + "TARGET_H8300H || TARGET_H8300S" "or.w\\t%T1,%f0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) @@ -2464,9 +2457,7 @@ [(set (match_operand:HI 0 "register_operand" "=r") (xor:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r")) (match_operand:HI 2 "register_operand" "0")))] - "REG_P (operands[0]) - && REG_P (operands[1]) - && REGNO (operands[0]) != REGNO (operands[1])" + "" "xor\\t%X1,%s0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) @@ -2477,10 +2468,7 @@ [(set (match_operand:SI 0 "register_operand" "=r") (xor:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "r")) (match_operand:SI 2 "register_operand" "0")))] - "(TARGET_H8300H || TARGET_H8300S) - && REG_P (operands[0]) - && REG_P (operands[1]) - && (REGNO (operands[0]) != REGNO (operands[1]))" + "TARGET_H8300H || TARGET_H8300S" "xor.w\\t%T1,%f0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) @@ -2489,9 +2477,7 @@ [(set (match_operand:SI 0 "register_operand" "=r") (xor:SI (zero_extend:SI (match_operand:QI 1 "register_operand" "r")) (match_operand:SI 2 "register_operand" "0")))] - "REG_P (operands[0]) - && REG_P (operands[1]) - && REGNO (operands[0]) != REGNO (operands[1])" + "" "xor\\t%X1,%w0" [(set_attr "cc" "clobber") (set_attr "length" "2")]) From gcc-patches-return-74903-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:54:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9741 invoked by alias); 2 Jan 2003 18:54:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9734 invoked from network); 2 Jan 2003 18:54:55 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 2 Jan 2003 18:54:55 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18UAUA-000347-00; Thu, 02 Jan 2003 18:54:30 +0000 Date: Thu, 2 Jan 2003 18:54:30 +0000 From: Neil Booth To: Mark Mitchell Cc: Nathanael Nerode , "gcc-patches@gcc.gnu.org" Subject: Re: Testcase for fixed PR c++/250 Message-ID: <20030102185430.GB11716@daikokuya.co.uk> References: <20030101125215.GA26628@doctormoo> <40400000.1041530144@warlock.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <40400000.1041530144@warlock.codesourcery.com> User-Agent: Mutt/1.4i Mark Mitchell wrote:- > > > --On Wednesday, January 01, 2003 07:52:15 AM -0500 Nathanael Nerode > wrote: > > >Applied. > > > > * g++.dg/lookup/scope-operator1.C: New test. > > Thanks a lot for doing this! > > Would you mind keeping a tally of how many existing PRs are being closed > by the new parser? (It would be fun to claim that we fixed N PRs with a > single check-in!) I know it's about 60 so far. I guestimate that only 30% of PRs have been looked at. Neil. From gcc-patches-return-74904-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:03:00 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16512 invoked by alias); 2 Jan 2003 19:03:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16505 invoked from network); 2 Jan 2003 19:02:59 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 19:02:59 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02IxMs23977; Thu, 2 Jan 2003 10:59:22 -0800 Date: Thu, 02 Jan 2003 10:59:22 -0800 From: Mark Mitchell To: "Kaveh R. Ghazi" , "dje@watson.ibm.com" cc: "gcc-patches@gcc.gnu.org" Subject: Re: C++ Parser testcase failure on AIX Message-ID: <66600000.1041533962@warlock.codesourcery.com> In-Reply-To: <200301021851.NAA25304@caip.rutgers.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Thursday, January 02, 2003 01:51:50 PM -0500 "Kaveh R. Ghazi" wrote: > > From: Mark Mitchell > > > > > Okay, it helps that it's not just me and AIX. Does Mark want PRs > > > or email? He hasn't said to me that he wants PRs. > > > > So far, I'm keeping up by email -- I think. If you think that I'm > > ignoring you, file a PR and make it high priority, and assign it to me. > > And then hassle me. > > Mark - By using PRs I never meant to suggest that you were ignoring > anything. I didn't mean it that way; sorry. I meant it like "if email is working for you, great; if you want to use a PR, that's fine too!" > XPASS: g++.bugs/900404_04.C , (test for errors, line 15) > XPASS: g++.jason/access8.C cannot convert to inh (test for errors, line > 28) XPASS: g++.other/decl5.C ::Q not a member of B (test for errors, line > 34) > > Is it appripriate to remove the XFAILs for these cases? Yeah, consider that pre-approved. I've basked in their warm glow long enough, I guess. :-) -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74905-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:04:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17156 invoked by alias); 2 Jan 2003 19:04:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17144 invoked from network); 2 Jan 2003 19:04:06 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 2 Jan 2003 19:04:06 -0000 Received: from tornado.toronto.redhat.com (IDENT:6TbPHwNjwMqPgTfYjPbQpUj23z8Nxn1b@tornado.toronto.redhat.com [172.16.14.228]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h02J3qY28557; Thu, 2 Jan 2003 14:03:53 -0500 Received: from tornado.toronto.redhat.com (localhost [127.0.0.1]) by tornado.toronto.redhat.com (8.12.5/8.12.5) with ESMTP id h02J3qpw003958; Thu, 2 Jan 2003 14:03:52 -0500 Received: (from dnovillo@localhost) by tornado.toronto.redhat.com (8.12.5/8.12.5/Submit) id h02J3pZV003956; Thu, 2 Jan 2003 14:03:51 -0500 Date: Thu, 2 Jan 2003 14:03:51 -0500 From: Diego Novillo To: Steven Bosscher Cc: gcc-patches@gcc.gnu.org Subject: Re: [tree-ssa] Minor cleanup Message-ID: <20030102190351.GA3945@tornado.toronto.redhat.com> References: <1041384883.967.42.camel@steven> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1041384883.967.42.camel@steven> User-Agent: Mutt/1.4i Organization: Red Hat Canada On Wed, 01 Jan 2003, Steven Bosscher wrote: > 2002-12-31 Steven Bosscher > > * gimplify.c (create_tmp_var_noc): Remove unused function. > * tree-simple.h: Kill prototype. > Applied. Thanks. Diego. From gcc-patches-return-74906-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:05:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17645 invoked by alias); 2 Jan 2003 19:05:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17638 invoked from network); 2 Jan 2003 19:05:25 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 2 Jan 2003 19:05:25 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h02J5Dw26202 for ; Thu, 2 Jan 2003 11:05:13 -0800 (PST) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Thu, 2 Jan 2003 11:05:13 -0800 Received: from isolde (isolde.apple.com [17.201.24.249]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id h02J5CQ09636; Thu, 2 Jan 2003 11:05:12 -0800 (PST) Date: Thu, 2 Jan 2003 11:06:44 -0800 Subject: Re: PATCH: improve vtable emission Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: "gcc-patches@gcc.gnu.org" To: Mark Mitchell From: Matt Austern In-Reply-To: <183870000.1041278310@warlock.codesourcery.com> Message-Id: <55637856-1E85-11D7-A7CA-00039390D9E0@apple.com> Content-Transfer-Encoding: 7bit On Monday, December 30, 2002, at 11:58 AM, Mark Mitchell wrote: > And why do we need to do this again? Oh, I see; dynamic_classes is > misnamed. Please rename it to something else more intuitive. Suggestions? I left it as dynamic_classes because I couldn't think of a name that was both accurate and manageable. (The actual concept, as described in a comment, is something like "classes whose vtables should be emitted.) classes_to_emit isn't too awful a name, but I'm not sure it's really an improvement on dynamic_classes. Next step, of course, is to make the same sort of changes for rtti that I've done for vtables. But I'll do that separately. --Matt From gcc-patches-return-74907-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:14:00 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22024 invoked by alias); 2 Jan 2003 19:13:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22002 invoked from network); 2 Jan 2003 19:13:57 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 19:13:57 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02JAQs01519; Thu, 2 Jan 2003 11:10:26 -0800 Date: Thu, 02 Jan 2003 11:10:25 -0800 From: Mark Mitchell To: Matt Austern cc: "gcc-patches@gcc.gnu.org" Subject: Re: PATCH: improve vtable emission Message-ID: <69230000.1041534625@warlock.codesourcery.com> In-Reply-To: <55637856-1E85-11D7-A7CA-00039390D9E0@apple.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Thursday, January 02, 2003 11:06:44 AM -0800 Matt Austern wrote: > On Monday, December 30, 2002, at 11:58 AM, Mark Mitchell wrote: > >> And why do we need to do this again? Oh, I see; dynamic_classes is >> misnamed. Please rename it to something else more intuitive. > > Suggestions? I left it as dynamic_classes because I couldn't think > of a name that was both accurate and manageable. I actually don't mind long names at all. For example, classes_whose_vtables_might_be_emitted would be fine with me. How about vtable_classes? (I know that doesn't mean anything much more different than dynamic, but at least it's not actually a defined term in the standard.) -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74908-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:19:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26543 invoked by alias); 2 Jan 2003 19:19:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26536 invoked from network); 2 Jan 2003 19:19:42 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 2 Jan 2003 19:19:42 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h02JIT323982; Thu, 2 Jan 2003 14:18:29 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h02JITT39050; Thu, 2 Jan 2003 14:18:29 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id OAA27978; Thu, 2 Jan 2003 14:18:28 -0500 Message-Id: <200301021918.OAA27978@makai.watson.ibm.com> To: Mark Mitchell cc: "Kaveh R. Ghazi" , "gcc-patches@gcc.gnu.org" Subject: Re: C++ Parser testcase failure on AIX In-Reply-To: Message from Mark Mitchell of "Thu, 02 Jan 2003 09:53:58 PST." <38250000.1041530038@warlock.codesourcery.com> Date: Thu, 02 Jan 2003 14:18:28 -0500 From: David Edelsohn >>>>> Mark Mitchell writes: Mark> I've got a fix for the report you (David) sent about typeof, and I'm Mark> testing that now. That may be Dave Anglin's bug as well. Then on to Mark> Neil's. The patch appears to fix the typeof2.C regression on AIX. Thanks, David From gcc-patches-return-74909-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:21:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27091 invoked by alias); 2 Jan 2003 19:21:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27082 invoked from network); 2 Jan 2003 19:21:09 -0000 Received: from unknown (HELO garibaldi.home) (62.30.75.143) by 209.249.29.67 with SMTP; 2 Jan 2003 19:21:09 -0000 Received: from codesourcery.com (localhost.localdomain [127.0.0.1]) by garibaldi.home (8.12.5/8.12.5) with ESMTP id h02JKm1p015463; Thu, 2 Jan 2003 19:20:49 GMT Message-ID: <3E149110.3060008@codesourcery.com> Date: Thu, 02 Jan 2003 19:20:48 +0000 From: Nathan Sidwell User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20021003 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Matt Austern CC: Mark Mitchell , "gcc-patches@gcc.gnu.org" Subject: Re: PATCH: improve vtable emission References: <55637856-1E85-11D7-A7CA-00039390D9E0@apple.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Matt Austern wrote: > On Monday, December 30, 2002, at 11:58 AM, Mark Mitchell wrote: > >> And why do we need to do this again? Oh, I see; dynamic_classes is >> misnamed. Please rename it to something else more intuitive. > > > Suggestions? I left it as dynamic_classes because I couldn't think > of a name that was both accurate and manageable. (The actual > concept, as described in a comment, is something like "classes > whose vtables should be emitted.) classes_to_emit isn't too awful > a name, but I'm not sure it's really an improvement on > dynamic_classes. keyed_classes? or variant thereof nathan -- Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC The voices in my head said this was stupid too nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org From gcc-patches-return-74910-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:24:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28314 invoked by alias); 2 Jan 2003 19:24:05 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28307 invoked from network); 2 Jan 2003 19:24:04 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 2 Jan 2003 19:24:04 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id E5D084258; Thu, 2 Jan 2003 20:23:51 +0100 (CET) Date: Thu, 2 Jan 2003 20:23:51 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: [rtlopt] bb-reorder tweek Message-ID: <20030102192351.GA25751@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, this patch avoids uncond jump to cond jump by duplicating the cond jump. Bootstrapped i386 (athlon). I'm goind to commit it to rtlopt branch. Josef Thu Jan 2 20:18:46 CET 2003 Josef Zlomek * bb-reorder.c (copy_bb_p): Parameter code_may_grow was added. (rotate_loop): Avoid uncond jump to cond jump. (find_traces_1_round): copy_bb_p has one more parameter. (connect_traces): Likewise. (copy_bb): Allow inserting a block into a trace. Index: bb-reorder.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/bb-reorder.c,v retrieving revision 1.50.2.18 diff -c -3 -p -r1.50.2.18 bb-reorder.c *** bb-reorder.c 30 Dec 2002 13:41:14 -0000 1.50.2.18 --- bb-reorder.c 2 Jan 2003 13:28:38 -0000 *************** *** 1,5 **** /* Basic block reordering routines for the GNU compiler. ! Copyright (C) 2000, 2002 Free Software Foundation, Inc. This file is part of GCC. --- 1,5 ---- /* Basic block reordering routines for the GNU compiler. ! Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. *************** static fibheapkey_t bb_to_key PARAMS (( *** 145,151 **** static bool better_edge_p PARAMS ((basic_block, edge, int, int, int, int)); static void connect_traces PARAMS ((int, struct trace *)); ! static bool copy_bb_p PARAMS ((basic_block)); static int get_uncond_jump_length PARAMS ((void)); /* Find the traces for Software Trace Cache. Chain each trace through --- 145,151 ---- static bool better_edge_p PARAMS ((basic_block, edge, int, int, int, int)); static void connect_traces PARAMS ((int, struct trace *)); ! static bool copy_bb_p PARAMS ((basic_block, bool)); static int get_uncond_jump_length PARAMS ((void)); /* Find the traces for Software Trace Cache. Chain each trace through *************** rotate_loop (back_edge, trace, trace_n) *** 314,324 **** --- 314,338 ---- else { basic_block prev_bb; + for (prev_bb = trace->first; RBI (prev_bb)->next != back_edge->dest; prev_bb = RBI (prev_bb)->next) ; RBI (prev_bb)->next = RBI (best_bb)->next; + + /* Try to get rid of uncond jump to cond jump. */ + if (prev_bb->succ && !prev_bb->succ->succ_next) + { + basic_block header = prev_bb->succ->dest; + + /* Duplicate HEADER if it is a small block containing condjump + in the end. */ + if (any_condjump_p (header->end) && copy_bb_p (header, false)) + { + copy_bb (header, prev_bb->succ, prev_bb, trace_n); + } + } } } else *************** find_traces_1_round (branch_th, exec_th, *** 545,551 **** if (another_edge != best_edge) break; ! if (!another_edge && copy_bb_p (best_edge->dest)) { bb = copy_bb (best_edge->dest, best_edge, bb, *n_traces); --- 559,566 ---- if (another_edge != best_edge) break; ! if (!another_edge && copy_bb_p (best_edge->dest, ! !optimize_size)) { bb = copy_bb (best_edge->dest, best_edge, bb, *n_traces); *************** copy_bb (old_bb, e, bb, trace) *** 666,671 **** --- 681,687 ---- "Duplicated bb %d (created bb %d)\n", old_bb->index, new_bb->index); RBI (new_bb)->visited = trace; + RBI (new_bb)->next = RBI (bb)->next; RBI (bb)->next = new_bb; if (new_bb->index >= array_size || last_basic_block > array_size) *************** connect_traces (n_traces, traces) *** 947,953 **** } } } ! if (best && next_bb && copy_bb_p (best->dest)) { basic_block new_bb; --- 963,969 ---- } } } ! if (best && next_bb && copy_bb_p (best->dest, !optimize_size)) { basic_block new_bb; *************** connect_traces (n_traces, traces) *** 995,1005 **** FREE (start_of_trace); } ! /* Return true when BB can and should be copied. */ static bool ! copy_bb_p (bb) basic_block bb; { int size = 0; int max_size = uncond_jump_length; --- 1011,1023 ---- FREE (start_of_trace); } ! /* Return true when BB can and should be copied. CODE_MAY_GROW is true ! when code size is allowed to grow by duplication. */ static bool ! copy_bb_p (bb, code_may_grow) basic_block bb; + bool code_may_grow; { int size = 0; int max_size = uncond_jump_length; *************** copy_bb_p (bb) *** 1012,1018 **** if (!cfg_layout_can_duplicate_bb_p (bb)) return false; ! if (!optimize_size && maybe_hot_bb_p (bb)) max_size *= 8; for (insn = bb->head; insn != NEXT_INSN (bb->end); --- 1030,1036 ---- if (!cfg_layout_can_duplicate_bb_p (bb)) return false; ! if (code_may_grow && maybe_hot_bb_p (bb)) max_size *= 8; for (insn = bb->head; insn != NEXT_INSN (bb->end); From gcc-patches-return-74911-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:28:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30629 invoked by alias); 2 Jan 2003 19:28:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30619 invoked from network); 2 Jan 2003 19:28:21 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 2 Jan 2003 19:28:21 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18UB0a-0003Di-00 for ; Thu, 02 Jan 2003 19:28:00 +0000 Date: Thu, 2 Jan 2003 19:28:00 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed c++/3012 Message-ID: <20030102192800.GA12373@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i * g++.dg/parse/parse6.C: New test. Index: g++.dg/parse/parse6.C =================================================================== RCS file: g++.dg/parse/parse6.C diff -N g++.dg/parse/parse6.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parse6.C 2 Jan 2003 19:26:33 -0000 @@ -0,0 +1,31 @@ +/* PR c++/3012 */ +/* { dg-do compile } */ + +class A +{ + public: + + template + void foo() const + { + } +}; + +template +class B +{ + public: + + void bar(const A& a) const + { + // Compile used to fail with parse error before `;' token + a.foo(); + } +}; + +int main() +{ + A a; + B b; + b.bar(a); +} From gcc-patches-return-74912-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:47:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6926 invoked by alias); 2 Jan 2003 19:47:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6908 invoked from network); 2 Jan 2003 19:47:35 -0000 Received: from unknown (HELO gandalf.codesourcery.com) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 19:47:35 -0000 Received: (from mitchell@localhost) by gandalf.codesourcery.com (8.11.6/8.11.6) id h02JcwQ21932; Thu, 2 Jan 2003 11:38:58 -0800 Date: Thu, 2 Jan 2003 11:38:58 -0800 Message-Id: <200301021938.h02JcwQ21932@gandalf.codesourcery.com> X-Authentication-Warning: gandalf.codesourcery.com: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Subject: C++ PATCH: Speed up new parser Reply-to: mark@codesourcery.com This sequeezes a bit more performance (a few percent) out of the new parser by inlining the little functions that showed up a lot in the profile. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-02 Mark Mitchell * parser.c (cp_lexer_next_token_is): Declare it inline. (cp_lexer_set_source_position_from_token): Likewise. (cp_lexer_debugging_p): Likewise. (cp_parser_parsing_tentatively): Likewise. (cp_parser_nested_name_specifier_opt): Reduce the number of calls to the cp_lexer_peek_token. Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.13 diff -c -p -r1.13 parser.c *** parser.c 2 Jan 2003 18:12:28 -0000 1.13 --- parser.c 2 Jan 2003 19:05:07 -0000 *************** static cp_token *cp_lexer_peek_token *** 233,239 **** PARAMS ((cp_lexer *)); static cp_token *cp_lexer_peek_nth_token PARAMS ((cp_lexer *, size_t)); ! static bool cp_lexer_next_token_is PARAMS ((cp_lexer *, enum cpp_ttype)); static bool cp_lexer_next_token_is_not PARAMS ((cp_lexer *, enum cpp_ttype)); --- 233,239 ---- PARAMS ((cp_lexer *)); static cp_token *cp_lexer_peek_nth_token PARAMS ((cp_lexer *, size_t)); ! static inline bool cp_lexer_next_token_is PARAMS ((cp_lexer *, enum cpp_ttype)); static bool cp_lexer_next_token_is_not PARAMS ((cp_lexer *, enum cpp_ttype)); *************** static void cp_lexer_commit_tokens *** 251,261 **** PARAMS ((cp_lexer *)); static void cp_lexer_rollback_tokens PARAMS ((cp_lexer *)); ! static void cp_lexer_set_source_position_from_token PARAMS ((cp_lexer *, const cp_token *)); static void cp_lexer_print_token PARAMS ((FILE *, cp_token *)); ! static bool cp_lexer_debugging_p PARAMS ((cp_lexer *)); static void cp_lexer_start_debugging PARAMS ((cp_lexer *)) ATTRIBUTE_UNUSED; --- 251,261 ---- PARAMS ((cp_lexer *)); static void cp_lexer_rollback_tokens PARAMS ((cp_lexer *)); ! static inline void cp_lexer_set_source_position_from_token PARAMS ((cp_lexer *, const cp_token *)); static void cp_lexer_print_token PARAMS ((FILE *, cp_token *)); ! static inline bool cp_lexer_debugging_p PARAMS ((cp_lexer *)); static void cp_lexer_start_debugging PARAMS ((cp_lexer *)) ATTRIBUTE_UNUSED; *************** cp_lexer_new_from_tokens (cp_token_cache *** 368,386 **** return lexer; } ! /* Non-zero if we are presently saving tokens. */ ! static int ! cp_lexer_saving_tokens (lexer) ! const cp_lexer *lexer; { ! return VARRAY_ACTIVE_SIZE (lexer->saved_tokens) != 0; } /* TOKEN points into the circular token buffer. Return a pointer to the next token in the buffer. */ ! static cp_token * cp_lexer_next_token (lexer, token) cp_lexer *lexer; cp_token *token; --- 368,404 ---- return lexer; } ! /* Returns non-zero if debugging information should be output. */ ! static inline bool ! cp_lexer_debugging_p (cp_lexer *lexer) { ! return lexer->debugging_p; ! } ! ! /* Set the current source position from the information stored in ! TOKEN. */ ! ! static inline void ! cp_lexer_set_source_position_from_token (lexer, token) ! cp_lexer *lexer ATTRIBUTE_UNUSED; ! const cp_token *token; ! { ! /* Ideally, the source position information would not be a global ! variable, but it is. */ ! ! /* Update the line number. */ ! if (token->type != CPP_EOF) ! { ! lineno = token->line_number; ! input_filename = token->file_name; ! } } /* TOKEN points into the circular token buffer. Return a pointer to the next token in the buffer. */ ! static inline cp_token * cp_lexer_next_token (lexer, token) cp_lexer *lexer; cp_token *token; *************** cp_lexer_next_token (lexer, token) *** 391,396 **** --- 409,423 ---- return token; } + /* Non-zero if we are presently saving tokens. */ + + static int + cp_lexer_saving_tokens (lexer) + const cp_lexer *lexer; + { + return VARRAY_ACTIVE_SIZE (lexer->saved_tokens) != 0; + } + /* Return a pointer to the token that is N tokens beyond TOKEN in the buffer. */ *************** cp_lexer_rollback_tokens (lexer) *** 916,940 **** VARRAY_POP (lexer->saved_tokens); } - /* Set the current source position from the information stored in - TOKEN. */ - - static void - cp_lexer_set_source_position_from_token (lexer, token) - cp_lexer *lexer ATTRIBUTE_UNUSED; - const cp_token *token; - { - /* Ideally, the source position information would not be a global - variable, but it is. */ - - /* Update the line number. */ - if (token->type != CPP_EOF) - { - lineno = token->line_number; - input_filename = token->file_name; - } - } - /* Print a representation of the TOKEN on the STREAM. */ static void --- 943,948 ---- *************** cp_lexer_print_token (stream, token) *** 1007,1021 **** fprintf (stream, " %s", IDENTIFIER_POINTER (token->value)); } - /* Returns non-zero if debugging information should be output. */ - - static bool - cp_lexer_debugging_p (lexer) - cp_lexer *lexer; - { - return lexer->debugging_p; - } - /* Start emitting debugging information. */ static void --- 1015,1020 ---- *************** static void cp_parser_abort_tentative_pa *** 1747,1753 **** PARAMS ((cp_parser *)); static bool cp_parser_parse_definitely PARAMS ((cp_parser *)); ! static bool cp_parser_parsing_tentatively PARAMS ((cp_parser *)); static bool cp_parser_committed_to_tentative_parse PARAMS ((cp_parser *)); --- 1746,1752 ---- PARAMS ((cp_parser *)); static bool cp_parser_parse_definitely PARAMS ((cp_parser *)); ! static inline bool cp_parser_parsing_tentatively PARAMS ((cp_parser *)); static bool cp_parser_committed_to_tentative_parse PARAMS ((cp_parser *)); *************** static void cp_parser_perform_deferred_a *** 1800,1805 **** --- 1799,1813 ---- static tree cp_parser_scope_through_which_access_occurs (tree, tree, tree); + /* Returns non-zero if we are parsing tentatively. */ + + static inline bool + cp_parser_parsing_tentatively (parser) + cp_parser *parser; + { + return parser->context->next != NULL; + } + /* Returns non-zero if TOKEN is a string literal. */ static bool *************** cp_parser_nested_name_specifier_opt (cp_ *** 3467,3484 **** /* Spot cases that cannot be the beginning of a nested-name-specifier. On the second and subsequent times through the loop, we look for the `template' keyword. */ ! if (success ! && cp_lexer_next_token_is_keyword (parser->lexer, ! RID_TEMPLATE)) ; /* A template-id can start a nested-name-specifier. */ ! else if (cp_lexer_next_token_is (parser->lexer, CPP_TEMPLATE_ID)) ; else { /* If the next token is not an identifier, then it is definitely not a class-or-namespace-name. */ ! if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)) break; /* If the following token is neither a `<' (to begin a template-id), nor a `::', then we are not looking at a --- 3475,3491 ---- /* Spot cases that cannot be the beginning of a nested-name-specifier. On the second and subsequent times through the loop, we look for the `template' keyword. */ ! token = cp_lexer_peek_token (parser->lexer); ! if (success && token->keyword == RID_TEMPLATE) ; /* A template-id can start a nested-name-specifier. */ ! else if (token->type == CPP_TEMPLATE_ID) ; else { /* If the next token is not an identifier, then it is definitely not a class-or-namespace-name. */ ! if (token->type != CPP_NAME) break; /* If the following token is neither a `<' (to begin a template-id), nor a `::', then we are not looking at a *************** cp_parser_parse_definitely (parser) *** 14844,14858 **** cp_parser_context_free_list = context; return !error_occurred; - } - - /* Returns non-zero if we are parsing tentatively. */ - - static bool - cp_parser_parsing_tentatively (parser) - cp_parser *parser; - { - return parser->context->next != NULL; } /* Returns true if we are parsing tentatively -- but have decided that --- 14851,14856 ---- From gcc-patches-return-74913-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 19:58:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17310 invoked by alias); 2 Jan 2003 19:58:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17292 invoked from network); 2 Jan 2003 19:58:22 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 19:58:22 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02Jsqs22632; Thu, 2 Jan 2003 11:54:52 -0800 Date: Thu, 02 Jan 2003 11:54:52 -0800 From: Mark Mitchell To: "ghazi@caip.rutgers.edu" , "gcc-gnats@gcc.gnu.org" cc: gcc-patches@gcc.gnu.org Subject: Re: [3.4 regression] new C++ parser failures on mips-irix6/sparc-solaris2 with g++.benjamin/15799.C g++.jason/overload28.C g++.law/arg1.C g++.mike/net2.C Message-ID: <80370000.1041537292@warlock.codesourcery.com> In-Reply-To: <20030102181633.24382.qmail@sources.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline > struct Foo { > Foo() { } > Foo(int i = 25) { } > }; > > int main() > { > Foo* f1 = new Foo(); > } This obvious fix corrects this test case. Would you be so kind as to test the other failures, and then close the PR, assuming all goes well? Applied on the mainline as an obvious fix. Thanks, -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-02 Mark Mitchell * call.c (build_new_method_call): Fix typo in message format string. Index: call.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/call.c,v retrieving revision 1.348 diff -c -5 -p -r1.348 call.c *** call.c 1 Jan 2003 11:58:56 -0000 1.348 --- call.c 2 Jan 2003 19:55:04 -0000 *************** build_new_method_call (tree instance, tr *** 4859,4869 **** { char *pretty_name; bool free_p; pretty_name = name_as_c_string (name, basetype, &free_p); ! error ("call of overloaded `%D(%A)' is ambiguous", pretty_name, user_args); print_z_candidates (candidates); if (free_p) free (pretty_name); return error_mark_node; --- 4859,4869 ---- { char *pretty_name; bool free_p; pretty_name = name_as_c_string (name, basetype, &free_p); ! error ("call of overloaded `%s(%A)' is ambiguous", pretty_name, user_args); print_z_candidates (candidates); if (free_p) free (pretty_name); return error_mark_node; From gcc-patches-return-74914-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:05:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21696 invoked by alias); 2 Jan 2003 20:05:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21681 invoked from network); 2 Jan 2003 20:05:34 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 20:05:34 -0000 Received: (from mitchell@localhost) by localhost.localdomain (8.11.6/8.11.6) id h02K25g22846; Thu, 2 Jan 2003 12:02:05 -0800 Date: Thu, 2 Jan 2003 12:02:05 -0800 Message-Id: <200301022002.h02K25g22846@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Subject: C++ PATCH: Fix PR 2843 Reply-to: mark@codesourcery.com This patch fixes PR 2843, which Neil tricked me into doing even though it's not a regression. :-) Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-02 Mark Mitchell PR c++/2843 * parser.c (cp_parser_parameter_declaration): Allow attributes to appear after the declarator. 2003-01-02 Mark Mitchell PR c++/2843 * g++.dg/ext/attrib7.C: New test. Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.12 diff -c -5 -p -r1.12 parser.c *** parser.c 1 Jan 2003 11:58:57 -0000 1.12 --- parser.c 2 Jan 2003 19:55:06 -0000 *************** cp_parser_parameter_declaration (parser, *** 10836,10845 **** --- 10836,10847 ---- if (!cp_parser_parse_definitely (parser)) declarator = cp_parser_declarator (parser, /*abstract_p=*/true, /*ctor_dtor_or_conv_p=*/NULL); parser->default_arg_ok_p = saved_default_arg_ok_p; + /* After the declarator, allow more attributes. */ + attributes = chainon (attributes, cp_parser_attributes_opt (parser)); } /* The restriction on definining new types applies only to the type of the parameter, not to the default argument. */ parser->type_definition_forbidden_message = saved_message; Index: testsuite/g++.dg/ext/attrib7.C =================================================================== RCS file: testsuite/g++.dg/ext/attrib7.C diff -N testsuite/g++.dg/ext/attrib7.C *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/g++.dg/ext/attrib7.C 2 Jan 2003 20:03:10 -0000 *************** *** 0 **** --- 1,3 ---- + // { dg-options "-Wunused-parameter" } + + void f (int i __attribute__((__unused__))) {} From gcc-patches-return-74915-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:21:46 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31531 invoked by alias); 2 Jan 2003 20:21:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31508 invoked from network); 2 Jan 2003 20:21:44 -0000 Received: from unknown (HELO sccrmhc03.attbi.com) (204.127.202.63) by 209.249.29.67 with SMTP; 2 Jan 2003 20:21:44 -0000 Received: from lucon.org (12-234-88-146.client.attbi.com[12.234.88.146]) by sccrmhc03.attbi.com (sccrmhc03) with ESMTP id <2003010220213200300lb9r5e>; Thu, 2 Jan 2003 20:21:32 +0000 Received: by lucon.org (Postfix, from userid 1000) id 556412C67D; Thu, 2 Jan 2003 12:21:31 -0800 (PST) Date: Thu, 2 Jan 2003 12:21:31 -0800 From: "H. J. Lu" To: Alexandre Oliva Cc: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: Re: PATCH: Support DESTDIR Message-ID: <20030102122131.A32713@lucon.org> References: <20030102104123.A27731@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: ; from aoliva@redhat.com on Thu, Jan 02, 2003 at 06:09:13PM -0200 On Thu, Jan 02, 2003 at 06:09:13PM -0200, Alexandre Oliva wrote: > On Jan 2, 2003, "H. J. Lu" wrote: > > > Makefile never passes DESTDIR to subdirectories and etc doesn't support > > it at all. "make install DESTDIR=/foo/bar" doesn't work. This patch > > seems to work for me. > > This patch is ok, but it must be submitted to gcc-patches too since > the top level is kept in sync between the two repositories. If you > have write access to GCC too, please check the top-level changes there > too, otherwise please wait for someone else who has access to both > trees to put it in at the same time. Thanks, > Makefile.tpl and Makefile.in are in sync. etc isn't used by gcc. H.J. ---- 2003-01-02 H.J. Lu * Makefile.tpl (BASE_FLAGS_TO_PASS): Add DESTDIR. * Makefile.in: Regenerated. etc/ 2003-01-02 H.J. Lu * Makefile.in (DESTDIR): New. (install-info): Use it. --- binutils/Makefile.in.dest Thu Jan 2 09:52:20 2003 +++ binutils/Makefile.in Thu Jan 2 10:31:36 2003 @@ -372,6 +372,7 @@ all: all.normal # Flags to pass down to all sub-makes. # Please keep these in alphabetical order. BASE_FLAGS_TO_PASS = \ + "DESTDIR=$(DESTDIR)" \ "AR_FLAGS=$(AR_FLAGS)" \ "AR_FOR_TARGET=$(AR_FOR_TARGET)" \ "AS_FOR_TARGET=$(AS_FOR_TARGET)" \ --- binutils/Makefile.tpl.dest Thu Jan 2 09:42:17 2003 +++ binutils/Makefile.tpl Thu Jan 2 10:31:45 2003 @@ -375,6 +375,7 @@ all: all.normal # Flags to pass down to all sub-makes. # Please keep these in alphabetical order. BASE_FLAGS_TO_PASS = \ + "DESTDIR=$(DESTDIR)" \ "AR_FLAGS=$(AR_FLAGS)" \ "AR_FOR_TARGET=$(AR_FOR_TARGET)" \ "AS_FOR_TARGET=$(AS_FOR_TARGET)" \ --- binutils/etc/Makefile.in.dest Thu Jan 31 15:59:04 2002 +++ binutils/etc/Makefile.in Thu Jan 2 10:40:02 2003 @@ -2,6 +2,8 @@ # Makefile.in for etc # +DESTDIR = + prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -68,17 +70,17 @@ info: done install-info: info - $(SHELL) $(srcdir)/../mkinstalldirs $(infodir) + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(infodir) if test ! -f standards.info; then cd $(srcdir); fi; \ if test -f standards.info; then \ for i in standards.info*; do \ - $(INSTALL_DATA) $$i $(infodir)/$$i; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \ done; \ fi if test ! -f configure.info; then cd $(srcdir); fi; \ if test -f configure.info; then \ for i in configure.info*; do \ - $(INSTALL_DATA) $$i $(infodir)/$$i; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \ done; \ fi From gcc-patches-return-74916-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:31:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3968 invoked by alias); 2 Jan 2003 20:31:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3941 invoked from network); 2 Jan 2003 20:31:08 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 20:31:08 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02KRZs31124; Thu, 2 Jan 2003 12:27:35 -0800 Date: Thu, 02 Jan 2003 12:27:35 -0800 From: Mark Mitchell To: John David Anglin , "neil@gcc.gnu.org" , "dave.anglin@nrc.ca" , "gcc-bugs@gcc.gnu.org" cc: gcc-patches@gcc.gnu.org Subject: Re: c++/2843: parser: __attribute__ on parameter declarations Message-ID: <89020000.1041539255@warlock.codesourcery.com> In-Reply-To: <200301021536.h02Fa9Jr010324@hiauly1.hia.nrc.ca> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline > Mark, I would also appreciate somebody looking at the following report > which appears to be related to the above problem: > > . I checked in this patch to fix the problem. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-02 Mark Mitchell * parser.c (cp_parser_declaration): Accept the __extension__ keyword before the declaration. Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.14 diff -c -p -r1.14 parser.c *** parser.c 2 Jan 2003 19:45:12 -0000 1.14 --- parser.c 2 Jan 2003 20:28:54 -0000 *************** cp_parser_declaration_seq_opt (parser) *** 6533,6539 **** explicit-instantiation explicit-specialization linkage-specification ! namespace-definition */ static void cp_parser_declaration (parser) --- 6533,6544 ---- explicit-instantiation explicit-specialization linkage-specification ! namespace-definition ! ! GNU extension: ! ! declaration: ! __extension__ declaration */ static void cp_parser_declaration (parser) *************** cp_parser_declaration (parser) *** 6541,6546 **** --- 6546,6563 ---- { cp_token token1; cp_token token2; + int saved_pedantic; + + /* Check for the `__extension__' keyword. */ + if (cp_parser_extension_opt (parser, &saved_pedantic)) + { + /* Parse the qualified declaration. */ + cp_parser_declaration (parser); + /* Restore the PEDANTIC flag. */ + pedantic = saved_pedantic; + + return; + } /* Try to figure out what kind of declaration is present. */ token1 = *cp_lexer_peek_token (parser->lexer); From gcc-patches-return-74917-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:32:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5582 invoked by alias); 2 Jan 2003 20:32:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5550 invoked from network); 2 Jan 2003 20:32:45 -0000 Received: from unknown (HELO smtp2.cp.tin.it) (212.216.176.222) by 209.249.29.67 with SMTP; 2 Jan 2003 20:32:45 -0000 Received: from unitus.it (80.181.224.119) by smtp2.cp.tin.it (6.5.029) id 3DEE435A009A8C99; Tue, 31 Dec 2002 10:15:16 +0100 Message-ID: <3E11608A.1080500@unitus.it> Date: Tue, 31 Dec 2002 10:16:58 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: mark@codesourcery.com CC: "gcc-patches@gcc.gnu.org" Subject: Re: C++ PATCH: Parser speedup References: <200212310005.gBV05Nw13393@gandalf.codesourcery.com> In-Reply-To: <200212310005.gBV05Nw13393@gandalf.codesourcery.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Mark Mitchell wrote: >This patch gets me about 17% on Paolo's first test case. > And I can confirm that (provided that something along the lines suggested by David is done for 'pending_lang_change' ;) the same improvement can be seen for my other testcase (Haney) Great! Paolo. From gcc-patches-return-74918-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:37:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8971 invoked by alias); 2 Jan 2003 20:37:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8961 invoked from network); 2 Jan 2003 20:37:27 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 2 Jan 2003 20:37:27 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h02KbDY12471; Thu, 2 Jan 2003 15:37:13 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h02KbCuR020037; Thu, 2 Jan 2003 18:37:12 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h02KbBsQ020033; Thu, 2 Jan 2003 18:37:11 -0200 To: "H. J. Lu" Cc: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: Re: PATCH: Support DESTDIR References: <20030102104123.A27731@lucon.org> <20030102122131.A32713@lucon.org> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 02 Jan 2003 18:37:11 -0200 In-Reply-To: <20030102122131.A32713@lucon.org> Message-ID: Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 2, 2003, "H. J. Lu" wrote: > Makefile.tpl and Makefile.in are in sync. etc isn't used by gcc. Actually, please hold the top-level part off. There's a patch from Christian Cornelssen that is a superset of yours that I'm reviewing right now. Feel free to put in the etc/ changes in the src repository, since those are not covered by his patch. Thanks, -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-74919-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:39:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9974 invoked by alias); 2 Jan 2003 20:39:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9962 invoked from network); 2 Jan 2003 20:39:10 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 2 Jan 2003 20:39:10 -0000 Received: from roscoe.constant.com (tooth.toronto.redhat.com [172.16.14.29]) by touchme.toronto.redhat.com (Postfix) with SMTP id 17F5D800095; Thu, 2 Jan 2003 15:38:58 -0500 (EST) Date: Thu, 2 Jan 2003 14:38:13 -0600 From: Benjamin Kosnik To: mark@codesourcery.com Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: V3 PATCH: Various pedantic fixes Message-Id: <20030102143813.34974847.bkoz@redhat.com> In-Reply-To: <200212272301.gBRN1Lk22661@localhost.localdomain> References: <200212272301.gBRN1Lk22661@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Thanks for this and the new C++ parser Mark. -benjamin >2002-12-27 Mark Mitchell > > * config/locale/gnu/ctype_members.cc > (ctype::_M_convert_to_wmask): Remove stray semicolon. > * config/locale/gnu/monetary_members.cc > (moneypunct::_M_initialize_moneypunct): Avoid > defining classes in static_cast. > (moneypunct::_M_initialize_moneypunct): Likewise. > * config/locale/gnu/numeric_members.cc > (numpunct::_M_initialize_numpunct): Likewise. > * include/bits/stl_deque.h (operator-): Insert typename where > required. > * include/bits/stl_multiset.h (multiset): Remove stray semicolon. > * include/bits/stl_set.h (set): Likewise. > * include/bits/valarray_meta.h (bits/slice_array.h): Include it. > * include/std/std_fstream.h (basic_fstream::open): Use this-> to > avoid Koenig lookup. > (basic_fstream::close): Likewise. > * libsupc++/new (operator delete): Remove stray semicolon. > * libsupc++/new (operator delete[]): Likewise. > * libsupc++/tinfo.cc: Likewise. > * src/stdexcept.c (logic_error::~logic_error): Likewise. > (runtime_error::~runtime_error): Likewise. From gcc-patches-return-74920-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 20:55:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20228 invoked by alias); 2 Jan 2003 20:55:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20203 invoked from network); 2 Jan 2003 20:55:13 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 2 Jan 2003 20:55:13 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h02KswY15465; Thu, 2 Jan 2003 15:54:58 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h02KsvuR020828; Thu, 2 Jan 2003 18:54:57 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h02Ksvgj020824; Thu, 2 Jan 2003 18:54:57 -0200 To: Christian Cornelssen Cc: Subject: Re: [3.4-bi] DESTDIR support completed References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 02 Jan 2003 18:54:56 -0200 In-Reply-To: Message-ID: Lines: 74 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 1, 2003, Christian Cornelssen wrote: > Here are the diffs against current mainline HEAD. Thanks for updating the patch, and sorry about not having reviewed the earlier versions thereof in a timely manner. > # Create the installation directories. > +# $(libdir)/gcc-lib/include isn't currently searched by cpp. > installdirs: > - -if [ -d $(prefix) ] ; then true ; else mkdir $(prefix) ; chmod a+rx $(prefix) ; fi > - -if [ -d $(exec_prefix) ] ; then true ; else mkdir $(exec_prefix) ; chmod a+rx $(exec_prefix) ; fi > - -if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; chmod a+rx $(libdir) ; fi > - -if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; chmod a+rx $(libdir)/gcc-lib ; fi > -# This dir isn't currently searched by cpp. > -# -if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; chmod a+rx $(libdir)/gcc-lib/include ; fi > - -fdir= ; for dir in `echo $(libsubdir) | tr '/' ' '`; do \ > - fdir=$${fdir}/$${dir}; \ > - if [ -d $${fdir} ] ; then true ; else mkdir $${fdir}; chmod a+rx $${fdir}; fi ; \ > + -for d in $(libsubdir) $(bindir) $(includedir) $(infodir) $(slibdir) $(man1dir) $(man7dir); do \ > + fdir=; for dir in `echo "$(DESTDIR)$$d" | tr '/' ' '`; do \ > + fdir=$${fdir}/$${dir}; \ > + if [ -d "$${fdir}" ] ; then true ; \ > + else mkdir "$${fdir}" || break; chmod a+rx "$${fdir}"; fi ; \ > + done; \ > done > - -if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; chmod a+rx $(bindir) ; fi > - -if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; chmod a+rx $(includedir) ; fi > - -if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; chmod a+rx $(infodir) ; fi > - -if [ -d $(slibdir) ] ; then true ; else mkdir $(slibdir) ; chmod a+rx $(slibdir) ; fi > -# We don't use mkdir -p to create the parents of man1dir, > -# because some systems don't support it. > -# Instead, we use this technique to create the immediate parent of man1dir. > - -parent=`echo $(man1dir)|sed -e 's@/[^/]*$$@@'`; \ > - if [ -d $$parent ] ; then true ; else mkdir $$parent ; chmod a+rx $$parent ; fi > - -if [ -d $(man1dir) ] ; then true ; else mkdir $(man1dir) ; chmod a+rx $(man1dir) ; fi > - -if [ -d $(man7dir) ] ; then true ; else mkdir $(man7dir) ; chmod a+rx $(man7dir) ; fi It looks like you're dropping the creation of prefix, exec_prefix, libdir and libdir/gcc-lib here. Since you're actually changing the code, I suppose we might as well go ahead and drop all this gunk and use mkinstalldirs instead. > Index: gcc/mkheaders.in I'm not sure you want DESTDIR support here. mkheaders is used when the package is already installed in the final location, not during make install, when DESTDIR actually matters. I won't oppose to its getting in, but I can't approve this change since it's not a change in the build machinery code. All other changes are ok, but we're going to need ChangeLog entries to put them in. In general, for such a large patch, we'd need copyright assignments, but since the changes are mostly mechanical, I don't think they can be covered by copyright, so we're probably safe. Incidentally, since they're not covered by copyright, we don't have to worry about updating the copyright notices of all modified files at this time. I suggest that we revert the change in installdirs, except for the addition of DESTDIR, and those in mkheaders, and address those in separate, smaller patches. How does that sound to you? Thanks a lot for the keeping on trying to get this patch in! It's useful, but since the patch is so big, it takes a big chunk of time to review, which I haven't had for a while... -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-74921-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 21:07:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27231 invoked by alias); 2 Jan 2003 21:07:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27218 invoked from network); 2 Jan 2003 21:07:23 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 2 Jan 2003 21:07:23 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18UCYP-0003XU-00 for ; Thu, 02 Jan 2003 21:07:01 +0000 Date: Thu, 2 Jan 2003 21:07:01 +0000 From: Neil Booth To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed c++/3650 Message-ID: <20030102210701.GA13599@daikokuya.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i Fixed by new parser. * g++.dg/parse/parse7.C: New test. Index: g++.dg/parse/parse7.C =================================================================== RCS file: g++.dg/parse/parse7.C diff -N g++.dg/parse/parse7.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/parse7.C 2 Jan 2003 21:05:39 -0000 @@ -0,0 +1,24 @@ +/* PR c++/3650 */ +/* { dg-do compile } */ + +class class1 { +public: + explicit class1(double a) { data = a; } + double data; +}; + +class class2 { +public: + class2(class1 a, float t) { } + class2(float t, class1 a) { } +}; + +int main() { + float t2 = 1.5; + double pir = 3.14159; + // Used to get: error: type specifier omitted for parameter `t2' + class2 h(class1(double(pir)), t2); + class2 i(class1(pir), t2); + + return 0; +} From gcc-patches-return-74922-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 21:39:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11549 invoked by alias); 2 Jan 2003 21:39:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11542 invoked from network); 2 Jan 2003 21:39:21 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 2 Jan 2003 21:39:21 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h02Ld4I27981 for ; Thu, 2 Jan 2003 13:39:05 -0800 (PST) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Thu, 2 Jan 2003 13:39:04 -0800 Received: from isolde (isolde.apple.com [17.201.24.249]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id h02Ld3Q20876; Thu, 2 Jan 2003 13:39:04 -0800 (PST) Date: Thu, 2 Jan 2003 13:40:35 -0800 Subject: Re: PATCH: improve vtable emission Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: Mark Mitchell , "gcc-patches@gcc.gnu.org" To: Nathan Sidwell From: Matt Austern In-Reply-To: <3E149110.3060008@codesourcery.com> Message-Id: Content-Transfer-Encoding: 7bit On Thursday, January 2, 2003, at 11:20 AM, Nathan Sidwell wrote: > Matt Austern wrote: >> On Monday, December 30, 2002, at 11:58 AM, Mark Mitchell wrote: >>> And why do we need to do this again? Oh, I see; dynamic_classes is >>> misnamed. Please rename it to something else more intuitive. >> Suggestions? I left it as dynamic_classes because I couldn't think >> of a name that was both accurate and manageable. (The actual >> concept, as described in a comment, is something like "classes >> whose vtables should be emitted.) classes_to_emit isn't too awful >> a name, but I'm not sure it's really an improvement on >> dynamic_classes. > keyed_classes? or variant thereof That sounds reasonable! OK, here's a revised version of the patch. I tested it with mainline, and it doesn't cause any new test failures. --Matt Index: gcc/cp/class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/class.c,v retrieving revision 1.507 diff -u -r1.507 class.c --- gcc/cp/class.c 1 Jan 2003 11:58:56 -0000 1.507 +++ gcc/cp/class.c 2 Jan 2003 21:31:00 -0000 @@ -5224,6 +5224,35 @@ splay_tree_delete (empty_base_offsets); } +/* Returns the virtual function with which the vtable for TYPE is + emitted, or NULL_TREE if that heuristic is not applicable to TYPE. */ + +static tree +key_method (tree type) +{ + tree method; + + if (TYPE_FOR_JAVA (type) + || processing_template_decl + || CLASSTYPE_TEMPLATE_INSTANTIATION (type) + || CLASSTYPE_INTERFACE_KNOWN (type)) + return NULL_TREE; + + for (method = TYPE_METHODS (type); method != NULL_TREE; + method = TREE_CHAIN (method)) + if (DECL_VINDEX (method) != NULL_TREE + && ! DECL_DECLARED_INLINE_P (method) + && (! DECL_PURE_VIRTUAL_P (method) +#if 0 + /* This would be nice, but we didn't think of it in time. */ + || DECL_DESTRUCTOR_P (method) +#endif + )) + return method; + + return NULL_TREE; +} + /* Perform processing required when the definition of T (a class type) is complete. */ @@ -5265,6 +5294,19 @@ bases and members and add implicitly generated methods. */ check_bases_and_members (t); + /* Find the key method */ + if (TYPE_CONTAINS_VPTR_P (t)) + { + CLASSTYPE_KEY_METHOD (t) = key_method (t); + + /* If a polymorphic class has no key method, we may emit the vtable + in every translation unit where the class definition appears. */ + if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE) + { + keyed_classes = tree_cons (NULL_TREE, t, keyed_classes); + } + } + /* Layout the class itself. */ layout_class_type (t, &virtuals); @@ -5342,9 +5384,6 @@ else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST) DECL_VINDEX (fndecl) = build_shared_int_cst (vindex); } - - /* Add this class to the list of dynamic classes. */ - dynamic_classes = tree_cons (NULL_TREE, t, dynamic_classes); } finish_struct_bits (t); Index: gcc/cp/cp-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/cp-tree.h,v retrieving revision 1.793 diff -u -r1.793 cp-tree.h --- gcc/cp/cp-tree.h 1 Jan 2003 11:58:58 -0000 1.793 +++ gcc/cp/cp-tree.h 2 Jan 2003 21:31:03 -0000 @@ -628,7 +628,7 @@ CPTI_DSO_HANDLE, CPTI_DCAST, - CPTI_DYNAMIC_CLASSES, + CPTI_KEYED_CLASSES, CPTI_MAX }; @@ -761,9 +761,10 @@ destructors. */ #define vtt_parm_type cp_global_trees[CPTI_VTT_PARM_TYPE] -/* A TREE_LIST of all of the dynamic classes in the program. */ +/* A TREE_LIST of the dynamic classes whose vtables may have to be + emitted in this translation unit. */ -#define dynamic_classes cp_global_trees[CPTI_DYNAMIC_CLASSES] +#define keyed_classes cp_global_trees[CPTI_KEYED_CLASSES] /* Global state. */ @@ -1182,6 +1183,7 @@ tree pure_virtuals; tree friend_classes; tree methods; + tree key_method; tree decl_list; tree template_info; tree befriending_classes; @@ -1301,6 +1303,11 @@ virtual base classes. If this is 0 for the root of a type hierarchy, then we can use more efficient search techniques. */ #define TYPE_USES_VIRTUAL_BASECLASSES(NODE) (TREE_LANG_FLAG_3 (NODE)) + +/* The member function with which the vtable will be emitted: + the first noninline non-pure-virtual member function. NULL_TREE + if there is no key function or if this is a class template */ +#define CLASSTYPE_KEY_METHOD(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->key_method) /* Vector member functions defined in this class. Each element is either a FUNCTION_DECL, a TEMPLATE_DECL, or an OVERLOAD. All Index: gcc/cp/decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v retrieving revision 1.978 diff -u -r1.978 decl.c --- gcc/cp/decl.c 1 Jan 2003 03:16:14 -0000 1.978 +++ gcc/cp/decl.c 2 Jan 2003 21:31:08 -0000 @@ -14352,6 +14352,17 @@ if (fndecl == NULL_TREE) return error_mark_node; + if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl) + && DECL_VIRTUAL_P (fndecl) + && !processing_template_decl) + { + tree fnclass = DECL_CLASS_CONTEXT (fndecl); + if (fndecl == CLASSTYPE_KEY_METHOD (fnclass)) + { + keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes); + } + } + nested = function_depth > 1; fntype = TREE_TYPE (fndecl); Index: gcc/cp/decl2.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl2.c,v retrieving revision 1.587 diff -u -r1.587 decl2.c --- gcc/cp/decl2.c 31 Dec 2002 19:43:14 -0000 1.587 +++ gcc/cp/decl2.c 2 Jan 2003 21:31:10 -0000 @@ -88,7 +88,6 @@ static tree prune_vars_needing_no_initialization (tree); static void write_out_vars (tree); static void import_export_class (tree); -static tree key_method (tree); static tree get_guard_bits (tree); /* A list of static class variables. This is needed, because a @@ -1536,29 +1535,6 @@ } } -/* Returns the virtual function with which the vtable for TYPE is - emitted, or NULL_TREE if that heuristic is not applicable to TYPE. */ - -static tree -key_method (tree type) -{ - tree method; - - if (TYPE_FOR_JAVA (type) - || CLASSTYPE_TEMPLATE_INSTANTIATION (type) - || CLASSTYPE_INTERFACE_KNOWN (type)) - return NULL_TREE; - - for (method = TYPE_METHODS (type); method != NULL_TREE; - method = TREE_CHAIN (method)) - if (DECL_VINDEX (method) != NULL_TREE - && ! DECL_DECLARED_INLINE_P (method) - && ! DECL_PURE_VIRTUAL_P (method)) - return method; - - return NULL_TREE; -} - /* Set TREE_PUBLIC and/or DECL_EXTERN on the vtable DECL, based on TYPE and other static flags. @@ -1589,7 +1565,7 @@ functions in our class, or if we come from a template. */ int found = (CLASSTYPE_TEMPLATE_INSTANTIATION (type) - || key_method (type)); + || CLASSTYPE_KEY_METHOD (type) != NULL_TREE); if (final || ! found) { @@ -1648,7 +1624,7 @@ if (import_export == 0 && TYPE_POLYMORPHIC_P (ctype)) { - tree method = key_method (ctype); + tree method = CLASSTYPE_KEY_METHOD (ctype); if (method) import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1); } @@ -2639,12 +2615,37 @@ instantiate_pending_templates (); /* Write out virtual tables as required. Note that writing out - the virtual table for a template class may cause the - instantiation of members of that class. */ - for (t = dynamic_classes; t; t = TREE_CHAIN (t)) - if (maybe_emit_vtables (TREE_VALUE (t))) - reconsider = true; - + the virtual table for a template class may cause the + instantiation of members of that class. If we write out + vtables then we remove the class from our list so we don't + have to look at it again. */ + + while (keyed_classes != NULL_TREE + && maybe_emit_vtables (TREE_VALUE (keyed_classes))) + { + reconsider = 1; + keyed_classes = TREE_CHAIN (keyed_classes); + } + + t = keyed_classes; + if (t != NULL_TREE) + { + tree next = TREE_CHAIN (t); + + while (next) + { + if (maybe_emit_vtables (TREE_VALUE (next))) + { + reconsider = 1; + TREE_CHAIN (t) = TREE_CHAIN (next); + } + else + t = next; + + next = TREE_CHAIN (t); + } + } + /* Write out needed type info variables. Writing out one variable might cause others to be needed. */ if (walk_globals (unemitted_tinfo_decl_p, emit_tinfo_decl, /*data=*/0)) Index: gcc/cp/pt.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/pt.c,v retrieving revision 1.641 diff -u -r1.641 pt.c --- gcc/cp/pt.c 1 Jan 2003 11:58:57 -0000 1.641 +++ gcc/cp/pt.c 2 Jan 2003 21:31:13 -0000 @@ -5487,6 +5487,9 @@ pop_from_top_level (); pop_tinst_level (); + if (TYPE_CONTAINS_VPTR_P (type)) + keyed_classes = tree_cons (NULL_TREE, type, keyed_classes); + return type; } From gcc-patches-return-74923-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 21:56:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20520 invoked by alias); 2 Jan 2003 21:56:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20502 invoked from network); 2 Jan 2003 21:56:44 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 2 Jan 2003 21:56:44 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h02LrDs31134; Thu, 2 Jan 2003 13:53:13 -0800 Date: Thu, 02 Jan 2003 13:53:13 -0800 From: Mark Mitchell To: Benjamin Kosnik cc: "gcc-patches@gcc.gnu.org" , "libstdc++@gcc.gnu.org" Subject: Re: V3 PATCH: Various pedantic fixes Message-ID: <90720000.1041544393@warlock.codesourcery.com> In-Reply-To: <20030102143813.34974847.bkoz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Thursday, January 02, 2003 02:38:13 PM -0600 Benjamin Kosnik wrote: > > Thanks for this and the new C++ parser Mark. You're welcome. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74924-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 22:15:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27553 invoked by alias); 2 Jan 2003 22:15:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27431 invoked from network); 2 Jan 2003 22:15:44 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 2 Jan 2003 22:15:44 -0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 199164DE6F; Thu, 2 Jan 2003 23:15:37 +0100 (CET) Date: Thu, 2 Jan 2003 23:15:37 +0100 From: Jan Hubicka To: gcc-patches@gcc.gnu.org, rth@cygnus.com Subject: tweak imul code generation Message-ID: <20030102221537.GA6162@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, this patch fixes imul patterns that were overly strict in constraints for unknown reason. It also sets properly the athlon_decoder attribute on k8 and adds peepholers converting some of slow cases into fast ones (I am still benchmarking the last part of change, but it should be win). Bootstrapped/regtested mainline. OK? Thu Jan 2 20:41:34 CET 2003 Jan Hubicka * i386.md (*mul*): FIx constraints; remove confused comment; fix athlon_decode attributes (imul/k8 optimization peep2s): New. Index: i386.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.md,v retrieving revision 1.380.2.13 diff -c -3 -p -r1.380.2.13 i386.md *** i386.md 29 Dec 2002 10:22:55 -0000 1.380.2.13 --- i386.md 2 Jan 2003 18:34:55 -0000 *************** *** 6906,6912 **** (define_insn "*muldi3_1_rex64" [(set (match_operand:DI 0 "register_operand" "=r,r,r") ! (mult:DI (match_operand:DI 1 "nonimmediate_operand" "%rm,0,0") (match_operand:DI 2 "x86_64_general_operand" "K,e,mr"))) (clobber (reg:CC 17))] "TARGET_64BIT --- 6925,6931 ---- (define_insn "*muldi3_1_rex64" [(set (match_operand:DI 0 "register_operand" "=r,r,r") ! (mult:DI (match_operand:DI 1 "nonimmediate_operand" "%rm,rm,0") (match_operand:DI 2 "x86_64_general_operand" "K,e,mr"))) (clobber (reg:CC 17))] "TARGET_64BIT *************** *** 6917,6922 **** --- 6936,6950 ---- imul{q}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") + (set (attr "athlon_decode") + (cond [(eq_attr "cpu" "athlon") + (const_string "vector") + (eq_attr "alternative" "1") + (const_string "vector") + (and (eq_attr "alternative" "2") + (match_operand 1 "memory_operand" "")) + (const_string "vector")] + (const_string "direct"))) (set_attr "mode" "DI")]) (define_expand "mulsi3" *************** *** 6929,6984 **** (define_insn "*mulsi3_1" [(set (match_operand:SI 0 "register_operand" "=r,r,r") ! (mult:SI (match_operand:SI 1 "nonimmediate_operand" "%rm,0,0") (match_operand:SI 2 "general_operand" "K,i,mr"))) (clobber (reg:CC 17))] "GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM" - ; For the {r,0,i} alternative (i.e., register <- register * immediate), - ; there are two ways of writing the exact same machine instruction - ; in assembly language. One, for example, is: - ; - ; imul $12, %eax - ; - ; while the other is: - ; - ; imul $12, %eax, %eax - ; - ; The first is simply short-hand for the latter. But, some assemblers, - ; like the SCO OSR5 COFF assembler, don't handle the first form. "@ imul{l}\t{%2, %1, %0|%0, %1, %2} imul{l}\t{%2, %1, %0|%0, %1, %2} imul{l}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "SI")]) (define_insn "*mulsi3_1_zext" [(set (match_operand:DI 0 "register_operand" "=r,r,r") (zero_extend:DI ! (mult:SI (match_operand:SI 1 "nonimmediate_operand" "%rm,0,0") (match_operand:SI 2 "general_operand" "K,i,mr")))) (clobber (reg:CC 17))] "TARGET_64BIT && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - ; For the {r,0,i} alternative (i.e., register <- register * immediate), - ; there are two ways of writing the exact same machine instruction - ; in assembly language. One, for example, is: - ; - ; imul $12, %eax - ; - ; while the other is: - ; - ; imul $12, %eax, %eax - ; - ; The first is simply short-hand for the latter. But, some assemblers, - ; like the SCO OSR5 COFF assembler, don't handle the first form. "@ imul{l}\t{%2, %1, %k0|%k0, %1, %2} imul{l}\t{%2, %1, %k0|%k0, %1, %2} imul{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "SI")]) (define_expand "mulhi3" --- 6957,7006 ---- (define_insn "*mulsi3_1" [(set (match_operand:SI 0 "register_operand" "=r,r,r") ! (mult:SI (match_operand:SI 1 "nonimmediate_operand" "%rm,rm,0") (match_operand:SI 2 "general_operand" "K,i,mr"))) (clobber (reg:CC 17))] "GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM" "@ imul{l}\t{%2, %1, %0|%0, %1, %2} imul{l}\t{%2, %1, %0|%0, %1, %2} imul{l}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") + (set (attr "athlon_decode") + (cond [(eq_attr "cpu" "athlon") + (const_string "vector") + (eq_attr "alternative" "1") + (const_string "vector") + (and (eq_attr "alternative" "2") + (match_operand 1 "memory_operand" "")) + (const_string "vector")] + (const_string "direct"))) (set_attr "mode" "SI")]) (define_insn "*mulsi3_1_zext" [(set (match_operand:DI 0 "register_operand" "=r,r,r") (zero_extend:DI ! (mult:SI (match_operand:SI 1 "nonimmediate_operand" "%rm,rm,0") (match_operand:SI 2 "general_operand" "K,i,mr")))) (clobber (reg:CC 17))] "TARGET_64BIT && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "@ imul{l}\t{%2, %1, %k0|%k0, %1, %2} imul{l}\t{%2, %1, %k0|%k0, %1, %2} imul{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") + (set (attr "athlon_decode") + (cond [(eq_attr "cpu" "athlon") + (const_string "vector") + (eq_attr "alternative" "1") + (const_string "vector") + (and (eq_attr "alternative" "2") + (match_operand 1 "memory_operand" "")) + (const_string "vector")] + (const_string "direct"))) (set_attr "mode" "SI")]) (define_expand "mulhi3" *************** *** 6991,7008 **** (define_insn "*mulhi3_1" [(set (match_operand:HI 0 "register_operand" "=r,r,r") ! (mult:HI (match_operand:HI 1 "nonimmediate_operand" "%rm,0,0") (match_operand:HI 2 "general_operand" "K,i,mr"))) (clobber (reg:CC 17))] "GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM" - ; %%% There was a note about "Assembler has weird restrictions", - ; concerning alternative 1 when op1 == op0. True? "@ imul{w}\t{%2, %1, %0|%0, %1, %2} imul{w}\t{%2, %1, %0|%0, %1, %2} imul{w}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "HI")]) (define_expand "mulqi3" --- 7013,7034 ---- (define_insn "*mulhi3_1" [(set (match_operand:HI 0 "register_operand" "=r,r,r") ! (mult:HI (match_operand:HI 1 "nonimmediate_operand" "%rm,rm,0") (match_operand:HI 2 "general_operand" "K,i,mr"))) (clobber (reg:CC 17))] "GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM" "@ imul{w}\t{%2, %1, %0|%0, %1, %2} imul{w}\t{%2, %1, %0|%0, %1, %2} imul{w}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") + (set (attr "athlon_decode") + (cond [(eq_attr "cpu" "athlon") + (const_string "vector") + (eq_attr "alternative" "1,2") + (const_string "vector")] + (const_string "direct"))) (set_attr "mode" "HI")]) (define_expand "mulqi3" *************** *** 7023,7028 **** --- 7049,7058 ---- "mul{b}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "direct"))) (set_attr "mode" "QI")]) (define_expand "umulqihi3" *************** *** 7045,7050 **** --- 7075,7084 ---- "mul{b}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "direct"))) (set_attr "mode" "QI")]) (define_expand "mulqihi3" *************** *** 7065,7070 **** --- 7099,7108 ---- "imul{b}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "direct"))) (set_attr "mode" "QI")]) (define_expand "umulditi3" *************** *** 7088,7093 **** --- 7126,7135 ---- [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "DI")]) ;; We can't use this pattern in 64bit mode, since it results in two separate 32bit registers *************** *** 7112,7117 **** --- 7154,7163 ---- [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "SI")]) (define_expand "mulditi3" *************** *** 7134,7139 **** --- 7180,7189 ---- "imul{q}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "DI")]) (define_expand "mulsidi3" *************** *** 7156,7161 **** --- 7206,7215 ---- "imul{l}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "SI")]) (define_expand "umuldi3_highpart" *************** *** 7189,7194 **** --- 7243,7252 ---- [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "DI")]) (define_expand "umulsi3_highpart" *************** *** 7221,7226 **** --- 7279,7288 ---- [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "SI")]) (define_insn "*umulsi3_highpart_zext" *************** *** 7240,7245 **** --- 7302,7311 ---- [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "SI")]) (define_expand "smuldi3_highpart" *************** *** 7272,7277 **** --- 7338,7347 ---- "imul{q}\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "DI")]) (define_expand "smulsi3_highpart" *************** *** 7303,7308 **** --- 7373,7382 ---- "imul{l}\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "SI")]) (define_insn "*smulsi3_highpart_zext" *************** *** 7321,7326 **** --- 7395,7404 ---- "imul{l}\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") + (set (attr "athlon_decode") + (if_then_else (eq_attr "cpu" "athlon") + (const_string "vector") + (const_string "double"))) (set_attr "mode" "SI")]) ;; The patterns that match these are at the end of this file. *************** *** 18049,18054 **** --- 18127,18228 ---- (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))])] "") + ;; Imul $32bit_imm, mem, reg is vector decoded, while + ;; imul $32bit_imm, reg, reg is direct decoded. + (define_peephole2 + [(match_scratch:DI 3 "r") + (parallel [(set (match_operand:DI 0 "register_operand" "") + (mult:DI (match_operand:DI 1 "memory_operand" "") + (match_operand:DI 2 "immediate_operand" ""))) + (clobber (reg:CC 17))])] + "TARGET_K8 && !optimize_size + && (GET_CODE (operands[2]) != CONST_INT + || !CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K'))" + [(set (match_dup 3) (match_dup 1)) + (parallel [(set (match_dup 0) (mult:DI (match_dup 3) (match_dup 2))) + (clobber (reg:CC 17))])] + "") + + (define_peephole2 + [(match_scratch:SI 3 "r") + (parallel [(set (match_operand:SI 0 "register_operand" "") + (mult:SI (match_operand:SI 1 "memory_operand" "") + (match_operand:SI 2 "immediate_operand" ""))) + (clobber (reg:CC 17))])] + "TARGET_K8 && !optimize_size + && (GET_CODE (operands[2]) != CONST_INT + || !CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K'))" + [(set (match_dup 3) (match_dup 1)) + (parallel [(set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2))) + (clobber (reg:CC 17))])] + "") + + (define_peephole2 + [(match_scratch:SI 3 "r") + (parallel [(set (match_operand:DI 0 "register_operand" "") + (zero_extend:DI + (mult:SI (match_operand:SI 1 "memory_operand" "") + (match_operand:SI 2 "immediate_operand" "")))) + (clobber (reg:CC 17))])] + "TARGET_K8 && !optimize_size + && (GET_CODE (operands[2]) != CONST_INT + || !CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K'))" + [(set (match_dup 3) (match_dup 1)) + (parallel [(set (match_dup 0) (zero_extend:DI (mult:SI (match_dup 3) (match_dup 2)))) + (clobber (reg:CC 17))])] + "") + + ;; imul $8/16bit_imm, regmem, reg is vector decoded. + ;; Convert it into imul reg, reg + ;; It would be better to force assembler to encode instruction using long + ;; immediate, but there is apparently no way to do so. + (define_peephole2 + [(parallel [(set (match_operand:DI 0 "register_operand" "") + (mult:DI (match_operand:DI 1 "nonimmediate_operand" "") + (match_operand:DI 2 "const_int_operand" ""))) + (clobber (reg:CC 17))]) + (match_scratch:DI 3 "r")] + "TARGET_K8 && !optimize_size + && CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K')" + [(set (match_dup 3) (match_dup 2)) + (parallel [(set (match_dup 0) (mult:DI (match_dup 0) (match_dup 3))) + (clobber (reg:CC 17))])] + { + if (!rtx_equal_p (operands[0], operands[1])) + emit_move_insn (operands[0], operands[1]); + }) + + (define_peephole2 + [(parallel [(set (match_operand:SI 0 "register_operand" "") + (mult:SI (match_operand:SI 1 "nonimmediate_operand" "") + (match_operand:SI 2 "const_int_operand" ""))) + (clobber (reg:CC 17))]) + (match_scratch:SI 3 "r")] + "TARGET_K8 && !optimize_size + && CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K')" + [(set (match_dup 3) (match_dup 2)) + (parallel [(set (match_dup 0) (mult:SI (match_dup 0) (match_dup 3))) + (clobber (reg:CC 17))])] + { + if (!rtx_equal_p (operands[0], operands[1])) + emit_move_insn (operands[0], operands[1]); + }) + + (define_peephole2 + [(parallel [(set (match_operand:HI 0 "register_operand" "") + (mult:HI (match_operand:HI 1 "nonimmediate_operand" "") + (match_operand:HI 2 "immediate_operand" ""))) + (clobber (reg:CC 17))]) + (match_scratch:HI 3 "r")] + "TARGET_K8 && !optimize_size" + [(set (match_dup 3) (match_dup 2)) + (parallel [(set (match_dup 0) (mult:HI (match_dup 0) (match_dup 3))) + (clobber (reg:CC 17))])] + { + if (!rtx_equal_p (operands[0], operands[1])) + emit_move_insn (operands[0], operands[1]); + }) + ;; Call-value patterns last so that the wildcard operand does not ;; disrupt insn-recog's switch tables. From gcc-patches-return-74925-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 22:47:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7203 invoked by alias); 2 Jan 2003 22:47:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7196 invoked from network); 2 Jan 2003 22:47:34 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 2 Jan 2003 22:47:34 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id A1425ABAF8 for ; Thu, 2 Jan 2003 22:47:22 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 5105EF7F9F; Thu, 2 Jan 2003 22:47:14 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: [libstdc++] atomicity.h PATCH From: Jason Merrill Date: Thu, 02 Jan 2003 17:47:14 -0500 Message-ID: Lines: 82 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= The constraints in the i486 and m68k patterns were broken; they failed to record that *__mem is also used for output. This caused problems with the tree-ssa branch. Tested i686-pc-linux-gnu, applied to trunk. 2003-01-02 Jason Merrill * config/cpu/i486/atomicity.h (__exchange_and_add, __atomic_add): *__mem is also an output. * config/cpu/m68k/atomicity.h (__exchange_and_add): Likewise. --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** ./config/cpu/i486/atomicity.h.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./config/cpu/i486/atomicity.h 2003-01-01 16:54:04.000000000 -0500 *************** __attribute__ ((__unused__)) *** 37,45 **** __exchange_and_add (volatile _Atomic_word *__mem, int __val) { register _Atomic_word __result; ! __asm__ __volatile__ ("lock; xaddl %0,%2" ! : "=r" (__result) ! : "0" (__val), "m" (*__mem) : "memory"); return __result; } --- 37,45 ---- __exchange_and_add (volatile _Atomic_word *__mem, int __val) { register _Atomic_word __result; ! __asm__ __volatile__ ("lock; xaddl %0,%1" ! : "=r" (__result), "+m" (*__mem) ! : "0" (__val) : "memory"); return __result; } *************** static inline void *** 48,55 **** __attribute__ ((__unused__)) __atomic_add (volatile _Atomic_word* __mem, int __val) { ! __asm__ __volatile__ ("lock; addl %0,%1" ! : : "ir" (__val), "m" (*__mem) : "memory"); } #endif /* atomicity.h */ --- 48,55 ---- __attribute__ ((__unused__)) __atomic_add (volatile _Atomic_word* __mem, int __val) { ! __asm__ __volatile__ ("lock; addl %1,%0" ! : "+m" (*__mem) : "ir" (__val) : "memory"); } #endif /* atomicity.h */ *** ./config/cpu/m68k/atomicity.h.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./config/cpu/m68k/atomicity.h 2003-01-01 19:35:41.000000000 -0500 *************** __exchange_and_add (volatile _Atomic_wor *** 43,53 **** register _Atomic_word __result = *__mem; register _Atomic_word __temp; __asm__ __volatile__ ("1: move%.l %0,%1\n\t" ! "add%.l %2,%1\n\t" ! "cas%.l %0,%1,%3\n\t" "jne 1b" ! : "=d" (__result), "=&d" (__temp) ! : "d" (__val), "m" (*__mem), "0" (__result) : "memory"); return __result; } --- 43,53 ---- register _Atomic_word __result = *__mem; register _Atomic_word __temp; __asm__ __volatile__ ("1: move%.l %0,%1\n\t" ! "add%.l %3,%1\n\t" ! "cas%.l %0,%1,%2\n\t" "jne 1b" ! : "=d" (__result), "=&d" (__temp), "+m" (*__mem) ! : "d" (__val), "0" (__result) : "memory"); return __result; } --=-=-=-- From gcc-patches-return-74926-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 00:38:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21547 invoked by alias); 3 Jan 2003 00:38:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21516 invoked from network); 3 Jan 2003 00:38:47 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 3 Jan 2003 00:38:47 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id E44FCABAF8 for ; Fri, 3 Jan 2003 00:38:30 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 311A9F7F9F; Fri, 3 Jan 2003 00:37:58 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: [tree-ssa] C++ simplification patch From: Jason Merrill Date: Thu, 02 Jan 2003 19:37:57 -0500 Message-ID: Lines: 3588 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= At long last, here's the patch which implements simplification of C++. The remaining failures are mostly for line number differences and -Wswitch, as with the C frontend. At first I had thought I only needed to add EH support, but of course that was naive; most of the work had to do with various quirks of how the C++ frontend handles initialization. Some things I'm still uncomfortable with: The hoops I'm jumping through to deal with C++ initialization semantics, particularly in returns, by adding new parms for simplify_modify_expr and simplify_cond_expr. Suggestions of a better way are welcome. Handling of temporary variables created by the frontends. Currently the genericizer assumes that an artificial decl with no name has not been pushed into a block, so it should be added to the main list of temps. This seems rather fragile, but it also seems to match existing practice. EH_FILTER_MUST_NOT_THROW is kind of a kludge, but doing better would require the backend to understand the difference between terminate and unexpected. EH handling of cleanups -- C++ says that if a cleanup run as a result of throwing an exception also throws, we call terminate. However, if a cleanup run as a result of flowing off the end of a block throws, we propagate that exception. This distinction is currently handled by the expander, controlled by lang_protect_cleanup_actions. This works, but it's flow information which is hidden from the tree optimizers. Lowering TRY_FINALLY_EXPR should solve this problem. Other notes: Note that with this patch all the testcases which use old-style named return values will crash. I don't care, as Mark has removed that support from the new parser. All tree optimizers are currently disabled for C++. Remove the "&& 0" in cp/optimize.c:optimize_function to enable them. Tested i686-pc-linux-gnu. ChangeLog: 2003-01-02 Jason Merrill * c-common.c (finish_fname_decls): Put the DECL_STMTs inside the outermost scope. * c-decl.c (c_make_fname_decl): Push the decls there, too. * fold-const.c (fold) [COND_EXPR]: Avoid NOP_EXPRs better. * integrate.c (copy_decl_for_inlining): Don't clear the rtl for static/external decls. ChangeLog.tree-ssa: 2003-01-02 Jason Merrill * c-simplify.c (c_genericize): Dump more info about the function. Use dump_function. * tree-dump.c (dump_function): Move from cp/optimize.c. * tree-dump.h: Declare it. * gimplify.c (mostly_copy_tree_r): Remove unnecessary cases. (unshare_expr): New fn. * tree-inline.c (mark_local_for_remap_r, unsave_r): New fns, adapted from C++ versions. (lhd_unsave_expr_now): Likewise. * tree.c (unsave_expr_now): Remove. (unsafe_for_reeval): Labels and BIND_EXPRs are only somewhat unsafe. * gimplify.c (simplify_function_tree): Add an outer BIND_EXPR if needed. (voidify_wrapper_expr): Not static. Abort if we try to voidify an expression with TREE_ADDRESSABLE type. Be clever with INDIRECT_REFs. (foreach_stmt): Avoid redundant work. (create_tmp_var): Abort if we try to create a temp of ADDRESSABLE type. (simplify_expr): Simplify VTABLE_REF. * c-simplify.c (simplify_decl_stmt): Ignore DECL_EXTERNAL decls. (simplify_stmt_expr): Fix thinko. (simplify_block): Don't ignore partial scopes. (simplify_condition): New fn. (simplify_c_loop, simplify_if_stmt, simplify_switch_stmt): Call it. * expr.c (expand_expr) [BIND_EXPR]: Handle statics better. * tree-inline.c (remap_decl): Remap all decls. (declare_return_variable): Be clever with INDIRECT_REFs. (expand_call_inline): If we have an explicit return slot, the inlined body is void. (walk_tree): Fix type handling. (copy_tree_r): Don't walk into decls. * tree-simple.c (is_simple_unary_expr): Handle VTABLE_REF. (is_simple_id): Allow RESULT_DECL. * tree-simple.h (gsi_stmt): Strip WFLs and NOPs. * gimplify.c (simplify_cond_expr): Handle void arms. Add target parm. (simplify_modify_expr): Pass it. Add special handling for COND_EXPR and CONSTRUCTOR (from Daniel Berlin). Add want_value parm. (simplify_expr): Pass new args. Loop sooner if language-specific simplification happened. (simplify_return_expr): Pass the whole MODIFY_EXPR to simplify_expr. (simplify_target_expr): Simplify. * tree.def (CATCH_EXPR, EH_FILTER_EXPR): New tree codes. * except.c (expand_eh_handler): New fn. (expand_eh_region_end_allowed): If no types are allowed, hand off to expand_eh_region_end_must_not_throw. * except.h: Declare expand_eh_handler. * expr.c (expand_expr) [TRY_CATCH_EXPR]: Use it. [CATCH_EXPR, EH_FILTER_EXPR]: New cases. * gimplify.c (simplify_expr) [EXC_PTR_EXPR, CATCH_EXPR, EH_FILTER_EXPR]: New cases. (gimple_build_eh_filter): New fn. (maybe_protect_cleanup): New fn. (gimple_push_cleanup): Call it. (simplify_cleanup_point_expr): Fix thinko. * c-simplify.c (simplify_cleanup): Call it. * tree-simple.h: Declare it. * Makefile.in (gimplify.o): Depend on except.h. * tree.h (CATCH_TYPES, CATCH_BODY): New macros. (EH_FILTER_TYPES, EH_FILTER_FAILURE): New macros. * tree-simple.c (is_simple_id): Allow EXC_PTR_EXPR. * c-pretty-print.c (dump_c_node) [CLEANUP_POINT_EXPR]: Support. * tree-pretty-print.c (dump_generic_node): Likewise. [CATCH_EXPR, EH_FILTER_EXPR, EXC_PTR_EXPR]: Support. * c-pretty-print.c (NIY): Print operands. (dump_c_tree): Don't look at TREE_CHAIN if it doesn't matter. (dump_c_node) [ARRAY_TYPE]: Handle non-constant array bounds. [CALL_EXPR]: Pass spc down. [VTABLE_REF]: Support. (op_prio) [TARGET_EXPR]: Support. (print_call_name): Handle function pointers. * tree-pretty-print.c: Likewise. cp/ChangeLog: 2003-01-02 Jason Merrill * call.c (build_conditional_expr): Stabilize lvalues properly. * cvt.c (ocp_convert): Don't build NOP_EXPRs of class type. * call.c (convert_like_real): Call decl_constant_value for an IDENTITY_CONV even if there are no more conversions. * cvt.c (build_up_reference): Don't push unnamed temps. * decl.c (cp_make_fname_decl): Push the decls inside the outermost scope. * decl2.c (do_namespace_alias): Namespace aliases are DECL_EXTERNAL. * dump.c (cp_dump_tree): Don't try to dump class-specific fields for a backend struct. * except.c (wrap_cleanups_r, build_throw): Make MUST_NOT_THROW_EXPRs void. * init.c (expand_default_init): Update to handle MUST_NOT_THROW_EXPR. * init.c (build_vec_delete_1): Pre-evaluate the base address. * init.c (get_temp_regvar): Tweak. * tree.c (lvalue_p_1): Don't allow sloppy NOP_EXPRs as lvalues. Don't allow CALL_EXPR or VA_ARG_EXPR, either. * tree.c (cp_copy_res_decl_for_inlining): Only do debug tweaks if our replacement is a decl. cp/ChangeLog.tree-ssa: 2003-01-02 Jason Merrill * Make-lang.in (CXX_C_OBJS): Replace old-tree-inline.o with tree-inline.o. * optimize.c (dump_function): Move to ../tree-dump.c. * cp-simplify.c (cp_simplify_expr): Handle PTRMEM_CST, INIT_EXPR, MODIFY_EXPR and EMPTY_CLASS_EXPR. (cp_simplify_stmt): Handle USING_STMT. (cp_simplify_init_expr): New fn. * cvt.c (build_up_reference): Don't push the decl. * class.c (build_vtable_entry_ref, build_vtbl_ref_1): Unshare the vtable address. * init.c (build_vtbl_address): Likewise. * cp-lang.c (LANG_HOOKS_UNSAVE_EXPR_NOW): Remove. * decl.c (lookup_name_real): Unshare the expansion of an ALIAS_DECL. (finish_function): Don't genericize templates. * parse.y (parse_asm_stmt): Fix prototype. * semantics.c (expand_body): Don't expand if we saw errors. Drop support for expanding non-GENERIC code. * cp-simplify.c (cp_simplify_stmt): Handle HANDLER and EH_SPEC_BLOCK. (genericize_try_block): Always build a TRY_CATCH_EXPR. (genericize_catch_block): New fn. (genericize_eh_spec_block): New fn. (cp_simplify_expr): Handle THROW_EXPR and MUST_NOT_THROW_EXPR. (simplify_must_not_throw_expr): New fn. * except.c (wrap_cleanups_r): Make the MUST_NOT_THROW_EXPR void. (build_throw): Likewise. --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** ./cp/Make-lang.in.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./cp/Make-lang.in 2002-12-14 23:07:36.000000000 -0500 *************** g++-cross$(exeext): g++$(exeext) *** 80,86 **** # Shared with C front end: CXX_C_OBJS = attribs.o c-common.o c-format.o c-pragma.o c-semantics.o c-lex.o \ c-dump.o $(CXX_TARGET_OBJS) c-opts.o c-simplify.o c-pretty-print.o \ ! old-tree-inline.o # Language-specific object files. CXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \ --- 80,86 ---- # Shared with C front end: CXX_C_OBJS = attribs.o c-common.o c-format.o c-pragma.o c-semantics.o c-lex.o \ c-dump.o $(CXX_TARGET_OBJS) c-opts.o c-simplify.o c-pretty-print.o \ ! tree-inline.o # Language-specific object files. CXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \ *** ./cp/call.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./cp/call.c 2003-01-02 11:43:03.000000000 -0500 *************** build_conditional_expr (tree arg1, tree *** 2997,3003 **** { if (pedantic) pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression"); ! arg1 = arg2 = save_expr (arg1); } /* [expr.cond] --- 2997,3006 ---- { if (pedantic) pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression"); ! if (real_lvalue_p (arg1)) ! arg2 = arg1 = stabilize_reference (arg1); ! else ! arg2 = arg1 = save_expr (arg1); } /* [expr.cond] *************** convert_like_real (tree convs, tree expr *** 3974,3979 **** --- 3977,3988 ---- case IDENTITY_CONV: if (type_unknown_p (expr)) expr = instantiate_type (totype, expr, tf_error | tf_warning); + /* Convert a non-array constant variable to its underlying value, unless we + are about to bind it to a reference, in which case we need to + leave it as an lvalue. */ + if (inner >= 0 + && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE) + expr = decl_constant_value (expr); return expr; case AMBIG_CONV: /* Call build_user_type_conversion again for the error. */ *************** convert_like_real (tree convs, tree expr *** 3989,4001 **** if (expr == error_mark_node) return error_mark_node; - /* Convert a non-array constant variable to its underlying value, unless we - are about to bind it to a reference, in which case we need to - leave it as an lvalue. */ - if (TREE_CODE (convs) != REF_BIND - && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE) - expr = decl_constant_value (expr); - switch (TREE_CODE (convs)) { case RVALUE_CONV: --- 3998,4003 ---- *** ./cp/class.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./cp/class.c 2003-01-02 11:43:05.000000000 -0500 *************** build_vtable_entry_ref (array_ref, insta *** 396,402 **** basetype = TREE_TYPE (basetype); vtable = get_vtbl_decl_for_binfo (TYPE_BINFO (basetype)); ! first_fn = TYPE_BINFO_VTABLE (basetype); i = fold (build_array_ref (first_fn, idx)); i = fold (build_c_cast (ptrdiff_type_node, --- 396,402 ---- basetype = TREE_TYPE (basetype); vtable = get_vtbl_decl_for_binfo (TYPE_BINFO (basetype)); ! first_fn = unshare_expr (TYPE_BINFO_VTABLE (basetype)); i = fold (build_array_ref (first_fn, idx)); i = fold (build_c_cast (ptrdiff_type_node, *************** build_vtbl_ref_1 (instance, idx) *** 439,445 **** tree binfo = lookup_base (fixed_type, basetype, ba_ignore|ba_quiet, NULL); if (binfo) ! vtbl = BINFO_VTABLE (binfo); } if (!vtbl) --- 439,445 ---- tree binfo = lookup_base (fixed_type, basetype, ba_ignore|ba_quiet, NULL); if (binfo) ! vtbl = unshare_expr (BINFO_VTABLE (binfo)); } if (!vtbl) *** ./cp/cp-lang.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./cp/cp-lang.c 2002-12-31 18:25:20.000000000 -0500 *************** static bool cp_var_mod_type_p PARAMS ((t *** 65,72 **** #define LANG_HOOKS_PARSE_FILE c_common_parse_file #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL cxx_dup_lang_specific_decl - #undef LANG_HOOKS_UNSAVE_EXPR_NOW - #define LANG_HOOKS_UNSAVE_EXPR_NOW cxx_unsave_expr_now #undef LANG_HOOKS_MAYBE_BUILD_CLEANUP #define LANG_HOOKS_MAYBE_BUILD_CLEANUP cxx_maybe_build_cleanup #undef LANG_HOOKS_TRUTHVALUE_CONVERSION --- 65,70 ---- *** ./cp/cp-simplify.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./cp/cp-simplify.c 2003-01-02 16:26:45.000000000 -0500 *************** Software Foundation, 59 Temple Place - S *** 31,36 **** --- 31,40 ---- #include "tree-simple.h" static void genericize_try_block PARAMS ((tree *)); + static void genericize_catch_block PARAMS ((tree *)); + static void genericize_eh_spec_block PARAMS ((tree *)); + static void simplify_must_not_throw_expr PARAMS ((tree *, tree *)); + static void cp_simplify_init_expr PARAMS ((tree *, tree *, tree *)); /* Genericize a C++ _STMT. Called from c_simplify_stmt. */ *************** cp_simplify_stmt (stmt_p, next_p) *** 46,51 **** --- 50,69 ---- genericize_try_block (stmt_p); return 1; + case HANDLER: + genericize_catch_block (stmt_p); + return 1; + + case EH_SPEC_BLOCK: + genericize_eh_spec_block (stmt_p); + return 1; + + case USING_STMT: + /* Just ignore for now. Eventually we will want to pass this on to + the debugger. */ + *stmt_p = empty_stmt_node; + return 1; + default: break; } *************** static void *** 58,78 **** genericize_try_block (stmt_p) tree *stmt_p; { ! tree stmt = *stmt_p; ! if (CLEANUP_P (stmt)) ! { ! /* Just convert to a TRY_CATCH_EXPR. */ ! tree body = TRY_STMTS (stmt); ! tree cleanup = TRY_HANDLERS (stmt); ! c_simplify_stmt (&body); ! *stmt_p = build (TRY_CATCH_EXPR, void_type_node, body, cleanup); ! } ! else ! /* FIXME a real try block. */ ! abort (); } /* Do C++-specific simplification. Args are as for simplify_expr. */ --- 76,120 ---- genericize_try_block (stmt_p) tree *stmt_p; { ! tree body = TRY_STMTS (*stmt_p); ! tree cleanup = TRY_HANDLERS (*stmt_p); ! c_simplify_stmt (&body); ! /* cleanup is an expression, so it doesn't need to be genericized. */ ! *stmt_p = build (TRY_CATCH_EXPR, void_type_node, body, cleanup); ! } ! /* Genericize a HANDLER by converting to a CATCH_EXPR. */ ! ! static void ! genericize_catch_block (stmt_p) ! tree *stmt_p; ! { ! tree type = HANDLER_TYPE (*stmt_p); ! tree body = HANDLER_BODY (*stmt_p); ! ! c_simplify_stmt (&body); ! ! /* FIXME should the caught type go in TREE_TYPE? */ ! *stmt_p = build (CATCH_EXPR, void_type_node, type, body); ! } ! ! /* Genericize an EH_SPEC_BLOCK by converting it to a ! TRY_CATCH_EXPR/EH_FILTER_EXPR pair. */ ! ! static void ! genericize_eh_spec_block (stmt_p) ! tree *stmt_p; ! { ! tree body = EH_SPEC_STMTS (*stmt_p); ! tree allowed = EH_SPEC_RAISES (*stmt_p); ! tree failure = build_call (call_unexpected_node, ! tree_cons (NULL_TREE, build_exc_ptr (), ! NULL_TREE)); ! c_simplify_stmt (&body); ! ! *stmt_p = gimple_build_eh_filter (body, allowed, failure); } /* Do C++-specific simplification. Args are as for simplify_expr. */ *************** cp_simplify_expr (expr_p, pre_p, post_p) *** 85,94 **** --- 127,159 ---- { switch (TREE_CODE (*expr_p)) { + case PTRMEM_CST: + *expr_p = cplus_expand_constant (*expr_p); + return 1; + case AGGR_INIT_EXPR: simplify_aggr_init_expr (expr_p); + return 1; + + case THROW_EXPR: + /* FIXME communicate throw type to backend, probably by moving + THROW_EXPR into ../tree.def. */ + *expr_p = TREE_OPERAND (*expr_p, 0); + return 1; + + case MUST_NOT_THROW_EXPR: + simplify_must_not_throw_expr (expr_p, pre_p); + return 1; + + case INIT_EXPR: + case MODIFY_EXPR: + cp_simplify_init_expr (expr_p, pre_p, post_p); break; + case EMPTY_CLASS_EXPR: + *expr_p = integer_zero_node; + return 1; + default: break; } *************** cp_simplify_expr (expr_p, pre_p, post_p) *** 96,101 **** --- 161,200 ---- return c_simplify_expr (expr_p, pre_p, post_p); } + /* Simplify initialization from an AGGR_INIT_EXPR. */ + + static void + cp_simplify_init_expr (expr_p, pre_p, post_p) + tree *expr_p; + tree *pre_p; + tree *post_p; + { + tree from = TREE_OPERAND (*expr_p, 1); + tree to = TREE_OPERAND (*expr_p, 0); + + /* If we are initializing something from a TARGET_EXPR, strip the + TARGET_EXPR and initialize it directly. */ + /* What about code that pulls out the temp and uses it elsewhere? I + think that such code never uses the TARGET_EXPR as an initializer. If + I'm wrong, we'll abort because the temp won't have any RTL. In that + case, I guess we'll need to replace references somehow. */ + if (TREE_CODE (from) == TARGET_EXPR) + from = TARGET_EXPR_INITIAL (from); + + /* If we are initializing from an AGGR_INIT_EXPR, drop the INIT_EXPR and + replace the slot operand with our target. + + Should we add a target parm to simplify_expr instead? No, as in this + case we want to replace the INIT_EXPR. */ + if (TREE_CODE (from) == AGGR_INIT_EXPR) + { + simplify_expr (&to, pre_p, post_p, is_simple_modify_expr_lhs, fb_lvalue); + TREE_OPERAND (from, 2) = to; + *expr_p = from; + simplify_aggr_init_expr (expr_p); + } + } + /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. */ void *************** simplify_aggr_init_expr (tp) *** 177,179 **** --- 276,303 ---- TREE_CHAIN (call_expr) = TREE_CHAIN (aggr_init_expr); *tp = call_expr; } + + /* Simplify a MUST_NOT_THROW_EXPR. */ + + static void + simplify_must_not_throw_expr (expr_p, pre_p) + tree *expr_p; + tree *pre_p; + { + tree stmt = *expr_p; + tree temp = voidify_wrapper_expr (stmt); + tree body = TREE_OPERAND (stmt, 0); + + simplify_stmt (&body); + + stmt = gimple_build_eh_filter (body, NULL_TREE, + build_call (terminate_node, NULL_TREE)); + + if (temp) + { + add_tree (stmt, pre_p); + *expr_p = temp; + } + else + *expr_p = stmt; + } *** ./cp/cvt.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./cp/cvt.c 2002-12-31 12:53:37.000000000 -0500 *************** build_up_reference (type, arg, flags, de *** 386,392 **** { /* Automatic; make sure we handle the cleanup properly. */ maybe_push_cleanup_level (argtype); ! arg = pushdecl (arg); } /* Process the initializer for the declaration. */ --- 386,393 ---- { /* Automatic; make sure we handle the cleanup properly. */ maybe_push_cleanup_level (argtype); ! /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */ ! DECL_CONTEXT (arg) = current_function_decl; } /* Process the initializer for the declaration. */ *************** ocp_convert (type, expr, convtype, flags *** 671,676 **** --- 672,686 ---- conversion. */ else if (TREE_CODE (type) == COMPLEX_TYPE) return fold (convert_to_complex (type, e)); + else if (TREE_CODE (e) == TARGET_EXPR) + { + /* Don't build a NOP_EXPR of class type. Instead, change the + type of the temporary. */ + TREE_TYPE (e) = TREE_TYPE (TARGET_EXPR_SLOT (e)) = type; + return e; + } + else if (CLASS_TYPE_P (type)) + abort (); else return fold (build1 (NOP_EXPR, type, e)); } *** ./cp/decl.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/decl.c 2003-01-02 16:29:59.000000000 -0500 *************** does not match lookup in the current sco *** 6235,6241 **** val = from_obj; if (val && TREE_CODE (val) == ALIAS_DECL) ! val = DECL_INITIAL (val); return val; } --- 6235,6241 ---- val = from_obj; if (val && TREE_CODE (val) == ALIAS_DECL) ! val = unshare_expr (DECL_INITIAL (val)); return val; } *************** cxx_init_decl_processing () *** 6706,6714 **** say -fwritable-strings? */ if (flag_writable_strings) flag_const_strings = 0; - - /* Disable for now. */ - flag_disable_simple = 1; } /* Generate an initializer for a function naming variable from --- 6706,6711 ---- *************** cp_make_fname_decl (id, type_dep) *** 6760,6766 **** tree init = cp_fname_init (name); tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init)); ! /* As we don't push the decl here, we must set the context. */ DECL_CONTEXT (decl) = current_function_decl; DECL_PRETTY_FUNCTION_P (decl) = type_dep; --- 6757,6763 ---- tree init = cp_fname_init (name); tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init)); ! /* As we're using pushdecl_with_scope, we must set the context. */ DECL_CONTEXT (decl) = current_function_decl; DECL_PRETTY_FUNCTION_P (decl) = type_dep; *************** cp_make_fname_decl (id, type_dep) *** 6771,6776 **** --- 6768,6781 ---- TREE_USED (decl) = 1; + if (current_function_decl) + { + struct cp_binding_level *b = current_binding_level; + while (b->level_chain->parm_flag == 0) + b = b->level_chain; + pushdecl_with_scope (decl, b); + } + cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING); return decl; *************** finish_function (flags) *** 14563,14569 **** warning ("no return statement in function returning non-void"); /* Genericize before inlining. */ ! if (!flag_disable_simple) c_genericize (fndecl); /* Clear out memory we no longer need. */ --- 14568,14574 ---- warning ("no return statement in function returning non-void"); /* Genericize before inlining. */ ! if (!flag_disable_simple && !processing_template_decl) c_genericize (fndecl); /* Clear out memory we no longer need. */ *** ./cp/decl2.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/decl2.c 2003-01-02 11:43:08.000000000 -0500 *************** do_namespace_alias (alias, namespace) *** 4326,4331 **** --- 4326,4332 ---- /* Build the alias. */ alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node); DECL_NAMESPACE_ALIAS (alias) = namespace; + DECL_EXTERNAL (alias) = 1; pushdecl (alias); } *** ./cp/dump.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/dump.c 2002-12-19 13:54:13.000000000 -0500 *************** cp_dump_tree (dump_info, t) *** 265,270 **** --- 265,273 ---- return 1; } + if (! IS_AGGR_TYPE (t)) + break; + dump_child ("vfld", TYPE_VFIELD (t)); if (CLASSTYPE_TEMPLATE_SPECIALIZATION(t)) dump_string(di, "spec"); *** ./cp/except.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/except.c 2002-12-22 16:04:20.000000000 -0500 *************** wrap_cleanups_r (tp, walk_subtrees, data *** 561,567 **** cleanup = TARGET_EXPR_CLEANUP (exp); if (cleanup) { ! cleanup = build1 (MUST_NOT_THROW_EXPR, TREE_TYPE (cleanup), cleanup); TARGET_EXPR_CLEANUP (exp) = cleanup; } --- 561,567 ---- cleanup = TARGET_EXPR_CLEANUP (exp); if (cleanup) { ! cleanup = build1 (MUST_NOT_THROW_EXPR, void_type_node, cleanup); TARGET_EXPR_CLEANUP (exp) = cleanup; } *************** build_throw (exp) *** 733,739 **** return error_mark_node; } ! exp = build1 (MUST_NOT_THROW_EXPR, TREE_TYPE (exp), exp); /* Prepend the allocation. */ exp = build (COMPOUND_EXPR, TREE_TYPE (exp), allocate_expr, exp); if (temp_expr != void_zero_node) --- 733,739 ---- return error_mark_node; } ! exp = build1 (MUST_NOT_THROW_EXPR, void_type_node, exp); /* Prepend the allocation. */ exp = build (COMPOUND_EXPR, TREE_TYPE (exp), allocate_expr, exp); if (temp_expr != void_zero_node) *** ./cp/init.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/init.c 2003-01-02 15:41:46.000000000 -0500 *************** Boston, MA 02111-1307, USA. */ *** 35,40 **** --- 35,41 ---- #include "except.h" #include "toplev.h" #include "ggc.h" + #include "tree-inline.h" static void construct_virtual_base (tree, tree); static void expand_aggr_init_1 PARAMS ((tree, tree, tree, tree, int)); *************** build_vtbl_address (binfo) *** 737,743 **** TREE_USED (vtbl) = 1; /* Now compute the address to use when initializing the vptr. */ ! vtbl = BINFO_VTABLE (binfo_for); if (TREE_CODE (vtbl) == VAR_DECL) { vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl); --- 738,744 ---- TREE_USED (vtbl) = 1; /* Now compute the address to use when initializing the vptr. */ ! vtbl = unshare_expr (BINFO_VTABLE (binfo_for)); if (TREE_CODE (vtbl) == VAR_DECL) { vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl); *************** expand_default_init (binfo, true_exp, ex *** 1193,1205 **** else init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); ! if (TREE_CODE (init) == TRY_CATCH_EXPR) ! /* We need to protect the initialization of a catch parm ! with a call to terminate(), which shows up as a TRY_CATCH_EXPR around the TARGET_EXPR for the copy constructor. See ! expand_start_catch_block. */ ! TREE_OPERAND (init, 0) = build (INIT_EXPR, TREE_TYPE (exp), exp, ! TREE_OPERAND (init, 0)); else init = build (INIT_EXPR, TREE_TYPE (exp), exp, init); TREE_SIDE_EFFECTS (init) = 1; --- 1194,1209 ---- else init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); ! if (TREE_CODE (init) == MUST_NOT_THROW_EXPR) ! /* We need to protect the initialization of a catch parm with a ! call to terminate(), which shows up as a MUST_NOT_THROW_EXPR around the TARGET_EXPR for the copy constructor. See ! initialize_handler_parm. */ ! { ! TREE_OPERAND (init, 0) = build (INIT_EXPR, TREE_TYPE (exp), exp, ! TREE_OPERAND (init, 0)); ! TREE_TYPE (init) = void_type_node; ! } else init = build (INIT_EXPR, TREE_TYPE (exp), exp, init); TREE_SIDE_EFFECTS (init) = 1; *************** build_vec_delete_1 (base, maxindex, type *** 2639,2648 **** if (controller) { TREE_OPERAND (controller, 1) = body; ! return controller; } ! else ! return cp_convert (void_type_node, body); } /* Create an unnamed variable of the indicated TYPE. */ --- 2643,2656 ---- if (controller) { TREE_OPERAND (controller, 1) = body; ! body = controller; } ! ! if (TREE_CODE (base) == SAVE_EXPR) ! /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */ ! body = build (COMPOUND_EXPR, void_type_node, base, body); ! ! return cp_convert (void_type_node, body); } /* Create an unnamed variable of the indicated TYPE. */ *************** get_temp_regvar (type, init) *** 2680,2686 **** decl = create_temporary_var (type); if (building_stmt_tree ()) add_decl_stmt (decl); ! if (!building_stmt_tree ()) SET_DECL_RTL (decl, assign_temp (type, 2, 0, 1)); finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init)); --- 2688,2694 ---- decl = create_temporary_var (type); if (building_stmt_tree ()) add_decl_stmt (decl); ! else SET_DECL_RTL (decl, assign_temp (type, 2, 0, 1)); finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init)); *** ./cp/optimize.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/optimize.c 2003-01-02 15:50:29.000000000 -0500 *************** Software Foundation, 59 Temple Place - S *** 39,50 **** #include "flags.h" #include "langhooks.h" #include "diagnostic.h" /* Prototypes. */ static tree calls_setjmp_r (tree *, int *, void *); static void update_cloned_parm (tree, tree); - static void dump_function (enum tree_dump_index, tree); /* Optimize the body of FN. */ --- 39,50 ---- #include "flags.h" #include "langhooks.h" #include "diagnostic.h" + #include "tree-dump.h" /* Prototypes. */ static tree calls_setjmp_r (tree *, int *, void *); static void update_cloned_parm (tree, tree); /* Optimize the body of FN. */ *************** optimize_function (tree fn) *** 86,92 **** dump_function (TDI_simple, fn); /* Invoke the SSA tree optimizer. */ ! if (optimize >= 1) optimize_function_tree (fn); } --- 86,92 ---- dump_function (TDI_simple, fn); /* Invoke the SSA tree optimizer. */ ! if (optimize >= 1 && 0) optimize_function_tree (fn); } *************** maybe_clone_body (tree fn) *** 283,311 **** /* We don't need to process the original function any further. */ return 1; } - - /* Dump FUNCTION_DECL FN as tree dump PHASE. */ - - static void - dump_function (enum tree_dump_index phase, tree fn) - { - FILE *stream; - int flags; - - stream = dump_begin (phase, &flags); - if (stream) - { - fprintf (stream, "\n;; Function %s", - decl_as_string (fn, TFF_DECL_SPECIFIERS)); - fprintf (stream, " (%s)\n", - decl_as_string (DECL_ASSEMBLER_NAME (fn), 0)); - fprintf (stream, ";; enabled by -%s\n", dump_flag_name (phase)); - fprintf (stream, "\n"); - - if (flags & TDF_RAW) - dump_node (fn, TDF_SLIM | flags, stream); - else - print_generic_stmt (stream, DECL_SAVED_TREE (fn), 0); - dump_end (phase, stream); - } - } --- 283,285 ---- *** ./cp/parse.y.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/parse.y 2003-01-02 11:39:29.000000000 -0500 *************** static tree parse_handle_class_head (tre *** 132,138 **** static void parse_decl_instantiation (tree, tree, tree); static int parse_begin_function_definition (tree, tree); static tree parse_finish_call_expr (tree, tree, int); ! extern tree parse_asm_stmt PARAMS ((tree, tree, tree, tree, tree)); /* Cons up an empty parameter list. */ static inline tree --- 132,138 ---- static void parse_decl_instantiation (tree, tree, tree); static int parse_begin_function_definition (tree, tree); static tree parse_finish_call_expr (tree, tree, int); ! static tree parse_asm_stmt PARAMS ((tree, tree, tree, tree, tree)); /* Cons up an empty parameter list. */ static inline tree *** ./cp/semantics.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/semantics.c 2003-01-02 11:43:11.000000000 -0500 *************** *** 41,46 **** --- 41,47 ---- #include "output.h" #include "timevar.h" #include "debug.h" + #include "diagnostic.h" /* There routines provide a modular interface to perform many parsing operations. They may therefore be used during actual parsing, or *************** expand_body (fn) *** 2316,2321 **** --- 2317,2328 ---- if (DECL_EXTERNAL (fn)) return; + if (errorcount || sorrycount) + { + TREE_ASM_WRITTEN (fn) = 1; + return; + } + /* Save the current file name and line number. When we expand the body of the function, we'll set LINENO and INPUT_FILENAME so that error-mesages come out in the right places. */ *************** expand_body (fn) *** 2339,2356 **** /* Expand the body. */ if (statement_code_p (TREE_CODE (DECL_SAVED_TREE (fn)))) ! expand_stmt (DECL_SAVED_TREE (fn)); ! else ! expand_expr_stmt_value (DECL_SAVED_TREE (fn), 0, 0); /* Statements should always be full-expressions at the outermost set of curly braces for a function. */ my_friendly_assert (stmts_are_full_exprs_p (), 19990831); - /* The outermost statement for a function contains the line number - recorded when we finished processing the function. */ - lineno = STMT_LINENO (DECL_SAVED_TREE (fn)); - /* Generate code for the function. */ genrtl_finish_function (fn); --- 2346,2359 ---- /* Expand the body. */ if (statement_code_p (TREE_CODE (DECL_SAVED_TREE (fn)))) ! abort (); ! ! expand_expr_stmt_value (DECL_SAVED_TREE (fn), 0, 0); /* Statements should always be full-expressions at the outermost set of curly braces for a function. */ my_friendly_assert (stmts_are_full_exprs_p (), 19990831); /* Generate code for the function. */ genrtl_finish_function (fn); *** ./cp/tree.c.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./cp/tree.c 2002-12-31 19:34:24.000000000 -0500 *************** lvalue_p_1 (ref, treat_class_rvalues_as_ *** 93,105 **** allow_cast_as_lvalue); case NOP_EXPR: ! /* If expression doesn't change the type, we consider it as an ! lvalue even when cast_as_lvalue extension isn't selected. ! That's because parts of the compiler are alleged to be sloppy ! about sticking in NOP_EXPR node for no good reason. */ ! if (allow_cast_as_lvalue || ! same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ref)), ! TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (ref, 0))))) return lvalue_p_1 (TREE_OPERAND (ref, 0), treat_class_rvalues_as_lvalues, allow_cast_as_lvalue); --- 93,99 ---- allow_cast_as_lvalue); case NOP_EXPR: ! if (allow_cast_as_lvalue) return lvalue_p_1 (TREE_OPERAND (ref, 0), treat_class_rvalues_as_lvalues, allow_cast_as_lvalue); *************** lvalue_p_1 (ref, treat_class_rvalues_as_ *** 179,187 **** case CALL_EXPR: case VA_ARG_EXPR: ! return ((treat_class_rvalues_as_lvalues ! && IS_AGGR_TYPE (TREE_TYPE (ref))) ! ? clk_class : clk_none); case FUNCTION_DECL: /* All functions (except non-static-member functions) are --- 173,180 ---- case CALL_EXPR: case VA_ARG_EXPR: ! /* Any class-valued call would be wrapped in a TARGET_EXPR. */ ! return clk_none; case FUNCTION_DECL: /* All functions (except non-static-member functions) are *************** cp_copy_res_decl_for_inlining (result, f *** 2368,2380 **** /* We have a named return value; copy the name and source position so we can get reasonable debugging information, and register the return variable as its equivalent. */ ! DECL_NAME (var) = DECL_NAME (nrv); ! DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv); ! DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv); ! /* Don't lose initialization info. */ ! DECL_INITIAL (var) = DECL_INITIAL (nrv); ! /* Don't forget that it needs to go in the stack. */ ! TREE_ADDRESSABLE (var) = TREE_ADDRESSABLE (nrv); splay_tree_insert (decl_map, (splay_tree_key) nrv, --- 2361,2376 ---- /* We have a named return value; copy the name and source position so we can get reasonable debugging information, and register the return variable as its equivalent. */ ! if (TREE_CODE (var) == VAR_DECL) ! { ! DECL_NAME (var) = DECL_NAME (nrv); ! DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv); ! DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv); ! /* Don't lose initialization info. */ ! DECL_INITIAL (var) = DECL_INITIAL (nrv); ! /* Don't forget that it needs to go in the stack. */ ! TREE_ADDRESSABLE (var) = TREE_ADDRESSABLE (nrv); ! } splay_tree_insert (decl_map, (splay_tree_key) nrv, *** ./Makefile.in.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./Makefile.in 2003-01-02 11:41:14.000000000 -0500 *************** c-simplify.o : c-simplify.c $(CONFIG_H) *** 1446,1452 **** $(TM_H) coretypes.h gimplify.o : gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) errors.h \ diagnostic.h tree-simple.h tree-inline.h varray.h langhooks.h \ ! langhooks-def.h $(TREE_FLOW_H) $(TIMEVAR_H) $(TM_H) coretypes.h tree-browser.o : tree-browser.c tree-browser.def $(CONFIG_H) $(SYSTEM_H) \ $(TREE_H) errors.h tree-inline.h diagnostic.h $(HASHTAB_H) \ $(TM_H) coretypes.h --- 1446,1452 ---- $(TM_H) coretypes.h gimplify.o : gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) errors.h \ diagnostic.h tree-simple.h tree-inline.h varray.h langhooks.h \ ! langhooks-def.h $(TREE_FLOW_H) $(TIMEVAR_H) $(TM_H) coretypes.h except.h tree-browser.o : tree-browser.c tree-browser.def $(CONFIG_H) $(SYSTEM_H) \ $(TREE_H) errors.h tree-inline.h diagnostic.h $(HASHTAB_H) \ $(TM_H) coretypes.h *** ./c-common.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./c-common.c 2002-12-31 02:23:41.000000000 -0500 *************** finish_fname_decls () *** 1055,1067 **** if (body) { ! /* They were called into existence, so add to statement tree. */ ! body = chainon (body, ! TREE_CHAIN (DECL_SAVED_TREE (current_function_decl))); ! body = build_stmt (COMPOUND_STMT, body); ! ! COMPOUND_STMT_NO_SCOPE (body) = 1; ! TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body; } for (ix = 0; fname_vars[ix].decl; ix++) --- 1055,1072 ---- if (body) { ! /* They were called into existence, so add to statement tree. Add ! the DECL_STMTs inside the outermost scope. */ ! tree *p = &DECL_SAVED_TREE (current_function_decl); ! /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK. */ ! while (TREE_CODE (*p) != COMPOUND_STMT) ! p = &TREE_CHAIN (*p); ! p = &COMPOUND_BODY (*p); ! if (TREE_CODE (*p) == SCOPE_STMT) ! p = &TREE_CHAIN (*p); ! ! body = chainon (body, *p); ! *p = body; } for (ix = 0; fname_vars[ix].decl; ix++) *************** finish_fname_decls () *** 1084,1090 **** saved_function_name_decls = stack; } ! /* Return the text name of the current function, suitable prettified by PRETTY_P. */ const char * --- 1089,1095 ---- saved_function_name_decls = stack; } ! /* Return the text name of the current function, suitably prettified by PRETTY_P. */ const char * *************** fname_decl (rid, id) *** 1168,1174 **** } if (!ix && !current_function_decl) pedwarn_with_decl (decl, "`%s' is not defined outside of function scope"); ! return decl; } --- 1173,1179 ---- } if (!ix && !current_function_decl) pedwarn_with_decl (decl, "`%s' is not defined outside of function scope"); ! return decl; } *** ./c-decl.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./c-decl.c 2003-01-02 11:41:16.000000000 -0500 *************** c_make_fname_decl (id, type_dep) *** 2552,2557 **** --- 2552,2569 ---- DECL_INITIAL (decl) = init; TREE_USED (decl) = 1; + + if (current_function_decl) + { + /* Add the decls to the outermost block. */ + struct binding_level *b = current_binding_level; + struct binding_level *old = b; + while (b->level_chain->parm_flag == 0) + b = b->level_chain; + current_binding_level = b; + pushdecl (decl); + current_binding_level = old; + } finish_decl (decl, init, NULL_TREE); *** ./c-pretty-print.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./c-pretty-print.c 2003-01-02 15:51:21.000000000 -0500 *************** Software Foundation, 59 Temple Place - S *** 30,35 **** --- 30,36 ---- #include "diagnostic.h" #include "real.h" #include "hashtab.h" + #include "langhooks.h" static int op_prio PARAMS ((tree)); static const char *op_symbol PARAMS ((tree)); *************** static void dump_c_tree PARAMS ((outp *** 49,72 **** int)); static int dump_c_node PARAMS ((output_buffer *, tree, int, int)); ! #define INDENT(SPACE) do { \ int i; for (i = 0; i>>\n"); } while (0) #define PRINT_FUNCTION_NAME(NODE) output_printf \ (buffer, "%s", TREE_CODE (NODE) == NOP_EXPR ? \ ! IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (NODE, 0))) : \ ! IDENTIFIER_POINTER (DECL_NAME (NODE))) ! static output_buffer buffer; static int initialized = 0; /* Print the tree T in full, on file FILE. */ void --- 50,93 ---- int)); static int dump_c_node PARAMS ((output_buffer *, tree, int, int)); ! static void do_niy PARAMS ((output_buffer *, ! tree)); #define INDENT(SPACE) do { \ int i; for (i = 0; i>>\n"); + } + /* Print the tree T in full, on file FILE. */ void *************** dump_c_tree (buffer, t, spc) *** 185,190 **** --- 206,215 ---- default: break; } + + if (!(*lang_hooks.tree_inlining.tree_chain_matters_p) (node)) + break; + node = TREE_CHAIN (node); if (htab_find (htab, node)) { *************** dump_c_node (buffer, node, spc, brief_du *** 379,387 **** { output_add_character (buffer, '['); if (TYPE_SIZE (tmp)) ! output_decimal (buffer, ! TREE_INT_CST_LOW (TYPE_SIZE (tmp)) / ! TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (tmp)))); output_add_character (buffer, ']'); tmp = TREE_TYPE (tmp); } --- 404,419 ---- { output_add_character (buffer, '['); if (TYPE_SIZE (tmp)) ! { ! tree size = TYPE_SIZE (tmp); ! if (TREE_CODE (size) == INTEGER_CST) ! output_decimal (buffer, ! TREE_INT_CST_LOW (TYPE_SIZE (tmp)) / ! TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (tmp)))); ! else if (TREE_CODE (size) == MULT_EXPR) ! dump_c_node (buffer, TREE_OPERAND (size, 0), spc, brief_dump); ! /* else punt. */ ! } output_add_character (buffer, ']'); tmp = TREE_TYPE (tmp); } *************** dump_c_node (buffer, node, spc, brief_du *** 790,796 **** output_add_character (buffer, '('); op1 = TREE_OPERAND (node, 1); if (op1) ! dump_c_node (buffer, op1, 0, brief_dump); output_add_character (buffer, ')'); break; --- 822,828 ---- output_add_character (buffer, '('); op1 = TREE_OPERAND (node, 1); if (op1) ! dump_c_node (buffer, op1, spc, brief_dump); output_add_character (buffer, ')'); break; *************** dump_c_node (buffer, node, spc, brief_du *** 803,809 **** break; case CLEANUP_POINT_EXPR: ! NIY; break; case PLACEHOLDER_EXPR: --- 835,843 ---- break; case CLEANUP_POINT_EXPR: ! output_add_string (buffer, "<>"); break; case PLACEHOLDER_EXPR: *************** dump_c_node (buffer, node, spc, brief_du *** 1451,1456 **** --- 1485,1500 ---- dump_c_node (buffer, op0, spc, brief_dump); break; + case VTABLE_REF: + output_add_string (buffer, "VTABLE_REF <("); + dump_c_node (buffer, TREE_OPERAND (node, 0), spc, brief_dump); + output_add_string (buffer, "),"); + dump_c_node (buffer, TREE_OPERAND (node, 1), spc, brief_dump); + output_add_character (buffer, ','); + dump_c_node (buffer, TREE_OPERAND (node, 2), spc, brief_dump); + output_add_character (buffer, '>'); + break; + default: NIY; } *************** op_prio (op) *** 1749,1754 **** --- 1793,1799 ---- case FIX_CEIL_EXPR: case FIX_FLOOR_EXPR: case FIX_ROUND_EXPR: + case TARGET_EXPR: return 14; case CALL_EXPR: *************** print_call_name (buffer, node) *** 1935,1943 **** case ADDR_EXPR: case INDIRECT_REF: case NOP_EXPR: ! PRINT_FUNCTION_NAME (TREE_OPERAND (op0, 0)); break; ! case EXPR_WITH_FILE_LOCATION: if (TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL) PRINT_FUNCTION_NAME (TREE_OPERAND (op0, 0)); --- 1980,1988 ---- case ADDR_EXPR: case INDIRECT_REF: case NOP_EXPR: ! dump_c_node (buffer, TREE_OPERAND (op0, 0), 0, 0); break; ! case EXPR_WITH_FILE_LOCATION: if (TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL) PRINT_FUNCTION_NAME (TREE_OPERAND (op0, 0)); *** ./java/parse.y.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./java/parse.y 2003-01-02 11:39:33.000000000 -0500 *************** catch_clause_parameter: *** 1933,1939 **** declare_local_variables (0, TREE_VALUE ($3), build_tree_list (TREE_PURPOSE ($3), init)); ! $$ = build1 (CATCH_EXPR, NULL_TREE, ccpb); EXPR_WFL_LINECOL ($$) = $1.location; } | CATCH_TK error --- 1933,1939 ---- declare_local_variables (0, TREE_VALUE ($3), build_tree_list (TREE_PURPOSE ($3), init)); ! $$ = build1 (JAVA_CATCH_EXPR, NULL_TREE, ccpb); EXPR_WFL_LINECOL ($$) = $1.location; } | CATCH_TK error *************** encapsulate_with_try_catch (location, ty *** 15475,15482 **** /* Add the catch statements */ add_stmt_to_block (catch_block, NULL_TREE, catch_stmts); ! /* Now we can build a CATCH_EXPR */ ! catch_block = build1 (CATCH_EXPR, NULL_TREE, catch_block); return build_try_statement (location, try_block, catch_block); } --- 15475,15482 ---- /* Add the catch statements */ add_stmt_to_block (catch_block, NULL_TREE, catch_stmts); ! /* Now we can build a JAVA_CATCH_EXPR */ ! catch_block = build1 (JAVA_CATCH_EXPR, NULL_TREE, catch_block); return build_try_statement (location, try_block, catch_block); } *************** patch_try_statement (node) *** 15522,15528 **** int unreachable; /* At this point, the structure of the catch clause is ! CATCH_EXPR (catch node) BLOCK (with the decl of the parameter) COMPOUND_EXPR MODIFY_EXPR (assignment of the catch parameter) --- 15522,15528 ---- int unreachable; /* At this point, the structure of the catch clause is ! JAVA_CATCH_EXPR (catch node) BLOCK (with the decl of the parameter) COMPOUND_EXPR MODIFY_EXPR (assignment of the catch parameter) *** ./java/java-tree.def.~1~ 2003-01-02 12:14:46.000000000 -0500 --- ./java/java-tree.def 2003-01-02 00:23:28.000000000 -0500 *************** DEFTREECODE (TRY_EXPR, "try-catch", 'e', *** 55,61 **** /* Catch clause. Operand 0 is the catch clause block, which contains the declaration of the catch clause parameter. */ ! DEFTREECODE (CATCH_EXPR, "catch", '1', 1) /* Synchronized statement. Operand 0 is the expression on which we wish to synchronize, --- 55,61 ---- /* Catch clause. Operand 0 is the catch clause block, which contains the declaration of the catch clause parameter. */ ! DEFTREECODE (JAVA_CATCH_EXPR, "catch", '1', 1) /* Synchronized statement. Operand 0 is the expression on which we wish to synchronize, *** ./except.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./except.c 2003-01-01 20:21:33.000000000 -0500 *************** expand_eh_region_end () *** 534,539 **** --- 534,573 ---- return cur_region; } + /* Expand HANDLER, which is the operand 1 of a TRY_CATCH_EXPR. Catch + blocks and C++ exception-specifications are handled specially. */ + + void + expand_eh_handler (handler) + tree handler; + { + tree inner = handler; + while (TREE_CODE (inner) == COMPOUND_EXPR + || TREE_CODE (inner) == EXPR_WITH_FILE_LOCATION) + inner = TREE_OPERAND (inner, 0); + + switch (TREE_CODE (inner)) + { + case CATCH_EXPR: + expand_start_all_catch (); + expand_expr (handler, const0_rtx, VOIDmode, 0); + expand_end_all_catch (); + break; + + case EH_FILTER_EXPR: + if (EH_FILTER_MUST_NOT_THROW (handler)) + expand_eh_region_end_must_not_throw (EH_FILTER_FAILURE (handler)); + else + expand_eh_region_end_allowed (EH_FILTER_TYPES (handler), + EH_FILTER_FAILURE (handler)); + break; + + default: + expand_eh_region_end_cleanup (handler); + break; + } + } + /* End an exception handling region for a cleanup. HANDLER is an expression to expand for the cleanup. */ *** ./c-simplify.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./c-simplify.c 2003-01-02 16:28:04.000000000 -0500 *************** Software Foundation, 59 Temple Place - S *** 44,49 **** --- 44,50 ---- #include "flags.h" #include "rtl.h" #include "toplev.h" + #include "tree-dump.h" /* The simplification pass converts the language-dependent trees (ld-trees) emitted by the parser into language-independent trees *************** static void pop_context PAR *** 89,94 **** --- 90,96 ---- static tree c_build_bind_expr PARAMS ((tree, tree)); static void add_block_to_enclosing PARAMS ((tree)); static tree mostly_copy_tree_r PARAMS ((tree *, int *, void *)); + static void simplify_condition PARAMS ((tree *)); enum bc_t { bc_break = 0, bc_continue = 1 }; static tree begin_bc_block PARAMS ((enum bc_t)); *************** c_genericize (fndecl) *** 137,143 **** dump_file = dump_begin (TDI_original, &dump_flags); if (dump_file) { ! fprintf (dump_file, "%s()\n", IDENTIFIER_POINTER (DECL_NAME (fndecl))); if (dump_flags & TDF_RAW) dump_node (DECL_SAVED_TREE (fndecl), TDF_SLIM | dump_flags, dump_file); --- 139,150 ---- dump_file = dump_begin (TDI_original, &dump_flags); if (dump_file) { ! fprintf (dump_file, "\n;; Function %s", ! (*lang_hooks.decl_printable_name) (fndecl, 2)); ! fprintf (dump_file, " (%s)\n", ! IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl))); ! fprintf (dump_file, ";; enabled by -%s\n", dump_flag_name (TDI_original)); ! fprintf (dump_file, "\n"); if (dump_flags & TDF_RAW) dump_node (DECL_SAVED_TREE (fndecl), TDF_SLIM | dump_flags, dump_file); *************** c_genericize (fndecl) *** 154,172 **** pop_context (); /* Dump the genericized tree IR. */ ! dump_file = dump_begin (TDI_generic, &dump_flags); ! if (dump_file) ! { ! fprintf (dump_file, "%s()\n", IDENTIFIER_POINTER (DECL_NAME (fndecl))); ! ! if (dump_flags & TDF_RAW) ! dump_node (DECL_SAVED_TREE (fndecl), TDF_SLIM | dump_flags, dump_file); ! else ! print_generic_stmt (dump_file, DECL_SAVED_TREE (fndecl), 0); ! fprintf (dump_file, "\n"); ! ! dump_end (TDI_generic, dump_file); ! } } /* Entry point for the tree lowering pass. Recursively scan --- 161,167 ---- pop_context (); /* Dump the genericized tree IR. */ ! dump_function (TDI_generic, fndecl); } /* Entry point for the tree lowering pass. Recursively scan *************** simplify_block (stmt_p, next_p) *** 398,408 **** for (p = &TREE_CHAIN (*stmt_p);; p = &TREE_CHAIN (*p)) if (TREE_CODE (*p) == SCOPE_STMT) { ! if (SCOPE_PARTIAL_P (*p)) ! /* Throw away partial scopes. Hmm, that probably won't work; ! we need to remember them to handle goto cleanups. */ ! abort (); ! else if (SCOPE_BEGIN_P (*p)) ++depth; else if (--depth == 0) break; --- 393,399 ---- for (p = &TREE_CHAIN (*stmt_p);; p = &TREE_CHAIN (*p)) if (TREE_CODE (*p) == SCOPE_STMT) { ! if (SCOPE_BEGIN_P (*p)) ++depth; else if (--depth == 0) break; *************** simplify_cleanup (stmt_p, next_p) *** 428,439 **** { tree stmt = *stmt_p; tree body = TREE_CHAIN (stmt); enum tree_code code = (CLEANUP_EH_ONLY (stmt) ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR); c_simplify_stmt (&body); ! *stmt_p = build (code, void_type_node, body, CLEANUP_EXPR (stmt)); *next_p = NULL_TREE; } --- 419,433 ---- { tree stmt = *stmt_p; tree body = TREE_CHAIN (stmt); + tree cleanup = CLEANUP_EXPR (stmt); enum tree_code code = (CLEANUP_EH_ONLY (stmt) ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR); + cleanup = maybe_protect_cleanup (cleanup); + c_simplify_stmt (&body); ! *stmt_p = build (code, void_type_node, body, cleanup); *next_p = NULL_TREE; } *************** simplify_expr_stmt (stmt_p) *** 482,487 **** --- 476,499 ---- *stmt_p = stmt; } + /* If the condition for a loop (or the like) is a decl, it will be a + TREE_LIST where the TREE_PURPOSE is a DECL_STMT and the TREE_VALUE is + a use of the decl. Turn such a thing into a COMPOUND_EXPR. */ + + static void + simplify_condition (cond_p) + tree *cond_p; + { + tree cond = *cond_p; + if (cond && TREE_CODE (cond) == TREE_LIST) + { + tree decl = TREE_PURPOSE (cond); + tree value = TREE_VALUE (cond); + c_simplify_stmt (&decl); + *cond_p = build (COMPOUND_EXPR, TREE_TYPE (value), decl, value); + } + } + /* Begin a scope which can be exited by a break or continue statement. BC indicates which. *************** simplify_c_loop (cond, body, incr, cond_ *** 575,580 **** --- 587,593 ---- if (cond) { + simplify_condition (&cond); exit = build_bc_goto (bc_break); exit = build (COND_EXPR, void_type_node, cond, empty_stmt_node, exit); exit = fold (exit); *************** simplify_if_stmt (stmt_p) *** 662,667 **** --- 675,682 ---- tree else_ = ELSE_CLAUSE (stmt); tree cond = IF_COND (stmt); + simplify_condition (&cond); + c_simplify_stmt (&then_); c_simplify_stmt (&else_); *************** simplify_switch_stmt (stmt_p) *** 679,684 **** --- 694,701 ---- tree break_block, switch_; tree cond = SWITCH_COND (stmt); + simplify_condition (&cond); + break_block = begin_bc_block (bc_break); c_simplify_stmt (&body); *************** simplify_decl_stmt (stmt_p, next_p) *** 728,734 **** tree decl = DECL_STMT_DECL (stmt); tree pre = NULL_TREE; ! if (TREE_CODE (decl) == VAR_DECL) { tree init = DECL_INITIAL (decl); --- 745,751 ---- tree decl = DECL_STMT_DECL (stmt); tree pre = NULL_TREE; ! if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl)) { tree init = DECL_INITIAL (decl); *************** simplify_decl_stmt (stmt_p, next_p) *** 739,744 **** --- 756,763 ---- its size, and so that any other local variables used in those expressions will have been initialized. */ + /* FIXME break the allocation out into a separate statement. */ + tree size = DECL_SIZE (decl); tree usize = DECL_SIZE_UNIT (decl); tree bind; *************** simplify_decl_stmt (stmt_p, next_p) *** 763,769 **** add_tree (bind, &pre); ! *next_p = NULL_TREE; } if (init && init != error_mark_node && !TREE_STATIC (decl)) --- 782,789 ---- add_tree (bind, &pre); ! if (next_p) ! *next_p = NULL_TREE; } if (init && init != error_mark_node && !TREE_STATIC (decl)) *************** simplify_decl_stmt (stmt_p, next_p) *** 774,785 **** init = build1 (CLEANUP_POINT_EXPR, void_type_node, init); add_tree (init, &pre); } - } ! /* This decl isn't mentioned in the enclosing block, so add it to ! the list of temps. */ ! if (DECL_ARTIFICIAL (decl)) ! gimple_add_tmp_var (decl); *stmt_p = pre; } --- 794,806 ---- init = build1 (CLEANUP_POINT_EXPR, void_type_node, init); add_tree (init, &pre); } ! /* This decl isn't mentioned in the enclosing block, so add it to the ! list of temps. FIXME it seems a bit of a kludge to say that ! anonymous artificial vars aren't pushed, but everything else is. */ ! if (DECL_ARTIFICIAL (decl) && DECL_NAME (decl) == NULL_TREE) ! gimple_add_tmp_var (decl); ! } *stmt_p = pre; } *************** simplify_stmt_expr (expr_p) *** 860,865 **** --- 881,889 ---- } last_expr = EXPR_STMT_EXPR (last_expr_stmt); + if (stmts_are_full_exprs_p ()) + last_expr = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (last_expr), + last_expr); EXPR_STMT_EXPR (last_expr_stmt) = empty_stmt_node; #if defined ENABLE_CHECKING if (!is_last_stmt_of_scope (last_expr_stmt)) *************** simplify_stmt_expr (expr_p) *** 890,895 **** --- 914,921 ---- BIND_EXPR_BODY (bind) = substmt; TREE_TYPE (bind) = TREE_TYPE (body) = TREE_TYPE (last_expr); } + else + body = substmt; } *expr_p = body; *** ./except.h.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./except.h 2002-11-28 10:04:35.000000000 -0500 *************** extern void expand_eh_region_end_throw *** 83,88 **** --- 83,91 ---- destroying an object twice. */ extern void expand_eh_region_end_fixup PARAMS ((tree)); + /* End some sort of EH region, depending on the argument. */ + extern void expand_eh_handler PARAMS ((tree)); + /* Invokes CALLBACK for every exception handler label. Only used by old loop hackery; should not be used by new code. */ extern void for_each_eh_label PARAMS ((void (*) (rtx))); *** ./expr.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./expr.c 2003-01-02 11:41:25.000000000 -0500 *************** expand_expr (exp, target, tmode, modifie *** 6986,7010 **** /* If VARS have not yet been expanded, expand them now. */ for (vars = BIND_EXPR_VARS (exp); vars; vars = TREE_CHAIN (vars)) { ! if (DECL_EXTERNAL (vars)) ! /* Do nothing. */; ! else if (TREE_STATIC (vars) ! ? !TREE_ASM_WRITTEN (vars) ! : !DECL_RTL_SET_P (vars)) { ! if ((*lang_hooks.expand_decl) (vars)) /* OK. */; ! else if (TREE_CODE (vars) == VAR_DECL && !TREE_STATIC (vars)) ! expand_decl (vars); ! else if (TREE_CODE (vars) == VAR_DECL && TREE_STATIC (vars)) ! rest_of_decl_compilation (vars, NULL, 0, 0); ! else if (TREE_CODE (vars) == TYPE_DECL ! || TREE_CODE (vars) == CONST_DECL) /* No expansion needed. */; else abort (); } ! expand_decl_init (vars); } temp = expand_expr (BIND_EXPR_BODY (exp), target, tmode, modifier); --- 6986,7018 ---- /* If VARS have not yet been expanded, expand them now. */ for (vars = BIND_EXPR_VARS (exp); vars; vars = TREE_CHAIN (vars)) { ! tree var = vars; ! ! if (DECL_EXTERNAL (var)) ! continue; ! ! if (TREE_STATIC (var)) ! /* If this is an inlined copy of a static local variable, ! look up the original decl. */ ! var = DECL_ORIGIN (var); ! ! if (TREE_STATIC (var) ! ? !TREE_ASM_WRITTEN (var) ! : !DECL_RTL_SET_P (var)) { ! if ((*lang_hooks.expand_decl) (var)) /* OK. */; ! else if (TREE_CODE (var) == VAR_DECL && !TREE_STATIC (var)) ! expand_decl (var); ! else if (TREE_CODE (var) == VAR_DECL && TREE_STATIC (var)) ! rest_of_decl_compilation (var, NULL, 0, 0); ! else if (TREE_CODE (var) == TYPE_DECL ! || TREE_CODE (var) == CONST_DECL) /* No expansion needed. */; else abort (); } ! expand_decl_init (var); } temp = expand_expr (BIND_EXPR_BODY (exp), target, tmode, modifier); *************** expand_expr (exp, target, tmode, modifie *** 7017,7022 **** --- 7025,7031 ---- { if (TREE_CODE (vars) == FUNCTION_DECL && DECL_CONTEXT (vars) == current_function_decl + && DECL_SAVED_INSNS (vars) && !TREE_ASM_WRITTEN (vars) && TREE_ADDRESSABLE (vars)) { *************** expand_expr (exp, target, tmode, modifie *** 9248,9267 **** tree handler = TREE_OPERAND (exp, 1); expand_eh_region_start (); - op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0); ! ! expand_eh_region_end_cleanup (handler); return op0; } case TRY_FINALLY_EXPR: { tree try_block = TREE_OPERAND (exp, 0); tree finally_block = TREE_OPERAND (exp, 1); ! if (!optimize || unsafe_for_reeval (finally_block) > 1) { /* In this case, wrapping FINALLY_BLOCK in an UNSAVE_EXPR is not sufficient, so we cannot expand the block twice. --- 9257,9285 ---- tree handler = TREE_OPERAND (exp, 1); expand_eh_region_start (); op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0); ! expand_eh_handler (handler); return op0; } + case CATCH_EXPR: + expand_start_catch (CATCH_TYPES (exp)); + expand_expr (CATCH_BODY (exp), const0_rtx, VOIDmode, 0); + expand_end_catch (); + return op0; + + case EH_FILTER_EXPR: + /* Should have been handled in expand_eh_handler. */ + abort (); + case TRY_FINALLY_EXPR: { tree try_block = TREE_OPERAND (exp, 0); tree finally_block = TREE_OPERAND (exp, 1); ! if ((!optimize && lang_protect_cleanup_actions == NULL) ! || unsafe_for_reeval (finally_block) > 1) { /* In this case, wrapping FINALLY_BLOCK in an UNSAVE_EXPR is not sufficient, so we cannot expand the block twice. *** ./fold-const.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./fold-const.c 2002-12-31 16:27:42.000000000 -0500 *************** fold (expr) *** 7003,7009 **** /* Avoid adding NOP_EXPRs in case this is an lvalue. */ if (TYPE_MAIN_VARIANT (comp_type) == TYPE_MAIN_VARIANT (type)) ! comp_type = type; switch (comp_code) { --- 7003,7013 ---- /* Avoid adding NOP_EXPRs in case this is an lvalue. */ if (TYPE_MAIN_VARIANT (comp_type) == TYPE_MAIN_VARIANT (type)) ! { ! comp_type = type; ! comp_op0 = arg1; ! comp_op1 = arg2; ! } switch (comp_code) { *** ./gimplify.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./gimplify.c 2003-01-02 15:16:50.000000000 -0500 *************** Software Foundation, 59 Temple Place - S *** 36,41 **** --- 36,42 ---- #include "langhooks-def.h" #include "tree-flow.h" #include "timevar.h" + #include "except.h" static void simplify_constructor PARAMS ((tree, tree *, tree *)); static void simplify_array_ref PARAMS ((tree *, tree *, tree *)); *************** static void simplify_compound_lval PAR *** 43,54 **** static void simplify_component_ref PARAMS ((tree *, tree *, tree *)); static void simplify_call_expr PARAMS ((tree *, tree *, tree *)); static void simplify_tree_list PARAMS ((tree *, tree *, tree *)); ! static void simplify_modify_expr PARAMS ((tree *, tree *, tree *)); static void simplify_compound_expr PARAMS ((tree *, tree *)); static void simplify_save_expr PARAMS ((tree *, tree *)); static void simplify_addr_expr PARAMS ((tree *, tree *, tree *)); static void simplify_self_mod_expr PARAMS ((tree *, tree *, tree *)); ! static void simplify_cond_expr PARAMS ((tree *, tree *)); static void simplify_boolean_expr PARAMS ((tree *, tree *)); static void simplify_expr_wfl PARAMS ((tree *, tree *, tree *, int (*) (tree))); --- 44,55 ---- static void simplify_component_ref PARAMS ((tree *, tree *, tree *)); static void simplify_call_expr PARAMS ((tree *, tree *, tree *)); static void simplify_tree_list PARAMS ((tree *, tree *, tree *)); ! static void simplify_modify_expr PARAMS ((tree *, tree *, tree *, int)); static void simplify_compound_expr PARAMS ((tree *, tree *)); static void simplify_save_expr PARAMS ((tree *, tree *)); static void simplify_addr_expr PARAMS ((tree *, tree *, tree *)); static void simplify_self_mod_expr PARAMS ((tree *, tree *, tree *)); ! static void simplify_cond_expr PARAMS ((tree *, tree *, tree)); static void simplify_boolean_expr PARAMS ((tree *, tree *)); static void simplify_expr_wfl PARAMS ((tree *, tree *, tree *, int (*) (tree))); *************** static void simplify_cleanup_point_expr *** 69,75 **** static bool gimple_conditional_context PARAMS ((void)); static void gimple_push_condition PARAMS ((void)); static void gimple_pop_condition PARAMS ((tree *)); - static tree voidify_wrapper_expr PARAMS ((tree)); static void gimple_push_cleanup PARAMS ((tree, tree *)); static void gimplify_loop_expr PARAMS ((tree *)); static void gimplify_exit_expr PARAMS ((tree *, tree *)); --- 70,75 ---- *************** simplify_function_tree (fndecl) *** 165,170 **** --- 165,171 ---- tree fnbody; int done; tree oldfn; + tree tmp; /* Don't bother doing anything if the program has errors. */ if (errorcount || sorrycount) *************** simplify_function_tree (fndecl) *** 195,200 **** --- 196,207 ---- /* Unshare again, in case simplification was sloppy. */ unshare_all_trees (fnbody); + /* If there isn't an outer BIND_EXPR, add one. */ + tmp = fnbody; + STRIP_WFL (tmp); + if (TREE_CODE (tmp) != BIND_EXPR) + fnbody = build (BIND_EXPR, void_type_node, NULL_TREE, fnbody, NULL_TREE); + DECL_SAVED_TREE (fndecl) = fnbody; /* Declare the new temporary variables. */ *************** simplify_expr (expr_p, pre_p, post_p, si *** 270,289 **** if (post_p == NULL) post_p = &internal_post; ! /* First strip any uselessness. */ STRIP_TYPE_NOPS (*expr_p); /* Loop over the specific simplifiers until the toplevel node remains the same. */ do { ! /* First do any language-specific simplification. */ (*lang_hooks.simplify_expr) (expr_p, pre_p, post_p); if (*expr_p == NULL_TREE) break; ! ! /* Then remember the expr. */ ! save_expr = *expr_p; switch (TREE_CODE (*expr_p)) { --- 277,298 ---- if (post_p == NULL) post_p = &internal_post; ! /* Strip any uselessness. */ STRIP_TYPE_NOPS (*expr_p); /* Loop over the specific simplifiers until the toplevel node remains the same. */ do { ! /* Remember the expr. */ ! save_expr = *expr_p; ! ! /* Do any language-specific simplification. */ (*lang_hooks.simplify_expr) (expr_p, pre_p, post_p); if (*expr_p == NULL_TREE) break; ! if (*expr_p != save_expr) ! continue; switch (TREE_CODE (*expr_p)) { *************** simplify_expr (expr_p, pre_p, post_p, si *** 305,311 **** break; case COND_EXPR: ! simplify_cond_expr (expr_p, pre_p); break; case CALL_EXPR: --- 314,320 ---- break; case COND_EXPR: ! simplify_cond_expr (expr_p, pre_p, NULL_TREE); break; case CALL_EXPR: *************** simplify_expr (expr_p, pre_p, post_p, si *** 331,337 **** case MODIFY_EXPR: case INIT_EXPR: ! simplify_modify_expr (expr_p, pre_p, post_p); break; case TRUTH_ANDIF_EXPR: --- 340,346 ---- case MODIFY_EXPR: case INIT_EXPR: ! simplify_modify_expr (expr_p, pre_p, post_p, fallback != fb_none); break; case TRUTH_ANDIF_EXPR: *************** simplify_expr (expr_p, pre_p, post_p, si *** 388,393 **** --- 397,406 ---- case COMPLEX_CST: break; + /* FIXME make this a decl. */ + case EXC_PTR_EXPR: + break; + case BIND_EXPR: simplify_bind_expr (expr_p, pre_p); break; *************** simplify_expr (expr_p, pre_p, post_p, si *** 475,480 **** --- 488,509 ---- simplify_target_expr (expr_p, pre_p, post_p); break; + case CATCH_EXPR: + simplify_stmt (&CATCH_BODY (*expr_p)); + break; + + case EH_FILTER_EXPR: + simplify_stmt (&EH_FILTER_FAILURE (*expr_p)); + break; + + case VTABLE_REF: + /* This moves much of the actual computation out of the + VTABLE_REF. Perhaps this should be revisited once we want to + do clever things with VTABLE_REFs. */ + simplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, + is_simple_min_lval, fb_lvalue); + break; + /* FIXME case MIN_EXPR: case MAX_EXPR: *************** simplify_expr (expr_p, pre_p, post_p, si *** 589,595 **** and give it void_type_node. Returns the temporary, or NULL_TREE if WRAPPER was already void. */ ! static tree voidify_wrapper_expr (wrapper) tree wrapper; { --- 618,624 ---- and give it void_type_node. Returns the temporary, or NULL_TREE if WRAPPER was already void. */ ! tree voidify_wrapper_expr (wrapper) tree wrapper; { *************** voidify_wrapper_expr (wrapper) *** 625,630 **** --- 654,668 ---- /* The C++ frontend already did this for us. */; temp = TREE_OPERAND (*p, 0); } + else if (TREE_CODE (*p) == INDIRECT_REF) + { + /* If we're returning a dereference, move the dereference outside + the wrapper. */ + tree ptr = TREE_OPERAND (*p, 0); + temp = create_tmp_var (TREE_TYPE (ptr), "retval"); + *p = build (MODIFY_EXPR, TREE_TYPE (ptr), temp, ptr); + temp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (temp)), temp); + } else { temp = create_tmp_var (TREE_TYPE (wrapper), "retval"); *************** simplify_return_expr (stmt, pre_p) *** 683,708 **** if (ret_expr) { ! if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))) { ! /* We are trying to return an expression in a void function. ! Move the expression to before the return. */ ! simplify_stmt (&ret_expr); add_tree (ret_expr, pre_p); TREE_OPERAND (stmt, 0) = NULL_TREE; } else { ! #if defined ENABLE_CHECKING ! /* A return expression is represented by a MODIFY_EXPR node that ! assigns the return value into a RESULT_DECL. */ ! if (TREE_CODE (ret_expr) != MODIFY_EXPR ! && TREE_CODE (ret_expr) != INIT_EXPR) ! abort (); ! #endif ! simplify_expr (&TREE_OPERAND (ret_expr, 1), pre_p, NULL, is_simple_rhs, fb_rvalue); } } } --- 721,745 ---- if (ret_expr) { ! /* We need to pass the full MODIFY_EXPR down so that special handling ! can replace it with something else. FIXME this code is way too ! complicated. */ ! simplify_expr (&ret_expr, pre_p, NULL, is_simple_stmt, fb_none); ! if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))) ! || TREE_CODE (ret_expr) != MODIFY_EXPR) { ! /* We are trying to return an expression in a void function, or ! our return expression isn't a simple bitwise copy. Move the ! expression to before the return. */ add_tree (ret_expr, pre_p); TREE_OPERAND (stmt, 0) = NULL_TREE; } else { ! /* Make sure the RHS is really simple. */ simplify_expr (&TREE_OPERAND (ret_expr, 1), pre_p, NULL, is_simple_rhs, fb_rvalue); + TREE_OPERAND (stmt, 0) = ret_expr; } } } *************** simplify_tree_list (expr_p, pre_p, post_ *** 1089,1097 **** *EXPR_P should be stored. */ static void ! simplify_cond_expr (expr_p, pre_p) tree *expr_p; tree *pre_p; { tree tmp = NULL_TREE; tree expr = *expr_p; --- 1126,1135 ---- *EXPR_P should be stored. */ static void ! simplify_cond_expr (expr_p, pre_p, target) tree *expr_p; tree *pre_p; + tree target; { tree tmp = NULL_TREE; tree expr = *expr_p; *************** simplify_cond_expr (expr_p, pre_p) *** 1100,1114 **** the arms. */ if (! VOID_TYPE_P (TREE_TYPE (expr))) { ! tmp = create_tmp_var (TREE_TYPE (expr), "iftmp"); ! ! /* Build the then clause, 't1 = a;'. */ ! TREE_OPERAND (expr, 1) ! = build (MODIFY_EXPR, void_type_node, tmp, TREE_OPERAND (expr, 1)); /* Build the else clause, 't1 = b;'. */ ! TREE_OPERAND (expr, 2) ! = build (MODIFY_EXPR, void_type_node, tmp, TREE_OPERAND (expr, 2)); TREE_TYPE (expr) = void_type_node; recalculate_side_effects (expr); --- 1138,1158 ---- the arms. */ if (! VOID_TYPE_P (TREE_TYPE (expr))) { ! if (target) ! tmp = target; ! else ! tmp = create_tmp_var (TREE_TYPE (expr), "iftmp"); ! ! /* Build the then clause, 't1 = a;'. But don't build an assignment ! if this branch is void; in C++ it can be, if it's a throw. */ ! if (TREE_TYPE (TREE_OPERAND (expr, 1)) != void_type_node) ! TREE_OPERAND (expr, 1) ! = build (MODIFY_EXPR, void_type_node, tmp, TREE_OPERAND (expr, 1)); /* Build the else clause, 't1 = b;'. */ ! if (TREE_TYPE (TREE_OPERAND (expr, 2)) != void_type_node) ! TREE_OPERAND (expr, 2) ! = build (MODIFY_EXPR, void_type_node, tmp, TREE_OPERAND (expr, 2)); TREE_TYPE (expr) = void_type_node; recalculate_side_effects (expr); *************** simplify_cond_expr (expr_p, pre_p) *** 1157,1168 **** *EXPR_P should be stored. */ static void ! simplify_modify_expr (expr_p, pre_p, post_p) tree *expr_p; tree *pre_p; tree *post_p; { ! tree *from; #if defined ENABLE_CHECKING if (TREE_CODE (*expr_p) != MODIFY_EXPR --- 1201,1215 ---- *EXPR_P should be stored. */ static void ! simplify_modify_expr (expr_p, pre_p, post_p, want_value) tree *expr_p; tree *pre_p; tree *post_p; + int want_value; { ! tree *from_p = &TREE_OPERAND (*expr_p, 1); ! tree *to_p = &TREE_OPERAND (*expr_p, 0); ! tree type = TREE_TYPE (*expr_p); #if defined ENABLE_CHECKING if (TREE_CODE (*expr_p) != MODIFY_EXPR *************** simplify_modify_expr (expr_p, pre_p, pos *** 1170,1197 **** abort (); #endif /* If we are initializing something from a TARGET_EXPR, strip the TARGET_EXPR and initialize it directly. */ /* What about code that pulls out the temp and uses it elsewhere? I think that such code never uses the TARGET_EXPR as an initializer. If I'm wrong, we'll abort because the temp won't have any RTL. In that case, I guess we'll need to replace references somehow. */ ! from = &TREE_OPERAND (*expr_p, 1); ! if (TREE_CODE (*from) == TARGET_EXPR) ! *from = TARGET_EXPR_INITIAL (*from); /* The distinction between MODIFY_EXPR and INIT_EXPR is no longer useful. */ if (TREE_CODE (*expr_p) == INIT_EXPR) TREE_SET_CODE (*expr_p, MODIFY_EXPR); ! simplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, ! is_simple_modify_expr_lhs, fb_lvalue); ! simplify_expr (&TREE_OPERAND (*expr_p, 1), pre_p, post_p, is_simple_rhs, ! fb_rvalue); ! add_tree (*expr_p, pre_p); ! *expr_p = TREE_OPERAND (*expr_p, 0); } --- 1217,1289 ---- abort (); #endif + simplify_expr (to_p, pre_p, post_p, is_simple_modify_expr_lhs, fb_lvalue); + /* If we are initializing something from a TARGET_EXPR, strip the TARGET_EXPR and initialize it directly. */ /* What about code that pulls out the temp and uses it elsewhere? I think that such code never uses the TARGET_EXPR as an initializer. If I'm wrong, we'll abort because the temp won't have any RTL. In that case, I guess we'll need to replace references somehow. */ ! if (TREE_CODE (*from_p) == TARGET_EXPR) ! *from_p = TARGET_EXPR_INITIAL (*from_p); ! ! /* If we're assigning from a ?: expression with ADDRESSABLE type, push ! the assignment down into the branches, since we can't generate a ! temporary of such a type. */ ! if (TREE_CODE (*from_p) == COND_EXPR ! && TREE_ADDRESSABLE (TREE_TYPE (*from_p))) ! { ! simplify_cond_expr (from_p, pre_p, *to_p); ! *expr_p = *from_p; ! /* Try again. */ ! return; ! } /* The distinction between MODIFY_EXPR and INIT_EXPR is no longer useful. */ if (TREE_CODE (*expr_p) == INIT_EXPR) TREE_SET_CODE (*expr_p, MODIFY_EXPR); ! /* Break out elements of a constructor into separate MODIFY_EXPRs. FIXME ! should also handle arrays/vectors. ! Note that we still need to clear any elements that don't have explicit ! initializers, so we keep the original MODIFY_EXPR, we just remove all ! of the constructor elements. FIXME should try to avoid clearing ! initialized elts, a la store_constructor. */ ! if (TREE_CODE (*from_p) == CONSTRUCTOR && !TREE_STATIC (*from_p) ! && (TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE ! || TREE_CODE (type) == QUAL_UNION_TYPE)) ! { ! tree elt_list = CONSTRUCTOR_ELTS (*from_p); ! CONSTRUCTOR_ELTS (*from_p) = NULL_TREE; ! add_tree (*expr_p, pre_p); ! for (; elt_list; elt_list = TREE_CHAIN (elt_list)) ! { ! tree purpose = TREE_PURPOSE (elt_list); ! tree value = TREE_VALUE (elt_list); ! tree cref = build (COMPONENT_REF, TREE_TYPE (purpose), ! *to_p, purpose); ! tree init = build (MODIFY_EXPR, TREE_TYPE (purpose), cref, value); ! simplify_expr (&init, pre_p, NULL, is_simple_stmt, fb_none); ! add_tree (init, pre_p); ! } ! *expr_p = TREE_OPERAND (*expr_p, 0); ! return; ! } ! ! /* If this is for a RETURN_EXPR, we can't have any posteffects. */ ! if (!want_value) ! post_p = NULL; ! ! simplify_expr (from_p, pre_p, post_p, is_simple_rhs, fb_rvalue); ! ! if (want_value) ! { ! add_tree (*expr_p, pre_p); ! *expr_p = TREE_OPERAND (*expr_p, 0); ! } } *************** foreach_stmt (stmt_p, fn) *** 1465,1471 **** tree *sub_p = &TREE_OPERAND (*stmt_p, 0); if (TREE_CODE (*sub_p) == COMPOUND_EXPR) foreach_stmt (sub_p, fn); ! fn (sub_p); } fn (stmt_p); } --- 1557,1564 ---- tree *sub_p = &TREE_OPERAND (*stmt_p, 0); if (TREE_CODE (*sub_p) == COMPOUND_EXPR) foreach_stmt (sub_p, fn); ! else ! fn (sub_p); } fn (stmt_p); } *************** create_tmp_var (type, prefix) *** 1567,1574 **** ASM_FORMAT_PRIVATE_NAME (tmp_name, (prefix ? prefix : "T"), id_num++); #if defined ENABLE_CHECKING ! /* If the type is an array, something is wrong. */ ! if (TREE_CODE (type) == ARRAY_TYPE) abort (); #endif --- 1660,1668 ---- ASM_FORMAT_PRIVATE_NAME (tmp_name, (prefix ? prefix : "T"), id_num++); #if defined ENABLE_CHECKING ! /* If the type is an array or a type which must be created by the ! frontend, something is wrong. */ ! if (TREE_CODE (type) == ARRAY_TYPE || TREE_ADDRESSABLE (type)) abort (); #endif *************** mostly_copy_tree_r (tp, walk_subtrees, d *** 1840,1850 **** void *data; { enum tree_code code = TREE_CODE (*tp); ! /* Don't unshare decls, blocks, types and SAVE_EXPR nodes. */ if (TREE_CODE_CLASS (code) == 't' - || TREE_CODE_CLASS (code) == 'd' - || TREE_CODE_CLASS (code) == 'c' - || TREE_CODE_CLASS (code) == 'b' || code == SAVE_EXPR || *tp == empty_stmt_node) *walk_subtrees = 0; --- 1934,1941 ---- void *data; { enum tree_code code = TREE_CODE (*tp); ! /* Don't unshare types and SAVE_EXPR nodes. */ if (TREE_CODE_CLASS (code) == 't' || code == SAVE_EXPR || *tp == empty_stmt_node) *walk_subtrees = 0; *************** mostly_copy_tree_r (tp, walk_subtrees, d *** 1861,1866 **** --- 1952,1969 ---- return NULL_TREE; } + /* Unconditionally make an unshared copy of EXPR. This is used when using + stored expressions which span multiple functions, such as BINFO_VTABLE, + as the normal unsharing process can't tell that they're shared. */ + + tree + unshare_expr (expr) + tree expr; + { + walk_tree (&expr, mostly_copy_tree_r, NULL, NULL); + return expr; + } + void mark_not_simple (expr_p) tree *expr_p; *************** mark_not_simple (expr_p) *** 1868,1873 **** --- 1971,1988 ---- TREE_NOT_GIMPLE (*expr_p) = 1; } + /* A terser interface for building a representation of a exception + specification. */ + + tree + gimple_build_eh_filter (body, allowed, failure) + tree body, allowed, failure; + { + /* FIXME should the allowed types go in TREE_TYPE? */ + tree filter = build (EH_FILTER_EXPR, void_type_node, allowed, failure); + return build (TRY_CATCH_EXPR, void_type_node, body, filter); + } + /* Simplify a CLEANUP_POINT_EXPR. Currently this works by adding WITH_CLEANUP_EXPRs to the prequeue as we encounter cleanups while simplifying the body, and converting them to TRY_FINALLY_EXPRs when we *************** simplify_cleanup_point_expr (expr_p, pre *** 1913,1919 **** if (TREE_CODE (*container) == COMPOUND_EXPR) next = TREE_OPERAND (*container, 1); else ! next = NULL_TREE; tfe = build (TRY_FINALLY_EXPR, void_type_node, next, TREE_OPERAND (wce, 1)); --- 2028,2034 ---- if (TREE_CODE (*container) == COMPOUND_EXPR) next = TREE_OPERAND (*container, 1); else ! next = empty_stmt_node; tfe = build (TRY_FINALLY_EXPR, void_type_node, next, TREE_OPERAND (wce, 1)); *************** simplify_cleanup_point_expr (expr_p, pre *** 1933,1938 **** --- 2048,2081 ---- *expr_p = body; } + /* If the language requires some sort of exception protection of cleanup + actions (i.e. calling terminate in C++), modify the cleanup to reflect + that. */ + + tree + maybe_protect_cleanup (cleanup) + tree cleanup; + { + #if 0 + /* Ack! We only want to protect the cleanup if it's run in the EH path. + There's currently no reasonable way to express this in GENERIC. FIXME + FIXME FIXME! Don't mess with this for now; it will still get handled + properly in the expander. */ + tree protect_cleanup_actions + = (lang_protect_cleanup_actions + ? (*lang_protect_cleanup_actions) () + : NULL_TREE); + + if (protect_cleanup_actions) + /* Wrap cleanups in MUST_NOT_THROW equivalent if appropriate. FIXME + perhaps this should be done earlier in the frontend so we don't need + a hook. */ + cleanup = gimple_build_eh_filter (cleanup, NULL_TREE, + protect_cleanup_actions); + #endif + return cleanup; + } + /* Insert a cleanup marker for simplify_cleanup_point_expr. CLEANUP is the cleanup action required. */ *************** gimple_push_cleanup (cleanup, pre_p) *** 1943,1948 **** --- 2086,2093 ---- { tree wce; + cleanup = maybe_protect_cleanup (cleanup); + if (gimple_conditional_context ()) { /* If we're in a conditional context, this is more complex. We only *************** simplify_target_expr (expr_p, pre_p, pos *** 2000,2015 **** temps list. */ gimple_add_tmp_var (temp); ! /* Add the initialization to pre_p. In some cases, such as C++ ! constructors, the initialization will happen by side-effect in init; ! in such cases, init will simplify to temp, so we mustn't build a ! MODIFY_EXPR. */ ! simplify_expr (&init, pre_p, post_p, is_simple_rhs, fb_rvalue); ! if (init != temp) ! { ! init = build (MODIFY_EXPR, void_type_node, temp, init); ! add_tree (init, pre_p); ! } /* If needed, push the cleanup for the temp. */ if (TARGET_EXPR_CLEANUP (targ)) --- 2145,2154 ---- temps list. */ gimple_add_tmp_var (temp); ! /* Build up the initialization and add it to pre_p. */ ! init = build (MODIFY_EXPR, void_type_node, temp, init); ! simplify_expr (&init, pre_p, post_p, is_simple_stmt, fb_none); ! add_tree (init, pre_p); /* If needed, push the cleanup for the temp. */ if (TARGET_EXPR_CLEANUP (targ)) *** ./integrate.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./integrate.c 2003-01-02 11:41:36.000000000 -0500 *************** copy_decl_for_inlining (decl, from_fn, t *** 394,400 **** DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl); /* The new variable/label has no RTL, yet. */ ! SET_DECL_RTL (copy, NULL_RTX); /* These args would always appear unused, if not for this. */ TREE_USED (copy) = 1; --- 394,401 ---- DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl); /* The new variable/label has no RTL, yet. */ ! if (!TREE_STATIC (copy) && !DECL_EXTERNAL (copy)) ! SET_DECL_RTL (copy, NULL_RTX); /* These args would always appear unused, if not for this. */ TREE_USED (copy) = 1; *************** copy_decl_for_inlining (decl, from_fn, t *** 405,414 **** ; else if (DECL_CONTEXT (decl) != from_fn) /* Things that weren't in the scope of the function we're inlining ! from aren't in the scope we're inlining too, either. */ ; else if (TREE_STATIC (decl)) ! /* Function-scoped static variables should say in the original function. */ ; else --- 406,415 ---- ; else if (DECL_CONTEXT (decl) != from_fn) /* Things that weren't in the scope of the function we're inlining ! from aren't in the scope we're inlining to, either. */ ; else if (TREE_STATIC (decl)) ! /* Function-scoped static variables should stay in the original function. */ ; else *** ./tree-dump.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree-dump.c 2002-12-16 12:09:42.000000000 -0500 *************** dump_switch_p (arg) *** 850,852 **** --- 850,878 ---- return 0; } + + /* Dump FUNCTION_DECL FN as tree dump PHASE. */ + + void + dump_function (enum tree_dump_index phase, tree fn) + { + FILE *stream; + int flags; + + stream = dump_begin (phase, &flags); + if (stream) + { + fprintf (stream, "\n;; Function %s", + (*lang_hooks.decl_printable_name) (fn, 2)); + fprintf (stream, " (%s)\n", + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fn))); + fprintf (stream, ";; enabled by -%s\n", dump_flag_name (phase)); + fprintf (stream, "\n"); + + if (flags & TDF_RAW) + dump_node (fn, TDF_SLIM | flags, stream); + else + print_generic_stmt (stream, DECL_SAVED_TREE (fn), 0); + dump_end (phase, stream); + } + } *** ./tree-dump.h.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree-dump.h 2002-12-16 12:10:40.000000000 -0500 *************** extern void queue_and_dump_index *** 91,95 **** --- 91,97 ---- PARAMS ((dump_info_p, const char *, tree, int)); extern void queue_and_dump_type PARAMS ((dump_info_p, tree)); + extern void dump_function + PARAMS ((enum tree_dump_index, tree)); #endif /* ! GCC_TREE_DUMP_H */ *** ./tree-inline.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree-inline.c 2003-01-02 11:41:53.000000000 -0500 *************** static void remap_block PARAMS ((tree *, *** 112,117 **** --- 112,119 ---- static void copy_bind_expr PARAMS ((tree *, int *, inline_data *)); static tree find_alloca_call_1 PARAMS ((tree *, int *, void *)); static tree find_alloca_call PARAMS ((tree)); + static tree mark_local_for_remap_r PARAMS ((tree *, int *, void *)); + static tree unsave_r PARAMS ((tree *, int *, void *)); /* The approximate number of instructions per statement. This number need not be particularly accurate; it is used only to make *************** remap_decl (decl, id) *** 130,137 **** --- 132,144 ---- /* We only remap local variables in the current function. */ fn = VARRAY_TOP_TREE (id->fns); + #if 0 + /* We need to remap statics, too, so that they get expanded even if the + inline function is never emitted out of line. We might as well also + remap extern decls so that they show up in the debug info. */ if (! (*lang_hooks.tree_inlining.auto_var_in_fn_p) (decl, fn)) return NULL_TREE; + #endif /* See if we have remapped this declaration. */ n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl); *************** initialize_inlined_parameters (id, args, *** 603,609 **** static tree declare_return_variable (id, return_slot_addr, use_p) ! struct inline_data *id; tree return_slot_addr; tree *use_p; { --- 610,616 ---- static tree declare_return_variable (id, return_slot_addr, use_p) ! inline_data *id; tree return_slot_addr; tree *use_p; { *************** declare_return_variable (id, return_slot *** 635,640 **** --- 642,652 ---- promoted, convert it back to the expected type. */ if (TREE_TYPE (var) == TREE_TYPE (TREE_TYPE (fn))) *use_p = var; + else if (TREE_CODE (var) == INDIRECT_REF) + *use_p = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (fn)), + TREE_OPERAND (var, 0)); + else if (TREE_ADDRESSABLE (TREE_TYPE (var))) + abort (); else *use_p = build1 (NOP_EXPR, TREE_TYPE (TREE_TYPE (fn)), var); *************** expand_call_inline (tp, walk_subtrees, d *** 908,913 **** --- 920,926 ---- { return_slot_addr = TREE_VALUE (args); args = TREE_CHAIN (args); + TREE_TYPE (expr) = void_type_node; } arg_inits = initialize_inlined_parameters (id, args, fn, expr); *************** walk_tree (tp, func, data, htab_) *** 1240,1342 **** { WALK_SUBTREE_TAIL (TREE_TYPE (*tp)); } ! else if (TREE_CODE_CLASS (code) == 't') { ! WALK_SUBTREE (TYPE_SIZE (*tp)); ! WALK_SUBTREE (TYPE_SIZE_UNIT (*tp)); ! /* Also examine various special fields, below. */ ! } ! ! /* Not one of the easy cases. We must explicitly go through the ! children. */ ! else switch (code) ! { ! case ERROR_MARK: ! case IDENTIFIER_NODE: ! case INTEGER_CST: ! case REAL_CST: ! case VECTOR_CST: ! case STRING_CST: ! case REAL_TYPE: ! case COMPLEX_TYPE: ! case VECTOR_TYPE: ! case VOID_TYPE: ! case BOOLEAN_TYPE: ! case UNION_TYPE: ! case ENUMERAL_TYPE: ! case BLOCK: ! case RECORD_TYPE: ! /* None of thse have subtrees other than those already walked ! above. */ ! break; ! case POINTER_TYPE: ! case REFERENCE_TYPE: ! WALK_SUBTREE_TAIL (TREE_TYPE (*tp)); ! break; ! case TREE_LIST: ! WALK_SUBTREE (TREE_VALUE (*tp)); ! WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); ! break; ! ! case TREE_VEC: ! { ! int len = TREE_VEC_LENGTH (*tp); ! if (len == 0) break; ! /* Walk all elements but the first. */ ! while (--len) ! WALK_SUBTREE (TREE_VEC_ELT (*tp, len)); ! ! /* Now walk the first one as a tail call. */ ! WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0)); ! } ! ! case COMPLEX_CST: ! WALK_SUBTREE (TREE_REALPART (*tp)); ! WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp)); ! ! case CONSTRUCTOR: ! WALK_SUBTREE_TAIL (CONSTRUCTOR_ELTS (*tp)); ! ! case METHOD_TYPE: ! WALK_SUBTREE (TYPE_METHOD_BASETYPE (*tp)); ! /* Fall through. */ ! ! case FUNCTION_TYPE: ! WALK_SUBTREE (TREE_TYPE (*tp)); ! { ! tree arg = TYPE_ARG_TYPES (*tp); ! ! /* We never want to walk into default arguments. */ ! for (; arg; arg = TREE_CHAIN (arg)) ! WALK_SUBTREE (TREE_VALUE (arg)); ! } ! break; ! ! case ARRAY_TYPE: ! WALK_SUBTREE (TREE_TYPE (*tp)); ! WALK_SUBTREE_TAIL (TYPE_DOMAIN (*tp)); ! ! case INTEGER_TYPE: ! WALK_SUBTREE (TYPE_MIN_VALUE (*tp)); ! WALK_SUBTREE_TAIL (TYPE_MAX_VALUE (*tp)); ! ! case OFFSET_TYPE: ! WALK_SUBTREE (TREE_TYPE (*tp)); ! WALK_SUBTREE_TAIL (TYPE_OFFSET_BASETYPE (*tp)); ! case EXIT_BLOCK_EXPR: ! WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 1)); ! case SAVE_EXPR: ! WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0)); ! default: ! abort (); } /* We didn't find what we were looking for. */ --- 1253,1358 ---- { WALK_SUBTREE_TAIL (TREE_TYPE (*tp)); } ! else { ! if (TREE_CODE_CLASS (code) == 't') ! { ! WALK_SUBTREE (TYPE_SIZE (*tp)); ! WALK_SUBTREE (TYPE_SIZE_UNIT (*tp)); ! /* Also examine various special fields, below. */ ! } ! /* Not one of the easy cases. We must explicitly go through the ! children. */ ! switch (code) ! { ! case ERROR_MARK: ! case IDENTIFIER_NODE: ! case INTEGER_CST: ! case REAL_CST: ! case VECTOR_CST: ! case STRING_CST: ! case REAL_TYPE: ! case COMPLEX_TYPE: ! case VECTOR_TYPE: ! case VOID_TYPE: ! case BOOLEAN_TYPE: ! case UNION_TYPE: ! case ENUMERAL_TYPE: ! case BLOCK: ! case RECORD_TYPE: ! /* None of thse have subtrees other than those already walked ! above. */ ! break; ! case POINTER_TYPE: ! case REFERENCE_TYPE: ! WALK_SUBTREE_TAIL (TREE_TYPE (*tp)); ! break; ! case TREE_LIST: ! WALK_SUBTREE (TREE_VALUE (*tp)); ! WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); break; ! case TREE_VEC: ! { ! int len = TREE_VEC_LENGTH (*tp); ! ! if (len == 0) ! break; ! ! /* Walk all elements but the first. */ ! while (--len) ! WALK_SUBTREE (TREE_VEC_ELT (*tp, len)); ! ! /* Now walk the first one as a tail call. */ ! WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0)); ! } ! ! case COMPLEX_CST: ! WALK_SUBTREE (TREE_REALPART (*tp)); ! WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp)); ! ! case CONSTRUCTOR: ! WALK_SUBTREE_TAIL (CONSTRUCTOR_ELTS (*tp)); ! ! case METHOD_TYPE: ! WALK_SUBTREE (TYPE_METHOD_BASETYPE (*tp)); ! /* Fall through. */ ! ! case FUNCTION_TYPE: ! WALK_SUBTREE (TREE_TYPE (*tp)); ! { ! tree arg = TYPE_ARG_TYPES (*tp); ! ! /* We never want to walk into default arguments. */ ! for (; arg; arg = TREE_CHAIN (arg)) ! WALK_SUBTREE (TREE_VALUE (arg)); ! } ! break; ! case ARRAY_TYPE: ! WALK_SUBTREE (TREE_TYPE (*tp)); ! WALK_SUBTREE_TAIL (TYPE_DOMAIN (*tp)); ! ! case INTEGER_TYPE: ! WALK_SUBTREE (TYPE_MIN_VALUE (*tp)); ! WALK_SUBTREE_TAIL (TYPE_MAX_VALUE (*tp)); ! ! case OFFSET_TYPE: ! WALK_SUBTREE (TREE_TYPE (*tp)); ! WALK_SUBTREE_TAIL (TYPE_OFFSET_BASETYPE (*tp)); ! case EXIT_BLOCK_EXPR: ! WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 1)); ! case SAVE_EXPR: ! WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0)); ! ! default: ! abort (); ! } } /* We didn't find what we were looking for. */ *************** copy_tree_r (tp, walk_subtrees, data) *** 1404,1409 **** --- 1420,1427 ---- else if (TREE_CODE_CLASS (code) == 't' && !variably_modified_type_p (*tp)) /* Types only need to be copied if they are variably modified. */ *walk_subtrees = 0; + else if (TREE_CODE_CLASS (code) == 'd') + *walk_subtrees = 0; return NULL_TREE; } *************** add_stmt_to_compound (existing, type, st *** 1467,1469 **** --- 1485,1605 ---- else return stmt; } + + /* Called via walk_tree. If *TP points to a DECL_STMT for a local + declaration, copies the declaration and enters it in the splay_tree + in DATA (which is really an `inline_data *'). */ + + static tree + mark_local_for_remap_r (tp, walk_subtrees, data) + tree *tp; + int *walk_subtrees ATTRIBUTE_UNUSED; + void *data; + { + tree t = *tp; + inline_data *id = (inline_data *) data; + splay_tree st = id->decl_map; + tree decl; + + /* Don't walk into types. */ + if (TYPE_P (t)) + { + *walk_subtrees = 0; + return NULL_TREE; + } + + if (TREE_CODE (t) == LABEL_EXPR) + decl = TREE_OPERAND (t, 0); + else + /* We don't need to handle anything else ahead of time. */ + decl = NULL_TREE; + + if (decl) + { + tree copy; + + /* Make a copy. */ + copy = copy_decl_for_inlining (decl, + DECL_CONTEXT (decl), + DECL_CONTEXT (decl)); + + /* Remember the copy. */ + splay_tree_insert (st, + (splay_tree_key) decl, + (splay_tree_value) copy); + } + + return NULL_TREE; + } + + /* Called via walk_tree when an expression is unsaved. Using the + splay_tree pointed to by ST (which is really a `splay_tree'), + remaps all local declarations to appropriate replacements. */ + + static tree + unsave_r (tp, walk_subtrees, data) + tree *tp; + int *walk_subtrees; + void *data; + { + inline_data *id = (inline_data *) data; + splay_tree st = id->decl_map; + splay_tree_node n; + + /* Only a local declaration (variable or label). */ + if ((TREE_CODE (*tp) == VAR_DECL && !TREE_STATIC (*tp)) + || TREE_CODE (*tp) == LABEL_DECL) + { + /* Lookup the declaration. */ + n = splay_tree_lookup (st, (splay_tree_key) *tp); + + /* If it's there, remap it. */ + if (n) + *tp = (tree) n->value; + } + else if (TREE_CODE (*tp) == BIND_EXPR) + copy_bind_expr (tp, walk_subtrees, id); + else if (TREE_CODE (*tp) == SAVE_EXPR) + remap_save_expr (tp, st, current_function_decl, walk_subtrees); + else + { + copy_tree_r (tp, walk_subtrees, NULL); + + /* Do whatever unsaving is required. */ + unsave_expr_1 (*tp); + } + + /* Keep iterating. */ + return NULL_TREE; + } + + /* Default lang hook for "unsave_expr_now". Copies everything in EXPR and replaces + variables, labels and SAVE_EXPRs local to EXPR. */ + + tree + lhd_unsave_expr_now (expr) + tree expr; + { + inline_data id; + + /* There's nothing to do for NULL_TREE. */ + if (expr == 0) + return expr; + + /* Set up ID. */ + memset (&id, 0, sizeof (id)); + VARRAY_TREE_INIT (id.fns, 1, "fns"); + VARRAY_PUSH_TREE (id.fns, current_function_decl); + id.decl_map = splay_tree_new (splay_tree_compare_pointers, NULL, NULL); + + /* Walk the tree once to find local labels. */ + walk_tree_without_duplicates (&expr, mark_local_for_remap_r, &id); + + /* Walk the tree again, copying, remapping, and unsaving. */ + walk_tree (&expr, unsave_r, &id, NULL); + + /* Clean up. */ + splay_tree_delete (id.decl_map); + + return expr; + } *** ./tree.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree.c 2003-01-02 11:41:55.000000000 -0500 *************** unsave_expr_1 (expr) *** 1531,1588 **** } } - /* Default lang hook for "unsave_expr_now". */ - - tree - lhd_unsave_expr_now (expr) - tree expr; - { - enum tree_code code; - - /* There's nothing to do for NULL_TREE. */ - if (expr == 0) - return expr; - - unsave_expr_1 (expr); - - code = TREE_CODE (expr); - switch (TREE_CODE_CLASS (code)) - { - case 'c': /* a constant */ - case 't': /* a type node */ - case 'd': /* A decl node */ - case 'b': /* A block node */ - break; - - case 'x': /* miscellaneous: e.g., identifier, TREE_LIST or ERROR_MARK. */ - if (code == TREE_LIST) - { - lhd_unsave_expr_now (TREE_VALUE (expr)); - lhd_unsave_expr_now (TREE_CHAIN (expr)); - } - break; - - case 'e': /* an expression */ - case 'r': /* a reference */ - case 's': /* an expression with side effects */ - case '<': /* a comparison expression */ - case '2': /* a binary arithmetic expression */ - case '1': /* a unary arithmetic expression */ - { - int i; - - for (i = first_rtl_op (code) - 1; i >= 0; i--) - lhd_unsave_expr_now (TREE_OPERAND (expr, i)); - } - break; - - default: - abort (); - } - - return expr; - } - /* Return 0 if it is safe to evaluate EXPR multiple times, return 1 if it is safe if EXPR is unsaved afterward, or return 2 if it is completely unsafe. --- 1531,1536 ---- *************** unsafe_for_reeval (expr) *** 1619,1629 **** { case SAVE_EXPR: case RTL_EXPR: /* A label can only be emitted once. */ case LABEL_EXPR: case BIND_EXPR: ! return 2; case TREE_LIST: for (exp = expr; exp != 0; exp = TREE_CHAIN (exp)) --- 1567,1581 ---- { case SAVE_EXPR: case RTL_EXPR: + return 2; /* A label can only be emitted once. */ case LABEL_EXPR: + return 1; + case BIND_EXPR: ! unsafeness = 1; ! break; case TREE_LIST: for (exp = expr; exp != 0; exp = TREE_CHAIN (exp)) *** ./tree-simple.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree-simple.c 2003-01-02 11:41:54.000000000 -0500 *************** is_simple_unary_expr (t) *** 444,450 **** /* Additions to the original grammar. Allow NON_LVALUE_EXPR and EXPR_WITH_FILE_LOCATION wrappers. */ if (TREE_CODE (t) == EXPR_WITH_FILE_LOCATION ! || TREE_CODE (t) == NON_LVALUE_EXPR) return is_simple_unary_expr (TREE_OPERAND (t, 0)); if (is_simple_varname (t) || is_simple_const (t)) --- 444,451 ---- /* Additions to the original grammar. Allow NON_LVALUE_EXPR and EXPR_WITH_FILE_LOCATION wrappers. */ if (TREE_CODE (t) == EXPR_WITH_FILE_LOCATION ! || TREE_CODE (t) == NON_LVALUE_EXPR ! || TREE_CODE (t) == VTABLE_REF) return is_simple_unary_expr (TREE_OPERAND (t, 0)); if (is_simple_varname (t) || is_simple_const (t)) *************** is_simple_id (t) *** 682,689 **** --- 683,693 ---- return (TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL || TREE_CODE (t) == PARM_DECL + || TREE_CODE (t) == RESULT_DECL || TREE_CODE (t) == FIELD_DECL || TREE_CODE (t) == LABEL_DECL + /* FIXME make this a decl. */ + || TREE_CODE (t) == EXC_PTR_EXPR /* Allow the address of a function decl. */ || (TREE_CODE (t) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL) *************** right_assocify_expr (top) *** 897,903 **** TREE_SIDE_EFFECTS (lhs) = 1; } ! /* Walk through the rhs chain from there until we find something with a different code. In this case, c. */ for (q = &TREE_OPERAND (lhs, 1); TREE_CODE (*q) == code; q = &TREE_OPERAND (*q, 1)) --- 901,907 ---- TREE_SIDE_EFFECTS (lhs) = 1; } ! /* Walk through the op1 chain from there until we find something with a different code. In this case, c. */ for (q = &TREE_OPERAND (lhs, 1); TREE_CODE (*q) == code; q = &TREE_OPERAND (*q, 1)) *** ./tree-pretty-print.c.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree-pretty-print.c 2003-01-02 15:50:43.000000000 -0500 *************** Software Foundation, 59 Temple Place - S *** 29,34 **** --- 29,35 ---- #include "real.h" #include "hashtab.h" #include "tree-flow.h" + #include "langhooks.h" /* Local functions, macros and variables. */ static int op_prio PARAMS ((tree)); *************** static void print_struct_decl PARAMS ( *** 45,68 **** int)); static void dump_block_info PARAMS ((output_buffer *, basic_block, int)); #define INDENT(SPACE) do { \ int i; for (i = 0; i>>\n"); } while (0) #define PRINT_FUNCTION_NAME(NODE) output_printf \ (buffer, "%s", TREE_CODE (NODE) == NOP_EXPR ? \ ! IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (NODE, 0))) : \ ! IDENTIFIER_POINTER (DECL_NAME (NODE))) static output_buffer buffer; static int initialized = 0; static int last_bb; static bool dumping_stmts; /* Print tree T, and its successors, on file FILE. FLAGS specifies details to show in the dump. See TDF_* in tree.h. */ --- 46,91 ---- int)); static void dump_block_info PARAMS ((output_buffer *, basic_block, int)); + static void do_niy PARAMS ((output_buffer *, + tree)); #define INDENT(SPACE) do { \ int i; for (i = 0; i>>\n"); + } + /* Print tree T, and its successors, on file FILE. FLAGS specifies details to show in the dump. See TDF_* in tree.h. */ *************** dump_generic_node (buffer, node, spc, fl *** 288,296 **** { output_add_character (buffer, '['); if (TYPE_SIZE (tmp)) ! output_decimal (buffer, ! TREE_INT_CST_LOW (TYPE_SIZE (tmp)) / ! TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (tmp)))); output_add_character (buffer, ']'); tmp = TREE_TYPE (tmp); } --- 311,326 ---- { output_add_character (buffer, '['); if (TYPE_SIZE (tmp)) ! { ! tree size = TYPE_SIZE (tmp); ! if (TREE_CODE (size) == INTEGER_CST) ! output_decimal (buffer, ! TREE_INT_CST_LOW (TYPE_SIZE (tmp)) / ! TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (tmp)))); ! else if (TREE_CODE (size) == MULT_EXPR) ! dump_generic_node (buffer, TREE_OPERAND (size, 0), spc, flags); ! /* else punt. */ ! } output_add_character (buffer, ']'); tmp = TREE_TYPE (tmp); } *************** dump_generic_node (buffer, node, spc, fl *** 704,710 **** output_add_character (buffer, '('); op1 = TREE_OPERAND (node, 1); if (op1) ! dump_generic_node (buffer, op1, 0, flags); output_add_character (buffer, ')'); break; --- 734,740 ---- output_add_character (buffer, '('); op1 = TREE_OPERAND (node, 1); if (op1) ! dump_generic_node (buffer, op1, spc, flags); output_add_character (buffer, ')'); break; *************** dump_generic_node (buffer, node, spc, fl *** 717,723 **** break; case CLEANUP_POINT_EXPR: ! NIY; break; case PLACEHOLDER_EXPR: --- 747,755 ---- break; case CLEANUP_POINT_EXPR: ! output_add_string (buffer, "<>"); break; case PLACEHOLDER_EXPR: *************** dump_generic_node (buffer, node, spc, fl *** 992,997 **** --- 1024,1047 ---- output_add_string (buffer, "}"); break; + case CATCH_EXPR: + output_add_string (buffer, "catch ("); + dump_generic_node (buffer, CATCH_TYPES (node), spc+2, flags); + output_add_string (buffer, ")"); + newline_and_indent (buffer, spc+2); + output_add_string (buffer, "{"); + newline_and_indent (buffer, spc+4); + dump_generic_node (buffer, CATCH_BODY (node), spc+4, flags); + newline_and_indent (buffer, spc+2); + output_add_string (buffer, "}"); + break; + + case EH_FILTER_EXPR: + output_add_string (buffer, "<<>>"); + break; + case GOTO_SUBROUTINE_EXPR: NIY; break; *************** dump_generic_node (buffer, node, spc, fl *** 1057,1063 **** break; case EXC_PTR_EXPR: ! NIY; break; case LOOP_EXPR: --- 1107,1113 ---- break; case EXC_PTR_EXPR: ! output_add_string (buffer, "<<>>"); break; case LOOP_EXPR: *************** dump_generic_node (buffer, node, spc, fl *** 1175,1180 **** --- 1225,1240 ---- output_add_character (buffer, ':'); break; + case VTABLE_REF: + output_add_string (buffer, "VTABLE_REF <("); + dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags); + output_add_string (buffer, "),"); + dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags); + output_add_character (buffer, ','); + dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags); + output_add_character (buffer, '>'); + break; + default: NIY; } *************** op_prio (op) *** 1434,1439 **** --- 1494,1500 ---- case FIX_CEIL_EXPR: case FIX_FLOOR_EXPR: case FIX_ROUND_EXPR: + case TARGET_EXPR: return 14; case CALL_EXPR: *** ./tree-simple.h.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree-simple.h 2002-12-15 14:39:17.000000000 -0500 *************** void gimple_push_bind_expr PARAM *** 96,101 **** --- 96,104 ---- void gimple_pop_bind_expr PARAMS ((void)); void mark_not_simple PARAMS ((tree *)); void unshare_all_trees PARAMS ((tree)); + tree voidify_wrapper_expr PARAMS ((tree)); + tree gimple_build_eh_filter PARAMS ((tree, tree, tree)); + tree maybe_protect_cleanup PARAMS ((tree)); /* Iterator object for GIMPLE statements. */ *************** gsi_stmt (i) *** 165,170 **** --- 168,175 ---- gimple_stmt_iterator i; { tree t = *(gsi_stmt_ptr (i)); + STRIP_WFL (t); + STRIP_NOPS (t); if (t == empty_stmt_node || t == error_mark_node) t = NULL_TREE; return t; *** ./tree.def.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree.def 2003-01-02 15:30:19.000000000 -0500 *************** DEFTREECODE (CASE_LABEL_EXPR, "case_labe *** 863,868 **** --- 863,878 ---- for the statement. */ DEFTREECODE (ASM_EXPR, "asm_expr", 's', 4) + /* Used to represent a typed exception handler. CATCH_TYPES is the type (or + list of types) handled, and CATCH_BODY is the code for the handler. */ + DEFTREECODE (CATCH_EXPR, "catch_expr", 's', 2) + + /* Used to represent an exception specification. EH_FILTER_TYPES is a list + of allowed types, and EH_FILTER_FAILURE is an expression to evaluate on + failure. EH_FILTER_MUST_NOT_THROW controls which range type to use when + expanding. */ + DEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", 's', 2) + /* Local variables: mode:c *** ./tree.h.~1~ 2003-01-02 12:14:45.000000000 -0500 --- ./tree.h 2003-01-02 11:41:55.000000000 -0500 *************** struct tree_common GTY(()) *** 188,193 **** --- 188,194 ---- TREE_LIST elements of a block's cleanup list. ASM_INPUT_P in ASM_EXPR + EH_FILTER_MUST_NOT_THROW in EH_FILTER_EXPR public_flag: *************** struct tree_vec GTY(()) *** 872,878 **** #define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (SAVE_EXPR_CHECK (NODE)) /* Nonzero if the SAVE_EXPRs value should be kept, even if it occurs both in normal code and in a handler. (Normally, in a handler, all ! SAVE_EXPRs are unsaved, meaning that there values are recalculated.) */ #define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (SAVE_EXPR_CHECK (NODE)) --- 873,879 ---- #define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (SAVE_EXPR_CHECK (NODE)) /* Nonzero if the SAVE_EXPRs value should be kept, even if it occurs both in normal code and in a handler. (Normally, in a handler, all ! SAVE_EXPRs are unsaved, meaning that their values are recalculated.) */ #define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (SAVE_EXPR_CHECK (NODE)) *************** struct tree_vec GTY(()) *** 971,976 **** --- 972,986 ---- the given label expression. */ #define LABEL_EXPR_LABEL(NODE) TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0) + /* CATCH_EXPR accessors. */ + #define CATCH_TYPES(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0) + #define CATCH_BODY(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1) + + /* EH_FILTER_EXPR accessors. */ + #define EH_FILTER_TYPES(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0) + #define EH_FILTER_FAILURE(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1) + #define EH_FILTER_MUST_NOT_THROW(NODE) TREE_STATIC (EH_FILTER_EXPR_CHECK (NODE)) + struct tree_exp GTY(()) { struct tree_common common; *************** const char *dump_flag_name PARAMS ((enu *** 3285,3290 **** --- 3295,3301 ---- extern int simplify_function_tree PARAMS ((tree)); extern const char *get_name PARAMS ((tree)); + extern tree unshare_expr PARAMS ((tree)); /* Redefine abort to report an internal error w/o coredump, and reporting the location of the error in the source file. This logic --=-=-=-- From gcc-patches-return-74927-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 00:40:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22336 invoked by alias); 3 Jan 2003 00:40:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22321 invoked from network); 3 Jan 2003 00:40:34 -0000 Received: from unknown (HELO disaster.jaj.com) (66.93.21.106) by 209.249.29.67 with SMTP; 3 Jan 2003 00:40:34 -0000 Received: (from phil@localhost) by disaster.jaj.com (8.11.4/8.11.4) id h030eLE02326; Thu, 2 Jan 2003 19:40:21 -0500 Date: Thu, 2 Jan 2003 19:40:21 -0500 From: Phil Edwards To: Mark Mitchell Cc: Benjamin Kosnik , "gcc-patches@gcc.gnu.org" , "libstdc++@gcc.gnu.org" Subject: Re: V3 PATCH: Various pedantic fixes Message-ID: <20030102194021.A2277@disaster.jaj.com> References: <20030102143813.34974847.bkoz@redhat.com> <90720000.1041544393@warlock.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <90720000.1041544393@warlock.codesourcery.com>; from mark@codesourcery.com on Thu, Jan 02, 2003 at 01:53:13PM -0800 --On Thursday, January 02, 2003 02:38:13 PM -0600 Benjamin Kosnik > wrote: > > > Thanks for this and the new C++ parser Mark. Ditto! I've always had a current "wouldn't it be cool if..." hack project going on, but never one realted to GCC. Now I do: with this parser, I can start playing with N1345[*], and if I fail to implement it, it will be from laziness rather than an inability to fully grok a 15-year-old yacc grammar. Phil [*] http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1345.html -- I would therefore like to posit that computing's central challenge, viz. "How not to make a mess of it," has /not/ been met. - Edsger Dijkstra, 1930-2002 From gcc-patches-return-74928-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 01:02:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2009 invoked by alias); 3 Jan 2003 01:02:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1905 invoked from network); 3 Jan 2003 01:02:49 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.72.168) by 209.249.29.67 with SMTP; 3 Jan 2003 01:02:49 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id 9A9165DA5; Fri, 3 Jan 2003 02:03:15 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id E0C00F867; Fri, 3 Jan 2003 02:03:15 +0100 (CET) Date: Fri, 3 Jan 2003 02:03:14 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Alexandre Oliva Cc: Subject: Re: [3.4-bi] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello, On 2 Jan 2003, Alexandre Oliva wrote: > On Jan 1, 2003, Christian Cornelssen wrote: > > > Here are the diffs against current mainline HEAD. > > Thanks for updating the patch, and sorry about not having reviewed the > earlier versions thereof in a timely manner. > > > # Create the installation directories. > > +# $(libdir)/gcc-lib/include isn't currently searched by cpp. > > installdirs: > [...] > > + -for d in $(libsubdir) $(bindir) $(includedir) $(infodir) $(slibdir) $(man1dir) $(man7dir); do \ > > + fdir=; for dir in `echo "$(DESTDIR)$$d" | tr '/' ' '`; do \ > > + fdir=$${fdir}/$${dir}; \ > > + if [ -d "$${fdir}" ] ; then true ; \ > > + else mkdir "$${fdir}" || break; chmod a+rx "$${fdir}"; fi ; \ > > + done; \ > > done > > It looks like you're dropping the creation of prefix, exec_prefix, > libdir and libdir/gcc-lib here. Since you're actually changing the > code, I suppose we might as well go ahead and drop all this gunk and > use mkinstalldirs instead. The loop essentially functions like "mkdir -p", therefore only the directories that are ultimate installation destinations need to be specified. But you are right in that the loops could simply be replaced with an "mkinstalldirs" command. I just did not want to get boos for introducing an external tool there, and the inner loop had already been present, so I just extended its use. > > Index: gcc/mkheaders.in > > I'm not sure you want DESTDIR support here. mkheaders is used when > the package is already installed in the final location, not during > make install, when DESTDIR actually matters. I won't oppose to its > getting in, but I can't approve this change since it's not a change in > the build machinery code. I have verified that it works, but I am indifferent about whether it should get in, too. Pro: "mkinstalldirs" already takes an optional "prefix" argument which is not as perfectly suited for relocation purposes as DESTDIR. Thus, adding DESTDIR support here is logical, since otherwise "mkheaders" would be the only point where changing prefix would still be necessary for mere installation root changes. One possible application: You can actually run "mkheaders" with precisely the same command line as in the final system, but before GCC is finally installed. This is good for testing purposes. On the other hand, having "mkheaders" be sensitive to a DESTDIR environment variable may be undesirable when all files and the script have been installed finally. And normally, no executable is expected to find its stuff outside the configured locations, hence "mkheaders" does not have to be nicer. > All other changes are ok, but we're going to need ChangeLog entries to > put them in. Fed into the respective */ChangeLog files? Grmpf. But ok. > In general, for such a large patch, we'd need copyright assignments, > but since the changes are mostly mechanical, I don't think they can be > covered by copyright, so we're probably safe. Incidentally, since > they're not covered by copyright, we don't have to worry about > updating the copyright notices of all modified files at this time. I agree. However, I have assigned copyright, so we're on the very safe side. (Cf. the threads related to DESTDIR patches for previous GCC releases.) > I suggest that we revert the change in installdirs, except for the > addition of DESTDIR, and those in mkheaders, and address those in > separate, smaller patches. How does that sound to you? "mkheaders" seems to be a separate issue, but `gcc/Makefile.in's installdirs rule should be changed along with all other DESTDIR patches because a new routine is needed to create the (mostly nonexistent) DESTDIRed installdirs robustly. Without some sort of mkinstalldirs functionality, trying the DESTDIR support with the most common usage, i.e. setting DESTDIR to some yet nonexistent directory, will simply fail. I suggest the following rule: # Create the installation directories. # $(libdir)/gcc-lib/include isn't currently searched by cpp. installdirs: $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(libsubdir) $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(bindir) $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(includedir) $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(infodir) $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(slibdir) $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(man1dir) $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(man7dir) Alternatively, one command with the complete directory list would work at least as well, but the above sequence is easier to edit. I'll prepare the remaining ChangeLog patches and separate out the `gcc/mkheaders.in' diff. Many thanks for reviewing and commenting on this. Besides, I have successfully verified the `destdir2*.diff's on i586-pc-linux-gnu (without Ada). However, I'd like to see the patches tested for platforms for which I have changed `gcc/config/*' files (i.e. systems based on alpha, arm, ia64, mips, pa, rs6000). Regards, Christian Cornelssen From gcc-patches-return-74929-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 01:47:41 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13201 invoked by alias); 3 Jan 2003 01:47:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13186 invoked from network); 3 Jan 2003 01:47:39 -0000 Received: from unknown (HELO lutetium.btinternet.com) (194.73.73.116) by sources.redhat.com with SMTP; 3 Jan 2003 01:47:39 -0000 Received: from host213-122-215-63.in-addr.btopenworld.com ([213.122.215.63] helo=btinternet.com) by lutetium.btinternet.com with esmtp (Exim 3.22 #16) id 18UGvu-0001jw-00; Fri, 03 Jan 2003 01:47:35 +0000 Message-ID: <3E14EC0C.9060007@btinternet.com> Date: Fri, 03 Jan 2003 01:49:00 +0000 From: Graham Stott User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20021003 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Mark Mitchell , gcc-patches@gcc.gnu.org Subject: Re: Bootstrap failure on irix6.5 possibly caused by new C++ parser? References: <632670000.1041380610@warlock.codesourcery.com> Content-Type: multipart/mixed; boundary="------------070104040103010804060009" This is a multi-part message in MIME format. --------------070104040103010804060009 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Mark Mitchell wrote: >>> I think you can use just one variable in the cp_parser struct, instead >>> of maintaining the two separate lists-of-lists, too. >> >> I'm not sure that's possible. After looking at it from a different angle I decided that you were correct a single list-of-lists is suffices. > > > OK; that's not very important. > > Thanks, > Attached is an updated patch addressing all three issues you raised. We use a single list as a simple stack. Bootstrapped regtested i686-pc-linux-gnu no regressions. built powerpc-eabi toolchain no regression. OK for mainline? ChangeLog * parser.c (struct cp_parser): Add access_checks_lists field (cp_parser_simple_declaration): Use. (cp_parser_init_declarator): Likewise. --------------070104040103010804060009 Content-Type: text/x-diff; name="parser.c.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="parser.c.diff" Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.16 diff -c -p -r1.16 parser.c *** parser.c 2 Jan 2003 20:30:45 -0000 1.16 --- parser.c 3 Jan 2003 01:33:05 -0000 *************** typedef struct cp_parser GTY(()) *** 1343,1348 **** --- 1343,1352 ---- /* The number of template parameter lists that apply directly to the current declaration. */ unsigned num_template_parameter_lists; + + /* List of access checks lists, used to prevent GC collection while + they are in use. */ + tree access_checks_lists; } cp_parser; /* The type of a function that parses some kind of expression */ *************** cp_parser_simple_declaration (parser, fu *** 6741,6746 **** --- 6745,6754 ---- /* We no longer need to defer access checks. */ access_checks = cp_parser_stop_deferring_access_checks (parser); + /* Prevent access checks from being reclaimed by GC. */ + parser->access_checks_lists = tree_cons (NULL_TREE, access_checks, + parser->access_checks_lists); + /* Keep going until we hit the `;' at the end of the simple declaration. */ saw_declarator = false; *************** cp_parser_simple_declaration (parser, fu *** 6770,6776 **** error ("mixing declarations and function-definitions is forbidden"); /* Otherwise, we're done with the list of declarators. */ else ! return; } /* The next token should be either a `,' or a `;'. */ token = cp_lexer_peek_token (parser->lexer); --- 6778,6789 ---- error ("mixing declarations and function-definitions is forbidden"); /* Otherwise, we're done with the list of declarators. */ else ! { ! /* Discard access checks no longer in use. */ ! parser->access_checks_lists ! = TREE_CHAIN (parser->access_checks_lists); ! return; ! } } /* The next token should be either a `,' or a `;'. */ token = cp_lexer_peek_token (parser->lexer); *************** cp_parser_simple_declaration (parser, fu *** 6786,6791 **** --- 6799,6807 ---- cp_parser_error (parser, "expected `,' or `;'"); /* Skip tokens until we reach the end of the statement. */ cp_parser_skip_to_end_of_statement (parser); + /* Discard access checks no longer in use. */ + parser->access_checks_lists + = TREE_CHAIN (parser->access_checks_lists); return; } /* After the first time around, a function-definition is not *************** cp_parser_simple_declaration (parser, fu *** 6814,6819 **** --- 6830,6838 ---- /* Mark all the classes that appeared in the decl-specifier-seq as having received a `;'. */ note_list_got_semicolon (decl_specifiers); + + /* Discard access checks no longer in use. */ + parser->access_checks_lists = TREE_CHAIN (parser->access_checks_lists); } /* Parse a decl-specifier-seq. *************** cp_parser_init_declarator (parser, *** 9709,9718 **** declarator_access_checks = cp_parser_stop_deferring_access_checks (parser); /* If the DECLARATOR was erroneous, there's no need to go further. */ if (declarator == error_mark_node) ! return error_mark_node; /* Figure out what scope the entity declared by the DECLARATOR is located in. `grokdeclarator' sometimes changes the scope, so --- 9728,9747 ---- declarator_access_checks = cp_parser_stop_deferring_access_checks (parser); + /* Prevent the access checks from being reclaimed by GC. */ + parser->access_checks_lists + = tree_cons (NULL_TREE, declarator_access_checks, + parser->access_checks_lists); + /* If the DECLARATOR was erroneous, there's no need to go further. */ if (declarator == error_mark_node) ! { ! /* Discard access checks no longer in use. */ ! parser->access_checks_lists ! = TREE_CHAIN (parser->access_checks_lists); ! return error_mark_node; ! } /* Figure out what scope the entity declared by the DECLARATOR is located in. `grokdeclarator' sometimes changes the scope, so *************** cp_parser_init_declarator (parser, *** 9746,9751 **** --- 9775,9783 ---- error message. */ cp_parser_error (parser, "a function-definition is not allowed here"); + /* Discard access checks no longer in use. */ + parser->access_checks_lists + = TREE_CHAIN (parser->access_checks_lists); return error_mark_node; } else *************** cp_parser_init_declarator (parser, *** 9775,9780 **** --- 9807,9816 ---- /* Pull the access-checks apart again. */ *ac = NULL_TREE; + /* Discard access checks no longer in use. */ + parser->access_checks_lists + = TREE_CHAIN (parser->access_checks_lists); + return decl; } } *************** cp_parser_init_declarator (parser, *** 9791,9796 **** --- 9827,9835 ---- { cp_parser_error (parser, "expected constructor, destructor, or type conversion"); + /* Discard access checks no longer in use. */ + parser->access_checks_lists + = TREE_CHAIN (parser->access_checks_lists); return error_mark_node; } *************** cp_parser_init_declarator (parser, *** 9804,9809 **** --- 9843,9851 ---- && token->type != CPP_SEMICOLON) { cp_parser_error (parser, "expected init-declarator"); + /* Discard access checks no longer in use. */ + parser->access_checks_lists + = TREE_CHAIN (parser->access_checks_lists); return error_mark_node; } *************** cp_parser_init_declarator (parser, *** 9818,9824 **** /* Check that the number of template-parameter-lists is OK. */ if (!cp_parser_check_declarator_template_parameters (parser, declarator)) ! return error_mark_node; /* Enter the newly declared entry in the symbol table. If we're processing a declaration in a class-specifier, we wait until --- 9860,9871 ---- /* Check that the number of template-parameter-lists is OK. */ if (!cp_parser_check_declarator_template_parameters (parser, declarator)) ! { ! /* Discard access checks no longer in use. */ ! parser->access_checks_lists ! = TREE_CHAIN (parser->access_checks_lists); ! return error_mark_node; ! } /* Enter the newly declared entry in the symbol table. If we're processing a declaration in a class-specifier, we wait until *************** cp_parser_init_declarator (parser, *** 9913,9918 **** --- 9960,9969 ---- `explicit' constructor cannot be used. */ ((is_parenthesized_init || !is_initialized) ? 0 : LOOKUP_ONLYCONVERTING)); + + /* Discard access checks no longer in use. */ + parser->access_checks_lists + = TREE_CHAIN (parser->access_checks_lists); return decl; } --------------070104040103010804060009-- From gcc-patches-return-74930-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 01:51:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14496 invoked by alias); 3 Jan 2003 01:51:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14388 invoked from network); 3 Jan 2003 01:51:01 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by sources.redhat.com with SMTP; 3 Jan 2003 01:51:01 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id UAA06708; Thu, 2 Jan 2003 20:50:59 -0500 (EST) Date: Thu, 2 Jan 2003 20:50:59 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301030150.UAA06708@caip.rutgers.edu> To: dje@watson.ibm.com, mark@codesourcery.com Subject: Re: C++ Parser testcase failure on AIX Cc: gcc-patches@gcc.gnu.org References: <66600000.1041533962@warlock.codesourcery.com> > From: Mark Mitchell > > > XPASS: g++.bugs/900404_04.C , (test for errors, line 15) > > XPASS: g++.jason/access8.C cannot convert to inh (test for errors, line 28) > > XPASS: g++.other/decl5.C ::Q not a member of B (test for errors, line 34) > > > > Is it appripriate to remove the XFAILs for these cases? > > Yeah, consider that pre-approved. I've basked in their warm glow long > enough, I guess. :-) :-) Ok here's what I installed. 2003-01-02 Kaveh R. Ghazi * g++.old-deja/g++.bugs/900404_04.C: Remove XFAIL. * g++.old-deja/g++.jason/access8.C: Likewise. * g++.old-deja/g++.other/decl5.C: Likewise. diff -rup orig/egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C --- orig/egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C 1998-12-16 16:29:27.000000000 -0500 +++ egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C 2003-01-02 17:45:29.930028332 -0500 @@ -12,6 +12,6 @@ int i; -; // ERROR - , XFAIL *-*-* +; // ERROR - int main () { return 0; } diff -rup orig/egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.jason/access8.C egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.jason/access8.C --- orig/egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.jason/access8.C 2002-12-28 07:00:53.000000000 -0500 +++ egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.jason/access8.C 2003-01-02 17:45:54.098036002 -0500 @@ -25,6 +25,6 @@ void inh::myf(int i) { } void top_t::myf(int i) { - inh::myf(i); // ERROR - cannot convert to inh XFAIL *-*-* + inh::myf(i); // ERROR - cannot convert to inh mel::myf(i); } diff -rup orig/egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.other/decl5.C egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.other/decl5.C --- orig/egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.other/decl5.C 2002-12-28 07:00:59.000000000 -0500 +++ egcc-CVS20030102/gcc/testsuite/g++.old-deja/g++.other/decl5.C 2003-01-02 17:47:11.081646288 -0500 @@ -31,7 +31,7 @@ struct B { }; int m; int n; - struct ::Q { // ERROR - ::Q not a member of B XFAIL + struct ::Q { // ERROR - ::Q not a member of B int m; }; int A::fn() { // ERROR - A::fn not a member of B From gcc-patches-return-74931-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 01:52:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14942 invoked by alias); 3 Jan 2003 01:52:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14893 invoked from network); 3 Jan 2003 01:51:37 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.72.168) by sources.redhat.com with SMTP; 3 Jan 2003 01:51:37 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id CDA485DA5; Fri, 3 Jan 2003 02:52:12 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id 7AB89F867 for ; Fri, 3 Jan 2003 02:52:11 +0100 (CET) Date: Fri, 3 Jan 2003 02:52:10 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Re: [3.4] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-1802465805-1041558730=:28243" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-1802465805-1041558730=:28243 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello, In `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00111.html', on Fri, 3 Jan 2003, Christian Cornelssen wrote: > Pro: "mkinstalldirs" already takes an optional "prefix" argument which --------^ should have been "mkheaders", of course, sorry... I have changed the installdirs rule and taken out the "mkheaders" patch from `destdir2.diff', as suggested. The result is attached as `destdir3.diff'. Please visit `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00047.html' for the patches adding documentation and regenerating dependent files. ChangeLog entry preparation is in progress... I am hoping for feedback from testers on modern targets and/or with Ada. The patches are uncritical in that they don't change commands there when DESTDIR is empty, but the goal is to support nonempty values (*absolute* paths), of course. Regards, Christian Cornelssen --8323584-1802465805-1041558730=:28243 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir3.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir3.diff" SW5kZXg6IE1ha2VmaWxlLnRwbA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9NYWtl ZmlsZS50cGwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjI3DQpkaWZmIC11 IC1yMS4yNyBNYWtlZmlsZS50cGwNCi0tLSBNYWtlZmlsZS50cGwJMjkgRGVj IDIwMDIgMTk6MDQ6NDAgLTAwMDAJMS4yNw0KKysrIE1ha2VmaWxlLnRwbAkx IEphbiAyMDAzIDE3OjI2OjM0IC0wMDAwDQpAQCAtMzg4LDYgKzM4OCw3IEBA DQogCSJDWFhGTEFHUz0kKENYWEZMQUdTKSIgXA0KIAkiQ1hYRkxBR1NfRk9S X1RBUkdFVD0kKENYWEZMQUdTX0ZPUl9UQVJHRVQpIiBcDQogCSJDWFhfRk9S X1RBUkdFVD0kKENYWF9GT1JfVEFSR0VUKSIgXA0KKwkiREVTVERJUj0kKERF U1RESVIpIiBcDQogCSJETExUT09MX0ZPUl9UQVJHRVQ9JChETExUT09MX0ZP Ul9UQVJHRVQpIiBcDQogCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwNCiAJIklO U1RBTExfREFUQT0kKElOU1RBTExfREFUQSkiIFwNCkBAIC02MzMsNyArNjM0 LDcgQEANCiBpbnN0YWxsLWluZm86IGRvLWluc3RhbGwtaW5mbyBkaXIuaW5m bw0KIAlzPWBjZCAkKHNyY2Rpcik7ICR7UFdEfWA7IGV4cG9ydCBzOyBcDQog CWlmIFsgLWYgZGlyLmluZm8gXSA7IHRoZW4gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSBkaXIuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvIDsgXA0KKwkgICQo SU5TVEFMTF9EQVRBKSBkaXIuaW5mbyAkKERFU1RESVIpJChpbmZvZGlyKS9k aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgZmkNCiANCiBsb2NhbC1jbGVh bjoNCkBAIC03NjQsNyArNzY1LDcgQEANCiANCiBkaXIuaW5mbzogZG8taW5z dGFsbC1pbmZvDQogCWlmIFsgLWYgJChzcmNkaXIpL3RleGluZm8vZ2VuLWlu Zm8tZGlyIF0gOyB0aGVuIFwNCi0JICAkKHNyY2RpcikvdGV4aW5mby9nZW4t aW5mby1kaXIgJChpbmZvZGlyKSAkKHNyY2RpcikvdGV4aW5mby9kaXIuaW5m by10ZW1wbGF0ZSA+IGRpci5pbmZvLm5ldyA7IFwNCisJICAkKHNyY2Rpcikv dGV4aW5mby9nZW4taW5mby1kaXIgJChERVNURElSKSQoaW5mb2RpcikgJChz cmNkaXIpL3RleGluZm8vZGlyLmluZm8tdGVtcGxhdGUgPiBkaXIuaW5mby5u ZXcgOyBcDQogCSAgbXYgLWYgZGlyLmluZm8ubmV3IGRpci5pbmZvIDsgXA0K IAllbHNlIHRydWUgOyBcDQogCWZpDQpJbmRleDogZ2NjL01ha2VmaWxlLmlu DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9NYWtlZmlsZS5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuOTYxDQpkaWZmIC11IC1yMS45NjEgTWFrZWZp bGUuaW4NCi0tLSBnY2MvTWFrZWZpbGUuaW4JMTkgRGVjIDIwMDIgMTU6NTM6 NDYgLTAwMDAJMS45NjENCisrKyBnY2MvTWFrZWZpbGUuaW4JMyBKYW4gMjAw MyAwMDozNTo0NSAtMDAwMA0KQEAgLTY4OCw2ICs2ODgsNyBAQA0KIAkiQklT T049JChCSVNPTikiIFwNCiAJIkJJU09ORkxBR1M9JChCSVNPTkZMQUdTKSIg XA0KIAkiQ0ZMQUdTPSQoQ0ZMQUdTKSAkKFdBUk5fQ0ZMQUdTKSIgXA0KKwki REVTVERJUj0kKERFU1RESVIpIiBcDQogCSJHQ0NfRk9SX1RBUkdFVD0kKEdD Q19GT1JfVEFSR0VUKSIgXA0KIAkiTERGTEFHUz0kKExERkxBR1MpIiBcDQog CSJGTEVYPSQoRkxFWCkiIFwNCkBAIC0yMzg2LDcgKzIzODcsNyBAQA0KIA0K IC5QSE9OWTogaW5zdGFsbC1nY2MtdG9vbGRpcg0KIGluc3RhbGwtZ2NjLXRv b2xkaXI6DQotCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxkaXJzICQo Z2NjX3Rvb2xkaXIpDQorCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxk aXJzICQoREVTVERJUikkKGdjY190b29sZGlyKQ0KIA0KICMgQnVpbGQgZml4 ZWQgY29waWVzIG9mIHN5c3RlbSBmaWxlcy4NCiBzdG1wLWZpeGluYzogZml4 aW5jLnNoIGdzeXNsaW1pdHMuaA0KQEAgLTI3NzYsMTczICsyNzc3LDE2MyBA QA0KICMgSGFuZGxlIGNwcCBpbnN0YWxsYXRpb24uDQogaW5zdGFsbC1jcHA6 IGNwcCQoZXhlZXh0KQ0KIAktaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkg XSA7IHRoZW4gXA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKENQUF9DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3 NTUgY3BwJChleGVleHQpICQoYmluZGlyKS8kKENQUF9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChD UFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJP R1JBTSkgLW0gNzU1IGNwcCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIp LyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQogCSAgaWYgWyB4JChj cHBfaW5zdGFsbF9kaXIpICE9IHggXTsgdGhlbiBcDQotCSAgICBybSAtZiAk KHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0NST1NTX05BTUUp JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1 IGNwcCQoZXhlZXh0KSAkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQo Q1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChERVNURElSKSQocHJlZml4KS8kKGNw cF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN CiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWVsc2UgXA0KLQkgIHJtIC1mICQo YmluZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAg JChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChiaW5k aXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNwcCQo ZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCk7IFwNCiAJICBpZiBbIHgkKGNwcF9pbnN0YWxsX2Rpcikg IT0geCBdOyB0aGVuIFwNCi0JICAgIHJtIC1mICQocHJlZml4KS8kKGNwcF9p bnN0YWxsX2RpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K LQkgICAgJChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkg JChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChwcmVm aXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNw cCQoZXhlZXh0KSAkKERFU1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxf ZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZWxz ZSB0cnVlOyBmaTsgXA0KIAlmaQ0KIA0KICMgQ3JlYXRlIHRoZSBpbnN0YWxs YXRpb24gZGlyZWN0b3JpZXMuDQorIyAkKGxpYmRpcikvZ2NjLWxpYi9pbmNs dWRlIGlzbid0IGN1cnJlbnRseSBzZWFyY2hlZCBieSBjcHAuDQogaW5zdGFs bGRpcnM6DQotCS1pZiBbIC1kICQocHJlZml4KSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKHByZWZpeCkgOyBjaG1vZCBhK3J4ICQocHJlZml4KSA7 IGZpDQotCS1pZiBbIC1kICQoZXhlY19wcmVmaXgpIF0gOyB0aGVuIHRydWUg OyBlbHNlIG1rZGlyICQoZXhlY19wcmVmaXgpIDsgY2htb2QgYStyeCAkKGV4 ZWNfcHJlZml4KSA7IGZpDQotCS1pZiBbIC1kICQobGliZGlyKSBdIDsgdGhl biB0cnVlIDsgZWxzZSBta2RpciAkKGxpYmRpcikgOyBjaG1vZCBhK3J4ICQo bGliZGlyKSA7IGZpDQotCS1pZiBbIC1kICQobGliZGlyKS9nY2MtbGliIF0g OyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQobGliZGlyKS9nY2MtbGliIDsg Y2htb2QgYStyeCAkKGxpYmRpcikvZ2NjLWxpYiA7IGZpDQotIyBUaGlzIGRp ciBpc24ndCBjdXJyZW50bHkgc2VhcmNoZWQgYnkgY3BwLg0KLSMJLWlmIFsg LWQgJChsaWJkaXIpL2djYy1saWIvaW5jbHVkZSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKGxpYmRpcikvZ2NjLWxpYi9pbmNsdWRlIDsgY2htb2Qg YStyeCAkKGxpYmRpcikvZ2NjLWxpYi9pbmNsdWRlIDsgZmkNCi0JLWZkaXI9 IDsgZm9yIGRpciBpbiBgZWNobyAkKGxpYnN1YmRpcikgfCB0ciAnLycgJyAn YDsgZG8gXA0KLQkgIGZkaXI9JCR7ZmRpcn0vJCR7ZGlyfTsgXA0KLQkgIGlm IFsgLWQgJCR7ZmRpcn0gXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJCR7 ZmRpcn07IGNobW9kIGErcnggJCR7ZmRpcn07IGZpIDsgXA0KLQlkb25lDQot CS1pZiBbIC1kICQoYmluZGlyKSBdIDsgdGhlbiB0cnVlIDsgZWxzZSBta2Rp ciAkKGJpbmRpcikgOyBjaG1vZCBhK3J4ICQoYmluZGlyKSA7IGZpDQotCS1p ZiBbIC1kICQoaW5jbHVkZWRpcikgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtk aXIgJChpbmNsdWRlZGlyKSA7IGNobW9kIGErcnggJChpbmNsdWRlZGlyKSA7 IGZpDQotCS1pZiBbIC1kICQoaW5mb2RpcikgXSA7IHRoZW4gdHJ1ZSA7IGVs c2UgbWtkaXIgJChpbmZvZGlyKSA7IGNobW9kIGErcnggJChpbmZvZGlyKSA7 IGZpDQotCS1pZiBbIC1kICQoc2xpYmRpcikgXSA7IHRoZW4gdHJ1ZSA7IGVs c2UgbWtkaXIgJChzbGliZGlyKSA7IGNobW9kIGErcnggJChzbGliZGlyKSA7 IGZpDQotIyBXZSBkb24ndCB1c2UgbWtkaXIgLXAgdG8gY3JlYXRlIHRoZSBw YXJlbnRzIG9mIG1hbjFkaXIsDQotIyBiZWNhdXNlIHNvbWUgc3lzdGVtcyBk b24ndCBzdXBwb3J0IGl0Lg0KLSMgSW5zdGVhZCwgd2UgdXNlIHRoaXMgdGVj aG5pcXVlIHRvIGNyZWF0ZSB0aGUgaW1tZWRpYXRlIHBhcmVudCBvZiBtYW4x ZGlyLg0KLQktcGFyZW50PWBlY2hvICQobWFuMWRpcil8c2VkIC1lICdzQC9b Xi9dKiQkQEAnYDsgXA0KLQlpZiBbIC1kICQkcGFyZW50IF0gOyB0aGVuIHRy dWUgOyBlbHNlIG1rZGlyICQkcGFyZW50IDsgY2htb2QgYStyeCAkJHBhcmVu dCA7IGZpDQotCS1pZiBbIC1kICQobWFuMWRpcikgXSA7IHRoZW4gdHJ1ZSA7 IGVsc2UgbWtkaXIgJChtYW4xZGlyKSA7IGNobW9kIGErcnggJChtYW4xZGly KSA7IGZpDQotCS1pZiBbIC1kICQobWFuN2RpcikgXSA7IHRoZW4gdHJ1ZSA7 IGVsc2UgbWtkaXIgJChtYW43ZGlyKSA7IGNobW9kIGErcnggJChtYW43ZGly KSA7IGZpDQorCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxkaXJzICQo REVTVERJUikkKGxpYnN1YmRpcikNCisJJChTSEVMTCkgJHtzcmNkaXJ9L21r aW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKQ0KKwkkKFNIRUxMKSAk e3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChpbmNsdWRlZGly KQ0KKwkkKFNIRUxMKSAke3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RE SVIpJChpbmZvZGlyKQ0KKwkkKFNIRUxMKSAke3NyY2Rpcn0vbWtpbnN0YWxs ZGlycyAkKERFU1RESVIpJChzbGliZGlyKQ0KKwkkKFNIRUxMKSAke3NyY2Rp cn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChtYW4xZGlyKQ0KKwkkKFNI RUxMKSAke3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChtYW43 ZGlyKQ0KIA0KICMgSW5zdGFsbCB0aGUgY29tcGlsZXIgZXhlY3V0YWJsZXMg YnVpbHQgZHVyaW5nIGNyb3NzIGNvbXBpbGF0aW9uLg0KIGluc3RhbGwtY29t bW9uOiBuYXRpdmUgJChFWFRSQV9QQVJUUykgbGFuZy5pbnN0YWxsLWNvbW1v bg0KIAlmb3IgZmlsZSBpbiAkKENPTVBJTEVSUyk7IGRvIFwNCiAJICBpZiBb IC1mICQkZmlsZSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAkKGxpYnN1YmRp cikvJCRmaWxlOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxl ICQobGlic3ViZGlyKS8kJGZpbGU7IFwNCisJICAgIHJtIC1mICQoREVTVERJ UikkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgJCRmaWxlICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxlOyBc DQogCSAgZWxzZSB0cnVlOyBcDQogCSAgZmk7IFwNCiAJZG9uZQ0KIAlmb3Ig ZmlsZSBpbiAkKEVYVFJBX1BBU1NFUykgJChFWFRSQV9QUk9HUkFNUykgJChV U0VfQ09MTEVDVDIpIC4uOyBkbyBcDQogCSAgaWYgWyB4IiQkZmlsZSIgIT0g eC4uIF07IHRoZW4gXA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkZmls ZTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKGxpYnN1 YmRpcikvJCRmaWxlOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJz dWJkaXIpLyQkZmlsZTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQk ZmlsZSAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KIAkgIGVs c2UgdHJ1ZTsgZmk7IFwNCiAJZG9uZQ0KIAlmb3IgZmlsZSBpbiAkKEVYVFJB X1BBUlRTKSAuLjsgZG8gXA0KIAkgIGlmIFsgeCIkJGZpbGUiICE9IHguLiBd OyB0aGVuIFwNCi0JICAgIHJtIC1mICQobGlic3ViZGlyKS8kJGZpbGU7IFwN Ci0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChsaWJzdWJkaXIpLyQk ZmlsZTsgXA0KLQkgICAgY2htb2QgYS14ICQobGlic3ViZGlyKS8kJGZpbGU7 IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxl OyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikk KGxpYnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNU RElSKSQobGlic3ViZGlyKS8kJGZpbGU7IFwNCiAJICBlbHNlIHRydWU7IGZp OyBcDQogCWRvbmUNCiAjIERvbid0IG1lc3Mgd2l0aCBzcGVjcyBpZiBpdCBk b2Vzbid0IGV4aXN0IHlldC4NCiAJLWlmIFsgLWYgc3BlY3MgXSA7IHRoZW4g XA0KLQkgIHJtIC1mICQobGlic3ViZGlyKS9zcGVjczsgXA0KLQkgICQoSU5T VEFMTF9EQVRBKSBzcGVjcyAkKGxpYnN1YmRpcikvc3BlY3M7IFwNCi0JICBj aG1vZCBhLXggJChsaWJzdWJkaXIpL3NwZWNzOyBcDQorCSAgcm0gLWYgJChE RVNURElSKSQobGlic3ViZGlyKS9zcGVjczsgXA0KKwkgICQoSU5TVEFMTF9E QVRBKSBzcGVjcyAkKERFU1RESVIpJChsaWJzdWJkaXIpL3NwZWNzOyBcDQor CSAgY2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvc3BlY3M7IFwN CiAJZmkNCiAjIEluc3RhbGwgcHJvdG9pemUgaWYgaXQgd2FzIGNvbXBpbGVk Lg0KIAktaWYgWyAtZiBwcm90b2l6ZSQoZXhlZXh0KSBdOyBcDQogCXRoZW4g XA0KIAkgICAgaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkgXSA7IHRoZW4g XA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoUFJPVE9JWkVfQ1JPU1NfTkFNRSkk KGV4ZWV4dCk7IFwNCi0JCSQoSU5TVEFMTF9QUk9HUkFNKSBwcm90b2l6ZSQo ZXhlZXh0KSAkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQoZXhl ZXh0KTsgXA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHVu cHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElSKSQoYmlu ZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCQkk KElOU1RBTExfUFJPR1JBTSkgcHJvdG9pemUkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBc DQorCQlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoVU5QUk9UT0laRV9D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0p IHVucHJvdG9pemUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKFVO UFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCiAJICAgIGVsc2Ug XA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXpl JChleGVleHQpICQoYmluZGlyKS8kKFBST1RPSVpFX0lOU1RBTExfTkFNRSkk KGV4ZWV4dCk7IFwNCi0JCXJtIC1mICQoYmluZGlyKS8kKFVOUFJPVE9JWkVf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dS QU0pIHVucHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoVU5QUk9UT0la RV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCQlybSAtZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXplJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0laRV9JTlNUQUxMX05BTUUp JChleGVleHQpOyBcDQorCQlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQo VU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCQkkKElO U1RBTExfUFJPR1JBTSkgdW5wcm90b2l6ZSQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpLyQoVU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQp OyBcDQogCSAgICBmaSA7IFwNCi0JICAgIHJtIC1mICQobGlic3ViZGlyKS9T WVNDQUxMUy5jLlg7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSBTWVNDQUxM Uy5jLlggJChsaWJzdWJkaXIpL1NZU0NBTExTLmMuWDsgXA0KLQkgICAgY2ht b2QgYS14ICQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwNCisJICAgIHJt IC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQor CSAgICAkKElOU1RBTExfREFUQSkgU1lTQ0FMTFMuYy5YICQoREVTVERJUikk KGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQorCSAgICBjaG1vZCBhLXgg JChERVNURElSKSQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwNCiAJZmkN CiAjIEluc3RhbGwgZ2NvdiBpZiBpdCB3YXMgY29tcGlsZWQuDQogCS1pZiBb IC1mIGdjb3YkKGV4ZWV4dCkgXTsgXA0KIAl0aGVuIFwNCi0JICAgIHJtIC1m ICQoYmluZGlyKS9nY292JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ2NvdiQoZXhlZXh0KSAkKGJpbmRpcikvJChHQ09WX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikk KGJpbmRpcikvZ2NvdiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGdjb3YkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKEdD T1ZfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KIAlmaQ0KLQkkKElOU1RB TExfU0NSSVBUKSBnY2NidWcgJChiaW5kaXIpLyQoR0NDQlVHX0lOU1RBTExf TkFNRSkNCisJJChJTlNUQUxMX1NDUklQVCkgZ2NjYnVnICQoREVTVERJUikk KGJpbmRpcikvJChHQ0NCVUdfSU5TVEFMTF9OQU1FKQ0KIA0KICMgSW5zdGFs bCB0aGUgZHJpdmVyIHByb2dyYW0gYXMgJCh0YXJnZXRfYWxpYXMpLWdjYywg DQogIyAkKHRhcmdldC1hbGlhcyktZ2NjLSQodmVyc2lvbikNCiAjIGFuZCBh bHNvIGFzIGVpdGhlciBnY2MgKGlmIG5hdGl2ZSkgb3IgJChnY2NfdG9vbGRp cikvYmluL2djYy4NCiBpbnN0YWxsLWRyaXZlcjogaW5zdGFsbGRpcnMgeGdj YyQoZXhlZXh0KQ0KIAktaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkgXSA7 IHRoZW4gXA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKEdDQ19DUk9TU19OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jv c3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQoR0NDX0NST1NTX05BTUUpJChleGVl eHQpOyBcDQotCSAgcm0gLWYgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n Y2MtJCh2ZXJzaW9uKTsgXA0KLQkgICQoTE4pICQoYmluZGlyKS8kKEdDQ19D Uk9TU19OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMp LWdjYy0kKHZlcnNpb24pIDsgXA0KLQkgIGlmIFsgLWQgJChnY2NfdG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChnY2NfdG9vbGRp cikvYmluL2djYyQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGdjYy1jcm9zcyQoZXhlZXh0KSAkKGdjY190b29sZGlyKS9iaW4vZ2Nj JChleGVleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8k KEdDQ19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnY2MtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS8kKEdDQ19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQo REVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNp b24pOyBcDQorCSAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJ ICAgICQoTE4pICQoR0NDX0NST1NTX05BTUUpJChleGVleHQpICQodGFyZ2V0 X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKSApOyBcDQorCSAgaWYgWyAtZCAkKERF U1RESVIpJChnY2NfdG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAg cm0gLWYgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jvc3MkKGV4 ZWV4dCkgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4 dCk7IFwNCiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWVsc2UgXA0KLQkgIHJt IC1mICQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQotCSAgJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkgJChiaW5k aXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICBybSAt ZiAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNpb24pOyBc DQotCSAgJChMTikgJChiaW5kaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtJCh2ZXJzaW9u KSA7IFwNCi0JICBybSAtZiAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdj Yy10bXAkKGV4ZWV4dCk7IFwNCi0JICAkKExOKSAkKGJpbmRpcikvJChHQ0Nf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWdjYy10bXAkKGV4ZWV4dCk7IFwNCi0JICBtdiAkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWdjYy10bXAkKGV4ZWV4dCkgJChiaW5kaXIpLyQoR0ND X1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgcm0gLWYg JChERVNURElSKSQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ2NjLSQodmVyc2lvbik7IFwNCisJICAoIGNkICQoREVTVERJ UikkKGJpbmRpcikgJiYgXA0KKwkgICAgJChMTikgJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLSQodmVyc2lvbikg KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWdjYy10bXAkKGV4ZWV4dCk7IFwNCisJICAoIGNkICQoREVTVERJ UikkKGJpbmRpcikgJiYgXA0KKwkgICAgJChMTikgJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLXRtcCQoZXhlZXh0 KSAmJiBcDQorCSAgICBtdiAtZiAkKHRhcmdldF9hbGlhcyktZ2NjLXRtcCQo ZXhlZXh0KSAkKEdDQ19UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAp OyBcDQogCWZpDQogDQogIyBJbnN0YWxsIHRoZSBpbmZvIGZpbGVzLg0KICMg JChJTlNUQUxMX0RBVEEpIG1pZ2h0IGJlIGEgcmVsYXRpdmUgcGF0aG5hbWUs IHNvIHdlIGNhbid0IGNkIGludG8gc3JjZGlyDQogIyB0byBkbyB0aGUgaW5z dGFsbC4NCiBpbnN0YWxsLWluZm86IGRvYyBpbnN0YWxsZGlycyBsYW5nLmlu c3RhbGwtaW5mbw0KLQktcm0gLWYgJChpbmZvZGlyKS9jcHAuaW5mbyogJChp bmZvZGlyKS9nY2MuaW5mbyoNCi0JLXJtIC1mICQoaW5mb2RpcikvY3BwaW50 ZXJuYWxzLmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQorCS1ybSAt ZiAkKERFU1RESVIpJChpbmZvZGlyKS9jcHAuaW5mbyogJChERVNURElSKSQo aW5mb2RpcikvZ2NjLmluZm8qDQorCS1ybSAtZiAkKERFU1RESVIpJChpbmZv ZGlyKS9jcHBpbnRlcm5hbHMuaW5mbyogJChERVNURElSKSQoaW5mb2Rpcikv Z2NjaW50LmluZm8qDQogCWlmIFsgLWYgJChkb2NkaXIpL2djYy5pbmZvIF07 IHRoZW4gXA0KIAkgIGZvciBmIGluICQoZG9jZGlyKS9jcHAuaW5mbyogJChk b2NkaXIpL2djYy5pbmZvKiBcDQogCQkkKGRvY2RpcikvY3BwaW50ZXJuYWxz LmluZm8qICQoZG9jZGlyKS9nY2NpbnQuaW5mbyo7IGRvIFwNCiAJICAgIHJl YWxmaWxlPWBlY2hvICQkZiB8IHNlZCAtZSAnc3wuKi9cKFteL10qXCkkJHxc MXwnYDsgXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIp LyQkcmVhbGZpbGU7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChE RVNURElSKSQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0KIAkgIGRvbmU7IFwN CiAJZWxzZSB0cnVlOyBmaQ0KIAktaWYgJChTSEVMTCkgLWMgJ2luc3RhbGwt aW5mbyAtLXZlcnNpb24nID4vZGV2L251bGwgMj4mMTsgdGhlbiBcDQotCSAg aWYgWyAtZiAkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBcDQorCSAgaWYgWyAt ZiAkKERFU1RESVIpJChpbmZvZGlyKS9kaXIgXSA7IHRoZW4gXA0KIAkgICAg Zm9yIGYgaW4gY3BwLmluZm8gZ2NjLmluZm8gZ2NjaW50LmluZm8gY3BwaW50 ZXJuYWxzLmluZm87IGRvIFwNCi0JCWlmIFsgLWYgJChpbmZvZGlyKS8kJGYg XTsgdGhlbiBcDQotCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5m b2RpcikvZGlyICQoaW5mb2RpcikvJCRmOyBcDQorCQlpZiBbIC1mICQoREVT VERJUikkKGluZm9kaXIpLyQkZiBdOyB0aGVuIFwNCisJCSAgaW5zdGFsbC1p bmZvIC0tZGlyLWZpbGU9JChERVNURElSKSQoaW5mb2RpcikvZGlyICQoREVT VERJUikkKGluZm9kaXIpLyQkZjsgXA0KIAkJZWxzZSB0cnVlOyBmaTsgXA0K IAkgICAgZG9uZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0 cnVlOyBmaTsNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2NwcC5pbmZvKiAk KGluZm9kaXIpL2djYy5pbmZvKg0KLQktY2htb2QgYS14ICQoaW5mb2Rpcikv Y3BwaW50ZXJuYWxzLmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQor CS1jaG1vZCBhLXggJChERVNURElSKSQoaW5mb2RpcikvY3BwLmluZm8qICQo REVTVERJUikkKGluZm9kaXIpL2djYy5pbmZvKg0KKwktY2htb2QgYS14ICQo REVTVERJUikkKGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKERFU1RE SVIpJChpbmZvZGlyKS9nY2NpbnQuaW5mbyoNCiANCiAjIEluc3RhbGwgdGhl IG1hbiBwYWdlcy4NCiBpbnN0YWxsLW1hbjogaW5zdGFsbGRpcnMgJChHRU5F UkFURURfTUFOUEFHRVMpIGxhbmcuaW5zdGFsbC1tYW4NCiAJLWlmIFsgLWYg Z2NjLWNyb3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKG1h bjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICQo SU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2NjLjEgJChtYW4xZGlyKS8kKEdD Q19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICBjaG1vZCBhLXggJCht YW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJICBy bSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQo bWFuMWV4dCk7IFwNCisJICAkKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dj Yy4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJCht YW4xZXh0KTsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGly KS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJZWxzZSBcDQot CSAgcm0gLWYgJChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4x ZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2NjLjEg JChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0K LQkgIGNobW9kIGEteCAkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv JChHQ0NfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAkKElOU1RB TExfREFUQSkgJChkb2NkaXIpL2djYy4xICQoREVTVERJUikkKG1hbjFkaXIp LyQoR0NDX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgY2htb2Qg YS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQogCWZpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2NwcCQo bWFuMWV4dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvY3BwLjEg JChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4x ZGlyKS9jcHAkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2djb3Yk KG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2djb3Yu MSAkKG1hbjFkaXIpL2djb3YkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJCht YW4xZGlyKS9nY292JChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9m c2YtZnVuZGluZyQobWFuN2V4dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKGRv Y2RpcikvZnNmLWZ1bmRpbmcuNyAkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJCht YW43ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuN2RpcikvZnNmLWZ1bmRpbmck KG1hbjdleHQpDQotCS1ybSAtZiAkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQp DQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dmZGwuNyAkKG1hbjdk aXIpL2dmZGwkKG1hbjdleHQpDQotCS1jaG1vZCBhLXggJChtYW43ZGlyKS9n ZmRsJChtYW43ZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9ncGwkKG1hbjdl eHQpDQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dwbC43ICQobWFu N2RpcikvZ3BsJChtYW43ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuN2Rpcikv Z3BsJChtYW43ZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv Y3BwJChtYW4xZXh0KQ0KKwktJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9j cHAuMSAkKERFU1RESVIpJChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQorCS1j aG1vZCBhLXggJChERVNURElSKSQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0K Kwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkN CisJLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2Nvdi4xICQoREVTVERJ UikkKG1hbjFkaXIpL2djb3YkKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChE RVNURElSKSQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkNCisJLXJtIC1mICQo REVTVERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KKwkt JChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9mc2YtZnVuZGluZy43ICQoREVT VERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KKwktY2ht b2QgYS14ICQoREVTVERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43 ZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuN2RpcikvZ2ZkbCQobWFu N2V4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2ZkbC43ICQo REVTVERJUikkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQpDQorCS1jaG1vZCBh LXggJChERVNURElSKSQobWFuN2RpcikvZ2ZkbCQobWFuN2V4dCkNCisJLXJt IC1mICQoREVTVERJUikkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCisJLSQo SU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ3BsLjcgJChERVNURElSKSQobWFu N2RpcikvZ3BsJChtYW43ZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikk KG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCiANCiAjIEluc3RhbGwgdGhlIGxp YnJhcnkuDQogaW5zdGFsbC1saWJnY2M6IGxpYmdjYy5tayBsaWJnY2MuYSBp bnN0YWxsZGlycw0KQEAgLTMwMDEsMjMgKzI5OTIsMjMgQEANCiAjIEZpeCBz eW1saW5rcyB0byBhYnNvbHV0ZSBwYXRocyBpbiB0aGUgaW5zdGFsbGVkIGlu Y2x1ZGUgZGlyZWN0b3J5IHRvDQogIyBwb2ludCB0byB0aGUgaW5zdGFsbGVk IGRpcmVjdG9yeSwgbm90IHRoZSBidWlsZCBkaXJlY3RvcnkuDQogIyBEb24n dCBuZWVkIHRvIHVzZSBMTl9TIGhlcmUgc2luY2Ugd2UgcmVhbGx5IGRvIG5l ZWQgbG4gLXMgYW5kIG5vIHN1YnN0aXR1dGVzLg0KLQktZmlsZXM9YGNkICQo bGlic3ViZGlyKS9pbmNsdWRlOyBmaW5kIC4gLXR5cGUgbCAtcHJpbnQgMj4v ZGV2L251bGxgOyBcDQorCS1maWxlcz1gY2QgJChERVNURElSKSQobGlic3Vi ZGlyKS9pbmNsdWRlOyBmaW5kIC4gLXR5cGUgbCAtcHJpbnQgMj4vZGV2L251 bGxgOyBcDQogCWlmIFsgJCQ/IC1lcSAwIF07IHRoZW4gXA0KIAkgIGRpcj1g Y2QgaW5jbHVkZTsgJHtQV0R9YDsgXA0KIAkgIGZvciBpIGluICQkZmlsZXM7 IGRvIFwNCi0JICAgIGRlc3Q9YGxzIC1sZCAkKGxpYnN1YmRpcikvaW5jbHVk ZS8kJGkgfCBzZWQgLW4gJ3MvLiotPiAvL3AnYDsgXA0KKwkgICAgZGVzdD1g bHMgLWxkICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGkgfCBz ZWQgLW4gJ3MvLiotPiAvL3AnYDsgXA0KIAkgICAgaWYgZXhwciAiJCRkZXN0 IiA6ICIkJGRpci4qIiA+IC9kZXYvbnVsbDsgdGhlbiBcDQotCSAgICAgIHJt IC1mICQobGlic3ViZGlyKS9pbmNsdWRlLyQkaTsgXA0KLQkgICAgICBsbiAt cyBgZWNobyAkJGkgfCBzZWQgInN8L1teL10qfC8uLnxnIiB8IHNlZCAnc3wv Li4kJHx8J2BgZWNobyAiJCRkZXN0IiB8IHNlZCAic3wkJGRpcnx8ImAgJChs aWJzdWJkaXIpL2luY2x1ZGUvJCRpOyBcDQorCSAgICAgIHJtIC1mICQoREVT VERJUikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCisJICAgICAgbG4g LXMgYGVjaG8gJCRpIHwgc2VkICJzfC9bXi9dKnwvLi58ZyIgfCBzZWQgJ3N8 Ly4uJCR8fCdgYGVjaG8gIiQkZGVzdCIgfCBzZWQgInN8JCRkaXJ8fCJgICQo REVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCiAJICAgIGZp OyBcDQogCSAgZG9uZTsgXA0KIAlmaQ0KIA0KICMgQ3JlYXRlIG9yIHJlY3Jl YXRlIHRoZSBnY2MgcHJpdmF0ZSBpbmNsdWRlIGZpbGUgZGlyZWN0b3J5Lg0K IGluc3RhbGwtaW5jbHVkZS1kaXI6IGluc3RhbGxkaXJzDQotCS1ybSAtcmYg JChsaWJzdWJkaXIpL2luY2x1ZGUNCi0JbWtkaXIgJChsaWJzdWJkaXIpL2lu Y2x1ZGUNCi0JLWNobW9kIGErcnggJChsaWJzdWJkaXIpL2luY2x1ZGUNCisJ LXJtIC1yZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUNCisJbWtk aXIgJChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlDQorCS1jaG1vZCBh K3J4ICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZQ0KIA0KICMgSW5z dGFsbCB0aGUgaW5jbHVkZSBkaXJlY3RvcnkgdXNpbmcgdGFyLg0KIGluc3Rh bGwtaGVhZGVycy10YXI6IHN0bXAtaW50LWhkcnMgJChTVE1QX0ZJWFBST1RP KSBpbnN0YWxsLWluY2x1ZGUtZGlyDQpAQCAtMzAyNiw3ICszMDE3LDcgQEAN CiAjIGZvdW5kIGluIENEUEFUSCwgY29ycnVwdGluZyB0aGUgb3V0cHV0LiAg V2UgY291bGQganVzdCByZWRpcmVjdCB0aGUNCiAjIG91dHB1dCBvZiBgY2Qn LCBidXQgc29tZSBzaGVsbHMgbG9zZSBvbiByZWRpcmVjdGlvbiB3aXRoaW4g YCgpJ3MNCiAJKGNkIGAke1BXRH1gL2luY2x1ZGUgOyBcDQotCSB0YXIgLWNm IC0gLjsgZXhpdCAwKSB8IChjZCAkKGxpYnN1YmRpcikvaW5jbHVkZTsgdGFy IHhwZiAtICkNCisJIHRhciAtY2YgLSAuOyBleGl0IDApIHwgKGNkICQoREVT VERJUikkKGxpYnN1YmRpcikvaW5jbHVkZTsgdGFyIHhwZiAtICkNCiAjIC9i aW4vc2ggb24gc29tZSBzeXN0ZW1zIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0 aGUgZmlyc3QgdGFyLA0KICMgYW5kIHRoYXQgY2FuIGxvc2Ugd2l0aCBHTlUg dGFyIHdoaWNoIGFsd2F5cyB3cml0ZXMgYSBmdWxsIGJsb2NrLg0KICMgU28g dXNlIGBleGl0IDAnIHRvIGlnbm9yZSBpdHMgZXhpdCBzdGF0dXMuDQpAQCAt MzAzNSw3OCArMzAyNiw3OCBAQA0KIGluc3RhbGwtaGVhZGVycy1jcGlvOiBz dG1wLWludC1oZHJzICQoU1RNUF9GSVhQUk9UTykgaW5zdGFsbC1pbmNsdWRl LWRpcg0KICMgU2VlIGRpc2N1c3Npb24gYWJvdXQgdGhlIHVzZSBvZiBgcHdk YCBhYm92ZQ0KIAljZCBgJHtQV0R9YC9pbmNsdWRlIDsgXA0KLQlmaW5kIC4g LXByaW50IHwgY3BpbyAtcGR1bSAkKGxpYnN1YmRpcikvaW5jbHVkZQ0KKwlm aW5kIC4gLXByaW50IHwgY3BpbyAtcGR1bSAkKERFU1RESVIpJChsaWJzdWJk aXIpL2luY2x1ZGUNCiANCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZGlyZWN0 b3J5IHVzaW5nIGNwLg0KIGluc3RhbGwtaGVhZGVycy1jcDogc3RtcC1pbnQt aGRycyAkKFNUTVBfRklYUFJPVE8pIGluc3RhbGwtaW5jbHVkZS1kaXINCi0J Y3AgLXAgLXIgaW5jbHVkZSAkKGxpYnN1YmRpcikNCisJY3AgLXAgLXIgaW5j bHVkZSAkKERFU1RESVIpJChsaWJzdWJkaXIpDQogDQogaXRvb2xzZGlyID0g JChsaWJzdWJkaXIpL2luc3RhbGwtdG9vbHMNCiAjIERvbid0IGluc3RhbGwg dGhlIGhlYWRlcnMuICBJbnN0ZWFkLCBpbnN0YWxsIGFwcHJvcHJpYXRlIHNj cmlwdHMNCiAjIGFuZCBzdXBwb3J0aW5nIGZpbGVzIGZvciBmaXhpbmNsdWRl cyB0byBiZSBydW4gbGF0ZXIuDQogaW5zdGFsbC1ta2hlYWRlcnM6IHN0bXAt aW50LWhkcnMgJChTVE1QX0ZJWFBST1RPKSBpbnN0YWxsLWluY2x1ZGUtZGly IFwNCiAgICAgbWtoZWFkZXJzIHhsaW1pdHMuaA0KLQktcm0gLXJmICQoaXRv b2xzZGlyKQ0KLQkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAk KGl0b29sc2RpcikvaW5jbHVkZQ0KKwktcm0gLXJmICQoREVTVERJUikkKGl0 b29sc2RpcikNCisJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMg JChERVNURElSKSQoaXRvb2xzZGlyKS9pbmNsdWRlDQogCWZvciBmaWxlIGlu ICQoVVNFUl9IKTsgZG8gXA0KIAkgIHJlYWxmaWxlPWBlY2hvICQkZmlsZSB8 IHNlZCAtZSAnc3wuKi9cKFteL10qXCkkJHxcMXwnYDsgXA0KIAkgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgXA0KLQkgICAgJChpdG9vbHNkaXIpL2luY2x1 ZGUvJCRyZWFsZmlsZSA7IFwNCisJICAgICQoREVTVERJUikkKGl0b29sc2Rp cikvaW5jbHVkZS8kJHJlYWxmaWxlIDsgXA0KIAlkb25lDQotCSQoSU5TVEFM TF9EQVRBKSB4bGltaXRzLmggJChpdG9vbHNkaXIpL2luY2x1ZGUvbGltaXRz LmgNCisJJChJTlNUQUxMX0RBVEEpIHhsaW1pdHMuaCAkKERFU1RESVIpJChp dG9vbHNkaXIpL2luY2x1ZGUvbGltaXRzLmgNCiAJaWYgWyB4JChTVE1QX0ZJ WElOQykgIT0geCBdIDsgdGhlbiBcDQogCSAgJChJTlNUQUxMX0RBVEEpICQo c3JjZGlyKS9SRUFETUUtZml4aW5jIFwNCi0JICAgICQoaXRvb2xzZGlyKS9p bmNsdWRlL1JFQURNRSA7IFwNCi0JICAkKElOU1RBTExfUFJPR1JBTSkgZml4 aW5jLnNoICQoaXRvb2xzZGlyKS9maXhpbmMuc2ggOyBcDQotCSAgJChJTlNU QUxMX1BST0dSQU0pIGZpeGluYy9maXhpbmNsICQoaXRvb2xzZGlyKS9maXhp bmNsIDsgXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ3N5c2xp bWl0cy5oICQoaXRvb2xzZGlyKS9nc3lzbGltaXRzLmggOyBcDQorCSAgICAk KERFU1RESVIpJChpdG9vbHNkaXIpL2luY2x1ZGUvUkVBRE1FIDsgXA0KKwkg ICQoSU5TVEFMTF9QUk9HUkFNKSBmaXhpbmMuc2ggJChERVNURElSKSQoaXRv b2xzZGlyKS9maXhpbmMuc2ggOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0p IGZpeGluYy9maXhpbmNsICQoREVTVERJUikkKGl0b29sc2RpcikvZml4aW5j bCA7IFwNCisJICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dzeXNsaW1p dHMuaCAkKERFU1RESVIpJChpdG9vbHNkaXIpL2dzeXNsaW1pdHMuaCA7IFwN CiAJZWxzZSA6OyBmaQ0KIAlpZiBbIHgkKFNUTVBfRklYUFJPVE8pICE9IHgg XSA7IHRoZW4gXA0KIAkgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2Rpcikv bWtpbnN0YWxsZGlycyBcDQotCQkkKGl0b29sc2RpcikvbWtpbnN0YWxsZGly cyA7IFwNCi0JICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL2ZpeHBy b3RvICQoaXRvb2xzZGlyKS9maXhwcm90byA7IFwNCisJCSQoREVTVERJUikk KGl0b29sc2RpcikvbWtpbnN0YWxsZGlycyA7IFwNCisJICAkKElOU1RBTExf UFJPR1JBTSkgJChzcmNkaXIpL2ZpeHByb3RvICQoREVTVERJUikkKGl0b29s c2RpcikvZml4cHJvdG8gOyBcDQogCSAgJChJTlNUQUxMX1BST0dSQU0pIGZp eC1oZWFkZXIkKGJ1aWxkX2V4ZWV4dCkgXA0KLQkJJChpdG9vbHNkaXIpL2Zp eC1oZWFkZXIkKGJ1aWxkX2V4ZWV4dCkgOyBcDQorCQkkKERFU1RESVIpJChp dG9vbHNkaXIpL2ZpeC1oZWFkZXIkKGJ1aWxkX2V4ZWV4dCkgOyBcDQogCWVs c2UgOjsgZmkNCi0JJChJTlNUQUxMX1BST0dSQU0pIG1raGVhZGVycyAkKGl0 b29sc2RpcikvbWtoZWFkZXJzDQorCSQoSU5TVEFMTF9QUk9HUkFNKSBta2hl YWRlcnMgJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMNCiAJZWNo byAnU1lTVEVNX0hFQURFUl9ESVI9IiciJChTWVNURU1fSEVBREVSX0RJUiki JyInIFwNCi0JCT4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQorCQk+ ICQoREVTVERJUikkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCiAJZWNo byAnT1RIRVJfRklYSU5DTFVERVNfRElSUz0iJChPVEhFUl9GSVhJTkNMVURF U19ESVJTKSInIFwNCi0JCT4+ICQoaXRvb2xzZGlyKS9ta2hlYWRlcnMuY29u Zg0KKwkJPj4gJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMuY29u Zg0KIAllY2hvICdGSVhQUk9UT19ERUZJTkVTPSIkKEZJWFBST1RPX0RFRklO RVMpIicgXA0KLQkJPj4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQot CWVjaG8gJ1NUTVBfRklYUFJPVE89IiQoU1RNUF9GSVhQUk9UTykiJyA+PiAk KGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCi0JZWNobyAnU1RNUF9GSVhJ TkM9IiQoU1RNUF9GSVhJTkMpIicgPj4gJChpdG9vbHNkaXIpL21raGVhZGVy cy5jb25mDQorCQk+PiAkKERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVy cy5jb25mDQorCWVjaG8gJ1NUTVBfRklYUFJPVE89IiQoU1RNUF9GSVhQUk9U TykiJyA+PiAkKERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25m DQorCWVjaG8gJ1NUTVBfRklYSU5DPSIkKFNUTVBfRklYSU5DKSInID4+ICQo REVTVERJUikkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCiANCiAjIFVz ZSB0aGlzIHRhcmdldCB0byBpbnN0YWxsIHRoZSBwcm9ncmFtIGBjb2xsZWN0 MicgdW5kZXIgdGhlIG5hbWUgYGNvbGxlY3QyJy4NCiBpbnN0YWxsLWNvbGxl Y3QyOiBjb2xsZWN0MiBpbnN0YWxsZGlycw0KLQkkKElOU1RBTExfUFJPR1JB TSkgY29sbGVjdDIkKGV4ZWV4dCkgJChsaWJzdWJkaXIpL2NvbGxlY3QyJChl eGVleHQpDQorCSQoSU5TVEFMTF9QUk9HUkFNKSBjb2xsZWN0MiQoZXhlZXh0 KSAkKERFU1RESVIpJChsaWJzdWJkaXIpL2NvbGxlY3QyJChleGVleHQpDQog IyBJbnN0YWxsIHRoZSBkcml2ZXIgcHJvZ3JhbSBhcyAkKGxpYnN1YmRpcikv Z2NjIGZvciBjb2xsZWN0Mi4NCi0JJChJTlNUQUxMX1BST0dSQU0pIHhnY2Mk KGV4ZWV4dCkgJChsaWJzdWJkaXIpL2djYyQoZXhlZXh0KQ0KKwkkKElOU1RB TExfUFJPR1JBTSkgeGdjYyQoZXhlZXh0KSAkKERFU1RESVIpJChsaWJzdWJk aXIpL2djYyQoZXhlZXh0KQ0KIA0KICMgQ2FuY2VsIGluc3RhbGxhdGlvbiBi eSBkZWxldGluZyB0aGUgaW5zdGFsbGVkIGZpbGVzLg0KIHVuaW5zdGFsbDog aW50bC51bmluc3RhbGwgbGFuZy51bmluc3RhbGwNCi0JLXJtIC1yZiAkKGxp YnN1YmRpcikNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKEdDQ19DUk9T U19OQU1FKSQoZXhlZXh0KQ0KLQktcm0gLWYgJChiaW5kaXIpLyQoQ1BQX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1mICQoYmluZGlyKS8kKENQ UF9DUk9TU19OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikk KGxpYnN1YmRpcikNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQo R0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoR0NDX0NST1NTX05BTUUpJChleGVleHQpDQorCS1y bSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkk KGV4ZWV4dCkNCisJLXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChDUFBf Q1JPU1NfTkFNRSkkKGV4ZWV4dCkNCiAJLWlmIFsgeCQoY3BwX2luc3RhbGxf ZGlyKSAhPSB4IF07IHRoZW4gXA0KLQkgIHJtIC1mICQocHJlZml4KS8kKGNw cF9pbnN0YWxsX2RpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsg XA0KLQkgIHJtIC1mICQocHJlZml4KS8kKGNwcF9pbnN0YWxsX2RpcikvJChD UFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAtZiAkKERFU1RE SVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQocHJl Zml4KS8kKGNwcF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4 ZWV4dCk7IFwNCiAJZWxzZSB0cnVlOyBmaQ0KLQktcm0gLXJmICQoYmluZGly KS8kKFBST1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1y ZiAkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQoZXhlZXh0KQ0K LQktcm0gLXJmICQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKFVOUFJPVE9JWkVf Q1JPU1NfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChH Q09WX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFk aXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQotCS1ybSAtcmYg JChtYW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCkNCi0JLXJt IC1yZiAkKG1hbjFkaXIpL2NwcCQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1h bjFkaXIpL3Byb3RvaXplJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRp cikvdW5wcm90b2l6ZSQobWFuMWV4dCkNCi0JLXJtIC1mICQoaW5mb2Rpcikv Y3BwLmluZm8qICQoaW5mb2RpcikvZ2NjLmluZm8qDQotCS1ybSAtZiAkKGlu Zm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKGluZm9kaXIpL2djY2ludC5p bmZvKg0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0la RV9JTlNUQUxMX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElS KSQoYmluZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpDQor CS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJp bmRpcikvJChVTlBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpDQorCS1y bSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEdDT1ZfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQo R0NDX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNU RElSKSQobWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFleHQpDQor CS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0K Kwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL3Byb3RvaXplJChtYW4x ZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL3VucHJvdG9p emUkKG1hbjFleHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChpbmZvZGlyKS9j cHAuaW5mbyogJChERVNURElSKSQoaW5mb2RpcikvZ2NjLmluZm8qDQorCS1y bSAtZiAkKERFU1RESVIpJChpbmZvZGlyKS9jcHBpbnRlcm5hbHMuaW5mbyog JChERVNURElSKSQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQogIwwNCiAjIFRo ZXNlIHRhcmdldHMgYXJlIGZvciB0aGUgZGVqYWdudSB0ZXN0c3VpdGVzLiBU aGUgZmlsZSBzaXRlLmV4cA0KICMgY29udGFpbnMgZ2xvYmFsIHZhcmlhYmxl cyB0aGF0IGFsbCB0aGUgdGVzdHN1aXRlcyB3aWxsIHVzZS4NCkluZGV4OiBn Y2MvbWtsaWJnY2MuaW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm aWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL21rbGli Z2NjLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40OQ0KZGlmZiAtdSAt cjEuNDkgbWtsaWJnY2MuaW4NCi0tLSBnY2MvbWtsaWJnY2MuaW4JMTYgRGVj IDIwMDIgMTg6MTk6NDQgLTAwMDAJMS40OQ0KKysrIGdjYy9ta2xpYmdjYy5p bgkxIEphbiAyMDAzIDE3OjI3OjE0IC0wMDAwDQpAQCAtMTksNiArMTksNyBA QA0KICMgRlBCSVQNCiAjIEZQQklUX0ZVTkNTDQogIyBMSUIyX0RJVk1PRF9G VU5DUw0KKyMgREVTVERJUg0KICMgRFBCSVQNCiAjIERQQklUX0ZVTkNTDQog IyBMSUJHQ0MNCkBAIC00MzYsMTAgKzQzNywxMCBAQA0KICAgZGlyPWBlY2hv ICR7bWx9IHwgc2VkIC1lICdzLzsuKiQvLycgLWUgJ3MvPS8kKEVRKS9nJ2AN CiAgIGZsYWdzPWBlY2hvICR7bWx9IHwgc2VkIC1lICdzL15bXjtdKjsvLycg LWUgJ3MvQC8gLS9nJ2A7DQogICBpZiBbICRkaXIgIT0gLiBdOyB0aGVuDQot ICAgIGxkaXI9JyQobGlic3ViZGlyKScvJGRpcg0KKyAgICBsZGlyPSckKERF U1RESVIpJChsaWJzdWJkaXIpJy8kZGlyDQogICAgIGVjaG8gIglpZiBbIC1k ICRsZGlyIF07IHRoZW4gdHJ1ZTsgZWxzZSBta2RpciAkbGRpcjsgY2htb2Qg YStyeCAkbGRpcjsgZmk7Ig0KICAgZWxzZQ0KLSAgICBsZGlyPSckKGxpYnN1 YmRpciknDQorICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknDQog ICBmaQ0KICAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdj Yy5hICR7bGRpcn0vDQogICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCkn ICR7bGRpcn0vbGliZ2NjLmENCkBAIC00OTUsMTAgKzQ5NiwxMCBAQA0KICAg ICBkaXI9YGVjaG8gJHttbH0gfCBzZWQgLWUgJ3MvOy4qJC8vJyAtZSAncy89 LyQoRVEpL2cnYA0KICAgICBpZiBbICRkaXIgIT0gLiBdOyB0aGVuDQogICAg ICAgb3V0PSR7ZGlyfS8kZg0KLSAgICAgIGxkaXI9JyQobGlic3ViZGlyKScv JGRpcg0KKyAgICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknLyRk aXINCiAgICAgZWxzZQ0KICAgICAgIG91dD0kZg0KLSAgICAgIGxkaXI9JyQo bGlic3ViZGlyKScNCisgICAgICBsZGlyPSckKERFU1RESVIpJChsaWJzdWJk aXIpJw0KICAgICBmaQ0KICAgICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAk b3V0ICRsZGlyLw0KICAgZG9uZQ0KSW5kZXg6IGdjYy9hZGEvTWFrZS1sYW5n LmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9s b2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9hZGEvTWFrZS1sYW5nLmlu LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMA0KZGlmZiAtdSAtcjEuMjAg TWFrZS1sYW5nLmluDQotLS0gZ2NjL2FkYS9NYWtlLWxhbmcuaW4JMjMgRGVj IDIwMDIgMTk6MjY6NDYgLTAwMDAJMS4yMA0KKysrIGdjYy9hZGEvTWFrZS1s YW5nLmluCTEgSmFuIDIwMDMgMTc6Mjc6MzIgLTAwMDANCkBAIC0zOTQsMzAg KzM5NCwzMCBAQA0KIAkkKHNyY2RpcikvYWRhL2duYXRfcm0uaW5mbyAkKHNy Y2RpcikvYWRhL2duYXQtc3R5bGUuaW5mbw0KIA0KIGFkYS5pbnN0YWxsLWlu Zm86DQotCS1ybSAtZiAkKGluZm9kaXIpL2duYXRfdWdfKi5pbmZvKg0KLQkt cm0gLWYgJChpbmZvZGlyKS9nbmF0X3JtLmluZm8qIA0KLQktcm0gLWYgJChp bmZvZGlyKS9nbmF0LXN0eWxlLmluZm8qIA0KKwktcm0gLWYgJChERVNURElS KSQoaW5mb2RpcikvZ25hdF91Z18qLmluZm8qDQorCS1ybSAtZiAkKERFU1RE SVIpJChpbmZvZGlyKS9nbmF0X3JtLmluZm8qIA0KKwktcm0gLWYgJChERVNU RElSKSQoaW5mb2RpcikvZ25hdC1zdHlsZS5pbmZvKiANCiAJaWYgWyAtZiAk KHNyY2RpcikvYWRhL2duYXRfdWdfdW54LmluZm8gXTsgdGhlbiBcDQogCSAg Zm9yIGYgaW4gJChzcmNkaXIpL2FkYS9nbmF0X3VnXyouaW5mbyogXA0KIAkJ JChzcmNkaXIpL2FkYS9nbmF0X3JtLmluZm8qIFwNCiAJCSQoc3JjZGlyKS9h ZGEvZ25hdC1zdHlsZS5pbmZvKjsgZG8gXA0KIAkgICAgcmVhbGZpbGU9YGVj aG8gJCRmIHwgc2VkIC1lICdzfC4qL1woW14vXSpcKSQkfFwxfCdgOyBcDQot CSAgICAkKElOU1RBTExfREFUQSkgJCRmICQoaW5mb2RpcikvJCRyZWFsZmls ZTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChp bmZvZGlyKS8kJHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KIAllbHNlIHRy dWU7IGZpDQogCS1pZiAkKFNIRUxMKSAtYyAnaW5zdGFsbC1pbmZvIC0tdmVy c2lvbicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwNCi0JICBpZiBbIC1mICQo aW5mb2RpcikvZGlyIF0gOyB0aGVuIFwNCisJICBpZiBbIC1mICQoREVTVERJ UikkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBcDQogCSAgICBmb3IgZiBpbiBn bmF0X3VnX3Ztcy5pbmZvIGduYXRfdWdfd250LmluZm8gZ25hdF91Z191bngu aW5mbyBcDQogCQlnbmF0X3VnX3Z4dy5pbmZvIGduYXRfcm0uaW5mbyBnbmF0 LXN0eWxlLmluZm87IGRvIFwNCi0JCWlmIFsgLWYgJChpbmZvZGlyKS8kJGYg XTsgdGhlbiBcDQotCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5m b2RpcikvZGlyICQoaW5mb2RpcikvJCRmOyBcDQorCQlpZiBbIC1mICQoREVT VERJUikkKGluZm9kaXIpLyQkZiBdOyB0aGVuIFwNCisJCSAgaW5zdGFsbC1p bmZvIC0tZGlyLWZpbGU9JChERVNURElSKSQoaW5mb2RpcikvZGlyICQoREVT VERJUikkKGluZm9kaXIpLyQkZjsgXA0KIAkJZWxzZSB0cnVlOyBmaTsgXA0K IAkgICAgZG9uZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0 cnVlOyBmaTsNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2duYXRfdWdfdm1z LmluZm8qICQoaW5mb2RpcikvZ25hdF91Z193bnQuaW5mbyoNCi0JLWNobW9k IGEteCAkKGluZm9kaXIpL2duYXRfdWdfdW54LmluZm8qICQoaW5mb2Rpcikv Z25hdF91Z192eHcuaW5mbyoNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2du YXRfcm0uaW5mbyogJChpbmZvZGlyKS9nbmF0LXN0eWxlLmluZm8qDQorCS1j aG1vZCBhLXggJChERVNURElSKSQoaW5mb2RpcikvZ25hdF91Z192bXMuaW5m byogJChERVNURElSKSQoaW5mb2RpcikvZ25hdF91Z193bnQuaW5mbyoNCisJ LWNobW9kIGEteCAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3VueC5p bmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3Z4dy5pbmZvKg0K KwktY2htb2QgYS14ICQoREVTVERJUikkKGluZm9kaXIpL2duYXRfcm0uaW5m byogJChERVNURElSKSQoaW5mb2RpcikvZ25hdC1zdHlsZS5pbmZvKg0KIA0K IGFkYS9nbmF0X3VnX3VueC5kdmkgOiAkKHNyY2RpcikvYWRhL2duYXRfdWdf dW54LnRleGkgXA0KIAkkKHNyY2RpcikvZG9jL2luY2x1ZGUvZmRsLnRleGkg JChzcmNkaXIpL2RvYy9pbmNsdWRlL2djYy1jb21tb24udGV4aQ0KQEAgLTQ2 OSwyMTcgKzQ2OSwyMTcgQEANCiAJIHRoZW4gXA0KIAkgIGlmIFsgLWYgZ25h dGJpbmQtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAg ICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJpbmQkKGV4 ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmluZC1j cm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRi aW5kJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmlu Ly4gXSA7IHRoZW4gXA0KLQkgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9n bmF0YmluZCQoZXhlZXh0KTsgXA0KLQkgICAgICAkKElOU1RBTExfUFJPR1JB TSkgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25h dGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRiaW5kJChleGVleHQpOyBcDQor CSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4 dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJp bmQkKGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9v bGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICBybSAtZiAkKERFU1RE SVIpJCh0b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRiaW5kLWNyb3NzJChleGVleHQp ICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0YmluZCQoZXhlZXh0KTsg XA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJN KSAkKGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0YmluZCQoZXhlZXh0KSAkKGJpbmRpcikvZ25h dGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJp bmRpcikvZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0YmluZCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIp L2duYXRiaW5kJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1p ZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlm IFsgLWYgZ25hdGJsLWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBc DQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRi bCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRi bC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXRibCQoZXhlZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jp bi8uIF0gOyB0aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmlu L2duYXRibCQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0 YmwkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0KTsgXA0KKwkgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0YmwkKGV4ZWV4 dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmlu Ly4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQodG9v bGRpcikvYmluL2duYXRibCQoZXhlZXh0KTsgXA0KKwkgICAgICAgJChJTlNU QUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIp JCh0b29sZGlyKS9iaW4vZ25hdGJsJChleGVleHQpOyBcDQogICAgICAgICAg ICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9n bmF0YmwkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0YmwkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRibCQoZXhlZXh0KTsgXA0K KwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwkKGV4ZWV4 dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCk7IFwNCiAJ ICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7 IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0Y2hvcC1jcm9zcyQoc2hl eHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChzaGV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4 dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoc2hleHQp OyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4g XA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKHNo ZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRjaG9w JChzaGV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwN CisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRjaG9wJChzaGV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKHNoZXh0KTsg XA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBd IDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGly KS9iaW4vZ25hdGNob3AkKHNoZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQodG9vbGRp cikvYmluL2duYXRjaG9wJChleGVleHQpOyBcDQogICAgICAgICAgICAgZmk7 IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0Y2hv cCQoc2hleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNk aXIpL2FkYS9nbmF0Y2hvcCQoc2hleHQpICQoYmluZGlyKS9nbmF0Y2hvcCQo c2hleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRjaG9wJChzaGV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAk KHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0Y2hvcCQoc2hleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQog CS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkg IGlmIFsgLWYgZ25hdGNob3AtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0 aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdGNob3AkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRjaG9wJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQo dG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0 b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKHRv b2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3Ak KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hv cC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAg ICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4 ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hv cC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25h dGNob3AkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVs c2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4 dCkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKFJN KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQor CSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KIAkgIGZp IDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0K IAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXQtY3Jvc3MkKGV4ZWV4dCkgXSA7 IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0JChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9v bGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29s ZGlyKS9iaW4vZ25hdCQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4v Z25hdCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsg XA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBd IDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGly KS9iaW4vZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRp cikvYmluL2duYXQkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0K IAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXQkKGV4ZWV4 dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0JChleGVleHQp ICQoYmluZGlyKS9nbmF0JChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERF U1RESVIpJChiaW5kaXIpL2duYXQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0JChleGVleHQpICQoREVTVERJUikkKGJpbmRp cikvZ25hdCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYg WyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBb IC1mIGduYXRrci1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0K LQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0a3Ik KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0a3It Y3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 a3IkKGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJCh0b29sZGlyKS9iaW4v LiBdIDsgdGhlbiBcDQotCSAgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9n bmF0a3IkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGty JChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGtyJChleGVleHQp OyBcDQorCSAgICBpZiBbIC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8u IF0gOyB0aGVuIFwNCisJICAgICAgIHJtIC1mICQoREVTVERJUikkKHRvb2xk aXIpL2Jpbi9nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQo dG9vbGRpcikvYmluL2duYXRrciQoZXhlZXh0KTsgXA0KICAgICAgICAgICAg IGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25h dGtyJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dGtyJChleGVleHQpICQoYmluZGlyKS9nbmF0a3IkKGV4ZWV4dCk7IFwNCisJ ICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGtyJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQpOyBcDQogCSAg ZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBc DQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGxpbmstY3Jvc3MkKGV4ZWV4 dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdGxpbmskKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQpOyBcDQot CSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkg ICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7 IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9z cyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0bGluayQoZXhlZXh0KTsg XA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bGluayQoZXhlZXh0KTsgXA0K KwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsg dGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0 b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwNCiAgICAgICAgICAg ICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2du YXRsaW5rJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdGxpbmskKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQp OyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRsaW5r JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxp bmskKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bGluayQoZXhl ZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQo ZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRscy1j cm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4 dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7 IFwNCi0JICAgIGlmIFsgLWQgJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBc DQotCSAgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4 dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jv c3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGxzJChleGVleHQpOyBc DQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2Fs aWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpOyBcDQorCSAgICBp ZiBbIC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwN CisJICAgICAgIHJtIC1mICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0 bHMkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmlu L2duYXRscyQoZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAg ZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGxzJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxzJChleGVleHQp ICQoYmluZGlyKS9nbmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQo REVTVERJUikkKGJpbmRpcikvZ25hdGxzJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdGxzJChleGVleHQpICQoREVTVERJUikk KGJpbmRpcikvZ25hdGxzJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZp DQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0K IAkgIGlmIFsgLWYgZ25hdG1ha2UtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1k ICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYg JCh0b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCi0JICAgICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAk KHRvb2xkaXIpL2Jpbi9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgJChS TSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1h a2UkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 bWFrZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAt ZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAg ICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdG1ha2Uk KGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 bWFrZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdG1ha2UkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkg IGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRtYWtlJChleGVl eHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UkKGV4 ZWV4dCkgJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQpOyBcDQorCSAgICAk KFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KIAkg IGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsg XA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRtZW0tY3Jvc3MkKGV4ZWV4 dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdG1lbSQoZXhlZXh0KTsgXA0KLQkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRtZW0tY3Jvc3MkKGV4ZWV4dCkgJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBcDQorCSAg ICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0bWVtJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdG1lbS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBcDQogCSAgZWxzZSBc DQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KTsgXA0K LQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRtZW0kKGV4ZWV4dCkgJChi aW5kaXIpL2duYXRtZW0kKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRtZW0kKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS9nbmF0bWVtJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZp DQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0K IAkgIGlmIFsgLWYgZ25hdG5hbWUtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bmFtZS1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRuYW1lJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAk KERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bmFtZSQo ZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRuYW1l LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRuYW1lJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAg ICAkKFJNKSAkKGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCi0JICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bmFtZSQoZXhlZXh0KSAkKGJpbmRp cikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJ UikkKGJpbmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0bmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpL2duYXRuYW1lJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZp DQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0K IAkgIGlmIFsgLWYgZ25hdHByZXAtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdHByZXAkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRwcmVwJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1k ICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYg JCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCk7IFwNCi0JICAgICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAk KHRvb2xkaXIpL2Jpbi9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgJChS TSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHBy ZXAkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 cHJlcC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAt ZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAg ICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHByZXAk KGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 cHJlcC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdHByZXAkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkg IGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRwcmVwJChleGVl eHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAkKGV4 ZWV4dCkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpOyBcDQorCSAgICAk KFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KIAkg IGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsg XA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRwc3RhLWNyb3NzJChleGVl eHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRwc3RhJChleGVleHQpOyBcDQotCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHN0YSQoZXhlZXh0KTsgXA0K LQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0J ICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQp OyBcDQotCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jv c3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdHBzdGEkKGV4ZWV4dCk7 IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRwc3RhJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHBzdGEkKGV4ZWV4dCk7IFwN CisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmluLy4gXSA7 IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQodG9vbGRpcikv YmluL2duYXRwc3RhJChleGVleHQpOyBcDQorCSAgICAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQo dG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpOyBcDQogICAgICAgICAg ICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9n bmF0cHN0YSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRwc3RhJChleGVleHQpICQoYmluZGlyKS9nbmF0cHN0YSQoZXhlZXh0 KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0cHN0 YSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRw c3RhJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdHBzdGEkKGV4 ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEk KGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0eHJl Zi1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChS TSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0eHJlZiQoZXhlZXh0 KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4cmVmLWNyb3Nz JChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHhyZWYk KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXR4cmVmJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdHhyZWYtY3Jvc3MkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHhyZWYkKGV4 ZWV4dCk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9n bmF0eHJlZiQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXR4cmVmJChleGVleHQpICQoYmluZGlyKS9nbmF0eHJlZiQoZXhlZXh0 KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0eHJl ZiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4 cmVmJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdHhyZWYkKGV4 ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAgICAgZmkNCiAJLWlmIFsgLWYgZ25h dDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0 ZmluZC1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAg JChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0ZmluZCQoZXhl ZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRmaW5kLWNy b3NzJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGZp bmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRmaW5kJChleGVleHQpOyBcDQorCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGZpbmQtY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGZpbmQk KGV4ZWV4dCk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGly KS9nbmF0ZmluZCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRmaW5kJChleGVleHQpICQoYmluZGlyKS9nbmF0ZmluZCQoZXhl ZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0 ZmluZCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXRmaW5kJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGZpbmQk KGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25h dDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0 Y2hvcCQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkg JChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQotCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRj aG9wJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5k aXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9n bmF0Y2hvcCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KICMNCiAjIEduYXRs YnIgaXMgb25seSB1c2VkIG9uIFZNUy4NCkBAIC02ODgsOCArNjg4LDggQEAN CiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0bGJyJChleGVleHQpIF0gOyBc DQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGxiciQo ZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRsYnIk KGV4ZWV4dCkgJChiaW5kaXIpL2duYXRsYnIkKGV4ZWV4dCk7IFwNCisJICAg ICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KTsg XA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRsYnIkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS9nbmF0bGJyJChleGVleHQpOyBcDQogCSAg ZmkgOyBcDQogCWZpDQogIw0KQEAgLTY5Nyw4ICs2OTcsOCBAQA0KICMNCiAJ LWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQotCSAg ICAkKFJNKSAkKGJpbmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXRkbGwkKGV4ZWV4dCkgJChiaW5kaXIp L2duYXRkbGwkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikk KGJpbmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRkbGwkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS9nbmF0ZGxsJChleGVleHQpOyBcDQogCWZpDQogIw0KICMgRmluYWxseSwg aW5zdGFsbCB0aGUgbGlicmFyeQ0KQEAgLTcxNSw0NiArNzE1LDQ2IEBADQog YWRhLmluc3RhbGwtbWFuOg0KIA0KIGFkYS51bmluc3RhbGw6DQotCS0kKFJN KSAkKGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmlu ZGlyKS9nbmF0YmwkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0 Y2hvcCQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXQkKGV4ZWV4 dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0ZGxsJChleGVleHQpDQotCS0k KFJNKSAkKGJpbmRpcikvZ25hdGtyJChleGVleHQpDQotCS0kKFJNKSAkKGJp bmRpcikvZ25hdGxpbmskKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9n bmF0bHMkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0bWFrZSQo ZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRtZW0kKGV4ZWV4dCkN Ci0JLSQoUk0pICQoYmluZGlyKS9nbmF0bmFtZSQoZXhlZXh0KQ0KLQktJChS TSkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpDQotCS0kKFJNKSAkKGJp bmRpcikvZ25hdHBzdGEkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdGJpbmQkKGV4ZWV4dCkNCi0JLSQoUk0pICQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJsJChleGVleHQpDQotCS0k KFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChleGVl eHQpDQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXQk KGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdGtyKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGxpbmskKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpDQotCS0kKFJNKSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpDQotCS0k KFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtZW0kKGV4ZWV4 dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG5h bWUkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdHByZXAkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdHBzdGEkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9v bGRpcikvYmluL2duYXRiaW5kJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xk aXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikv YmluL2duYXRjaG9wJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jp bi9nbmF0JChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0 ZGxsJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0a3Ik KGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRsaW5rJChl eGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4 dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRtYWtlJChleGVleHQp DQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bWVtJChleGVleHQpDQot CS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bmFtZSQoZXhlZXh0KQ0KLQkt JChSTSkgJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCkNCi0JLSQo Uk0pICQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRiaW5kJChleGVleHQpDQorCS0k KFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRibCQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KQ0K KwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0JChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRkbGwkKGV4ZWV4dCkN CisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRsaW5rJChleGVl eHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRscyQoZXhl ZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWFrZSQo ZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWVt JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRu YW1lJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRwcmVwJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIp L2duYXRwc3RhJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0YmluZCQoZXhlZXh0KQ0KKwktJChS TSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJs JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KQ0K KwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdGtyKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQpDQorCS0kKFJNKSAk KERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4 ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRtYWtlJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIp JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0bmFtZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4ZWV4dCkNCisJLSQoUk0p ICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwc3Rh JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdGJpbmQkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xk aXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikk KHRvb2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChE RVNURElSKSQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4dCkNCisJLSQoUk0p ICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0ZGxsJChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVl eHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGxp bmskKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jp bi9nbmF0bHMkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xk aXIpL2Jpbi9nbmF0bWFrZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElS KSQodG9vbGRpcikvYmluL2duYXRtZW0kKGV4ZWV4dCkNCisJLSQoUk0pICQo REVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bmFtZSQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRwcmVwJChleGVl eHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHBz dGEkKGV4ZWV4dCkNCiAjIEduYXRsYnIgYW5kIEduYXRjaG9wIGFyZSBvbmx5 IHVzZWQgb24gVk1TDQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGxiciQoZXhl ZXh0KSAkKGJpbmRpcikvZ25hdGNob3AkKGV4ZWV4dCkNCisJLSQoUk0pICQo REVTVERJUikkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpDQogDQogIyBDbGVhbiBob29r czoNCiAjIEEgbG90IG9mIHRoZSBhbmNpbGxhcnkgZmlsZXMgYXJlIGRlbGV0 ZWQgYnkgdGhlIG1haW4gbWFrZWZpbGUuDQpJbmRleDogZ2NjL2FkYS9NYWtl ZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91 c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvYWRhL01ha2VmaWxl LmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNg0KZGlmZiAtdSAtcjEu MzYgTWFrZWZpbGUuaW4NCi0tLSBnY2MvYWRhL01ha2VmaWxlLmluCTI0IFNl cCAyMDAyIDAzOjQ0OjMyIC0wMDAwCTEuMzYNCisrKyBnY2MvYWRhL01ha2Vm aWxlLmluCTEgSmFuIDIwMDMgMTc6Mjc6MzMgLTAwMDANCkBAIC0xNzExLDM4 ICsxNzExLDM4IEBADQogIwlDcmVhdGUgdGhlIGRpcmVjdG9yeSBiZWZvcmUg ZGVsZXRpbmcgaXQsIGluIGNhc2UgdGhlIGRpcmVjdG9yeSBpcw0KICMJYSBs aXN0IG9mIGRpcmVjdG9yaWVzIChhcyBpdCBtYXkgYmUgb24gVk1TKS4gVGhp cyBlbnN1cmVzIHdlIGFyZQ0KICMJZGVsZXRpbmcgdGhlIHJpZ2h0IG9uZS4N Ci0JLSQoTUtESVIpICQoQURBX1JUTF9PQkpfRElSKQ0KLQktJChNS0RJUikg JChBREFfSU5DTFVERV9ESVIpDQotCSQoUk1ESVIpICQoQURBX1JUTF9PQkpf RElSKQ0KLQkkKFJNRElSKSAkKEFEQV9JTkNMVURFX0RJUikNCi0JLSQoTUtE SVIpICQoQURBX1JUTF9PQkpfRElSKQ0KLQktJChNS0RJUikgJChBREFfSU5D TFVERV9ESVIpDQotCS0kKElOU1RBTExfREFUQSkgYWRhL3J0cy9NYWtlZmls ZS5hZGFsaWIgJChBREFfUlRMX09CSl9ESVIpDQorCS0kKE1LRElSKSAkKERF U1RESVIpJChBREFfUlRMX09CSl9ESVIpDQorCS0kKE1LRElSKSAkKERFU1RE SVIpJChBREFfSU5DTFVERV9ESVIpDQorCSQoUk1ESVIpICQoREVTVERJUikk KEFEQV9SVExfT0JKX0RJUikNCisJJChSTURJUikgJChERVNURElSKSQoQURB X0lOQ0xVREVfRElSKQ0KKwktJChNS0RJUikgJChERVNURElSKSQoQURBX1JU TF9PQkpfRElSKQ0KKwktJChNS0RJUikgJChERVNURElSKSQoQURBX0lOQ0xV REVfRElSKQ0KKwktJChJTlNUQUxMX0RBVEEpIGFkYS9ydHMvTWFrZWZpbGUu YWRhbGliICQoREVTVERJUikkKEFEQV9SVExfT0JKX0RJUikNCiAJZm9yIGZp bGUgaW4gYWRhL3J0cy8qLmFsaTsgZG8gXA0KLQkgICAgJChJTlNUQUxMX0RB VEEpICQkZmlsZSAkKEFEQV9SVExfT0JKX0RJUik7IFwNCisJICAgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElS KTsgXA0KIAlkb25lDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzLyokKGFyZXh0 KTtkbyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JU TF9PQkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAk KERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBpZmVx ICgkKHN0cmlwICQoZmlsdGVyLW91dCBhbHBoYSUgZGVjIHZtcyUgb3BlbnZt cyUgYWxwaGF2bXMlLCQodGFyZykpKSwpDQogCS1mb3IgZmlsZSBpbiBhZGEv cnRzL2xpYiokKHNvZXh0KTtkbyBcDQotCSAgICAkKElOU1RBTExfREFUQSkg JCRmaWxlICQoQURBX1JUTF9PQkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxM X0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBc DQogCWRvbmUNCiBlbHNlDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzL2xpYiot KiokKHNvZXh0KTtkbyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxl ICQoQURBX1JUTF9PQkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEp ICQkZmlsZSAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRv bmUNCiBlbmRpZg0KLQktJChMTl9TKSAkKEFEQV9SVExfT0JKX0RJUikvbGli Z25hdC0qJChzb2V4dCkgXA0KLQkgICAgICAgJChBREFfUlRMX09CSl9ESVIp L2xpYmduYXQkKHNvZXh0KQ0KLQktJChMTl9TKSAkKEFEQV9SVExfT0JKX0RJ UikvbGliZ25hcmwtKiQoc29leHQpIFwNCi0JICAgICAgICQoQURBX1JUTF9P QkpfRElSKS9saWJnbmFybCQoc29leHQpDQorCS0oIGNkICQoREVTVERJUikk KEFEQV9SVExfT0JKX0RJUikgJiYgXA0KKwkgICQoTE5fUykgbGliZ25hdC0q JChzb2V4dCkgbGliZ25hdCQoc29leHQpICkNCisJLSggY2QgJChERVNURElS KSQoQURBX1JUTF9PQkpfRElSKSAmJiBcDQorCSAgJChMTl9TKSBsaWJnbmFy bC0qJChzb2V4dCkgbGliZ25hcmwkKHNvZXh0KSApDQogIyBUaGlzIGNvcHkg bXVzdCBiZSBkb25lIHByZXNlcnZpbmcgdGhlIGRhdGUgb24gdGhlIG9yaWdp bmFsIGZpbGUuDQogCWZvciBmaWxlIGluIGFkYS9ydHMvKi5hZGIgYWRhL3J0 cy8qLmFkczsgZG8gXA0KLQkgICAgJChJTlNUQUxMX0RBVEFfREFURSkgJCRm aWxlICQoQURBX0lOQ0xVREVfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RB VEFfREFURSkgJCRmaWxlICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJUik7 IFwNCiAJZG9uZQ0KLQljZCAkKEFEQV9JTkNMVURFX0RJUik7ICQoQ0hNT0Qp IGEtd3ggKi5hZGINCi0JY2QgJChBREFfSU5DTFVERV9ESVIpOyAkKENITU9E KSBhLXd4ICouYWRzDQorCWNkICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJ Uik7ICQoQ0hNT0QpIGEtd3ggKi5hZGINCisJY2QgJChERVNURElSKSQoQURB X0lOQ0xVREVfRElSKTsgJChDSE1PRCkgYS13eCAqLmFkcw0KIA0KIC4uL3N0 YW1wLWduYXRsaWIyOg0KIAkkKFJNKSBydHMvcy0qLmFsaQ0KQEAgLTE4NTQs NyArMTg1NCw3IEBADQogICAgICAgICBlbmRpZg0KIA0KIGluc3RhbGwtcnRz OiBmb3JjZQ0KLQkkKENQKSAtciBydHMtJChSVFNfTkFNRSkgJChsaWJzdWJk aXIpLw0KKwkkKENQKSAtciBydHMtJChSVFNfTkFNRSkgJChERVNURElSKSQo bGlic3ViZGlyKS8NCiANCiBydHMtbm9uZTogZm9yY2UNCiAJJChNQUtFKSAk KEZMQUdTX1RPX1BBU1MpIHByZXBhcmUtcnRzIFwNCkluZGV4OiBnY2MvY29u ZmlnL3Qtc2xpYmdjYy1lbGYtdmVyDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2dj Yy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIsdg0KcmV0cmlldmluZyByZXZp c2lvbiAxLjQNCmRpZmYgLXUgLXIxLjQgdC1zbGliZ2NjLWVsZi12ZXINCi0t LSBnY2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTkgTWF5IDIwMDIgMjE6 MDE6NTMgLTAwMDAJMS40DQorKysgZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxm LXZlcgkyOSBEZWMgMjAwMiAxNTo1Nzo0NiAtMDAwMA0KQEAgLTE5LDExICsx OSwxMSBAQA0KICMgJChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3Rl Y3QgaXQgZnJvbSBleHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdj Yy5tay4gIFdlIHdhbnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0 YWxsIHRpbWUuDQogU0hMSUJfSU5TVEFMTCA9IFwNCi0JJCQoU0hFTEwpICQk KHNyY2RpcikvbWtpbnN0YWxsZGlycyAkJChzbGliZGlyKSQoU0hMSUJfU0xJ QkRJUl9RVUFMKTsgXA0KKwkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3Rh bGxkaXJzICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJf UVVBTCk7IFwNCiAJJChJTlNUQUxMX0RBVEEpICQoU0hMSUJfTkFNRSkgXA0K LQkgICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJf U09OQU1FKTsgXA0KLQlybSAtZiAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJ Ul9RVUFMKS8kKFNITElCX1NPTElOSyk7IFwNCisJICAkJChERVNURElSKSQk KHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1F KTsgXA0KKwlybSAtZiAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9T TElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKTsgXA0KIAkkKExOX1MpICQo U0hMSUJfU09OQU1FKSBcDQotCSAgJCQoc2xpYmRpcikkKFNITElCX1NMSUJE SVJfUVVBTCkvJChTSExJQl9TT0xJTkspDQorCSAgJCQoREVTVERJUikkJChz bGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykN CiBTSExJQl9NS01BUCA9ICQoc3JjZGlyKS9ta21hcC1zeW12ZXIuYXdrDQog U0hMSUJfTUFQRklMRVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52ZXINCklu ZGV4OiBnY2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2 cy9nY2MvZ2NjL2NvbmZpZy90LXNsaWJnY2Mtc2xkLHYNCnJldHJpZXZpbmcg cmV2aXNpb24gMS4zDQpkaWZmIC11IC1yMS4zIHQtc2xpYmdjYy1zbGQNCi0t LSBnY2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQJOSBNYXkgMjAwMiAyMTowMTo1 MyAtMDAwMAkxLjMNCisrKyBnY2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQJMjkg RGVjIDIwMDIgMTU6NTg6MzAgLTAwMDANCkBAIC0xNywxMSArMTcsMTEgQEAN CiAjICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZy b20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBX ZSB3YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1l Lg0KIFNITElCX0lOU1RBTEwgPSBcDQotCSQkKFNIRUxMKSAkJChzcmNkaXIp L21raW5zdGFsbGRpcnMgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVB TCk7IFwNCisJJCQoU0hFTEwpICQkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAk JChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpOyBc DQogCSQoSU5TVEFMTF9EQVRBKSAkKFNITElCX05BTUUpIFwNCi0JICAkJChz bGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTkFNRSk7 IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkv JChTSExJQl9TT0xJTkspOyBcDQorCSAgJCQoREVTVERJUikkJChzbGliZGly KSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTkFNRSk7IFwNCisJ cm0gLWYgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9R VUFMKS8kKFNITElCX1NPTElOSyk7IFwNCiAJJChMTl9TKSAkKFNITElCX1NP TkFNRSkgXA0KLQkgICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp LyQoU0hMSUJfU09MSU5LKQ0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikk KFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTkspDQogU0hMSUJf TUtNQVAgPSAkKHNyY2RpcikvbWttYXAtc3ltdmVyLmF3aw0KIFNITElCX01B UEZJTEVTID0gJChzcmNkaXIpL2xpYmdjYy1zdGQudmVyDQpJbmRleDogZ2Nj L2NvbmZpZy9hbHBoYS90LW9zZjQNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N ClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2Nj L2NvbmZpZy9hbHBoYS90LW9zZjQsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjUNCmRpZmYgLXUgLXIxLjUgdC1vc2Y0DQotLS0gZ2NjL2NvbmZpZy9hbHBo YS90LW9zZjQJMTMgSnVuIDIwMDEgMTQ6MjY6MDIgLTAwMDAJMS41DQorKysg Z2NjL2NvbmZpZy9hbHBoYS90LW9zZjQJMjkgRGVjIDIwMDIgMTU6Mjk6NTQg LTAwMDANCkBAIC0xNyw2ICsxNyw2IEBADQogCSQoTE5fUykgJChTSExJQl9O QU1FKSAkKFNITElCX1NPTkFNRSkNCiAjICQoc2xpYmRpcikgZG91YmxlIHF1 b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxk aW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1bnRp bCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KLVNITElCX0lOU1RBTEwgPSAkKElO U1RBTExfREFUQSkgJChTSExJQl9OQU1FKSAkJChzbGliZGlyKS8kKFNITElC X1NPTkFNRSk7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikvJChTSExJQl9OQU1F KTsgXA0KLQkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGlyKS8k KFNITElCX05BTUUpDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRB KSAkKFNITElCX05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJ Ql9TT05BTUUpOyBcDQorCXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikv JChTSExJQl9OQU1FKTsgXA0KKwkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAk JChERVNURElSKSQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCkluZGV4OiBn Y2MvY29uZmlnL2FyYy90LWFyYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2Mv Y29uZmlnL2FyYy90LWFyYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0K ZGlmZiAtdSAtcjEuNSB0LWFyYw0KLS0tIGdjYy9jb25maWcvYXJjL3QtYXJj CTMxIE1heSAyMDAyIDIwOjExOjQ5IC0wMDAwCTEuNQ0KKysrIGdjYy9jb25m aWcvYXJjL3QtYXJjCTI5IERlYyAyMDAyIDE1OjMwOjQyIC0wMDAwDQpAQCAt NjIsMTAgKzYyLDEwIEBADQogaW5zdGFsbC1tdWx0aWxpYi1hcmM6IGluc3Rh bGwtbXVsdGlsaWINCiAJZm9yIGkgaW4gYCQoR0NDX0ZPUl9UQVJHRVQpIC0t cHJpbnQtbXVsdGktbGliYDsgZG8gXA0KIAkgIGRpcj1gZWNobyAkJGkgfCBz ZWQgLWUgJ3MvOy4qJCQvLydgOyBcDQotCSAgcm0gLWYgJChsaWJzdWJkaXIp LyQke2Rpcn0vY3J0aW5pdC5vOyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQk e2Rpcn0vY3J0aW5pdC5vICQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQu bzsgXA0KLQkgIGNobW9kIGEteCAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRp bml0Lm87IFwNCi0JICBybSAtZiAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRm aW5pLm87IFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRmaW5p Lm8gJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0ZmluaS5vOyBcDQotCSAgY2ht b2QgYS14ICQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGZpbmkubzsgXA0KKwkg IHJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0 Lm87IFwNCisJICAkKElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRpbml0Lm8g JChERVNURElSKSQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0K KwkgIGNobW9kIGEteCAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0v Y3J0aW5pdC5vOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGly KS8kJHtkaXJ9L2NydGZpbmkubzsgXA0KKwkgICQoSU5TVEFMTF9EQVRBKSAk JHtkaXJ9L2NydGZpbmkubyAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rp cn0vY3J0ZmluaS5vOyBcDQorCSAgY2htb2QgYS14ICQoREVTVERJUikkKGxp YnN1YmRpcikvJCR7ZGlyfS9jcnRmaW5pLm87IFwNCiAJZG9uZQ0KSW5kZXg6 IGdjYy9jb25maWcvYXJtL3QtbmV0YnNkDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2Nj L2djYy9jb25maWcvYXJtL3QtbmV0YnNkLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS41DQpkaWZmIC11IC1yMS41IHQtbmV0YnNkDQotLS0gZ2NjL2NvbmZp Zy9hcm0vdC1uZXRic2QJMTMgRGVjIDIwMDEgMTQ6MjQ6MDMgLTAwMDAJMS41 DQorKysgZ2NjL2NvbmZpZy9hcm0vdC1uZXRic2QJMjkgRGVjIDIwMDIgMTU6 MzE6MzMgLTAwMDANCkBAIC0xNiw5ICsxNiw5IEBADQogCSQoTE5fUykgJChT SExJQl9OQU1FKSAkKFNITElCX1NPTkFNRSkNCiAjICQoc2xpYmRpcikgZG91 YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxl IGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXll ZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KLVNITElCX0lOU1RBTEwg PSAkKElOU1RBTExfREFUQSkgJChTSExJQl9OQU1FKSAkJChzbGliZGlyKS8k KFNITElCX1NPTkFNRSk7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikvJChTSExJ Ql9OQU1FKTsgXA0KLQkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGli ZGlyKS8kKFNITElCX05BTUUpDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFM TF9EQVRBKSAkKFNITElCX05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikv JChTSExJQl9TT05BTUUpOyBcDQorCXJtIC1mICQkKERFU1RESVIpJCQoc2xp YmRpcikvJChTSExJQl9OQU1FKTsgXA0KKwkkKExOX1MpICQoU0hMSUJfU09O QU1FKSAkJChERVNURElSKSQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCiAN CiAjIERvbid0IGJ1aWxkIGVucXVpcmUNCiBFTlFVSVJFPQ0KSW5kZXg6IGdj Yy9jb25maWcvaWE2NC90LWhwdXgNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N ClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2Nj L2NvbmZpZy9pYTY0L3QtaHB1eCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NQ0KZGlmZiAtdSAtcjEuNSB0LWhwdXgNCi0tLSBnY2MvY29uZmlnL2lhNjQv dC1ocHV4CTEzIFNlcCAyMDAyIDE2OjU4OjI3IC0wMDAwCTEuNQ0KKysrIGdj Yy9jb25maWcvaWE2NC90LWhwdXgJMSBKYW4gMjAwMyAxNzoyODo0NCAtMDAw MA0KQEAgLTQwLDkgKzQwLDkgQEANCiAJJChMTl9TKSBAc2hsaWJfYmFzZV9u YW1lQC5zbyBAc2hsaWJfYmFzZV9uYW1lQC5zby4wDQogIyAkKHNsaWJkaXIp IGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3 aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRl bGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNU QUxMID0gJChJTlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALnNvICQk KHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvLjA7IFwNCi0Jcm0gLWYg JCQoc2xpYmRpcikvQHNobGliX2Jhc2VfbmFtZUAuc287IFwNCi0JJChMTl9T KSBAc2hsaWJfYmFzZV9uYW1lQC5zby4wICQkKHNsaWJkaXIpL0BzaGxpYl9i YXNlX25hbWVALnNvOyBcDQotCWNobW9kICt4ICQkKHNsaWJkaXIpL0BzaGxp Yl9iYXNlX25hbWVALnNvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9E QVRBKSBAc2hsaWJfYmFzZV9uYW1lQC5zbyAkJChERVNURElSKSQkKHNsaWJk aXIpL0BzaGxpYl9iYXNlX25hbWVALnNvLjA7IFwNCisJcm0gLWYgJCQoREVT VERJUikkJChzbGliZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zbzsgXA0KKwkk KExOX1MpIEBzaGxpYl9iYXNlX25hbWVALnNvLjAgJCQoREVTVERJUikkJChz bGliZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zbzsgXA0KKwljaG1vZCAreCAk JChERVNURElSKSQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvDQog DQogU0hMSUJfTUtNQVAgPSAkKHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCklu ZGV4OiBnY2MvY29uZmlnL21pcHMvdC1pcmlzNS02DQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1j dnMvZ2NjL2djYy9jb25maWcvbWlwcy90LWlyaXM1LTYsdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgdC1pcmlzNS02DQotLS0g Z2NjL2NvbmZpZy9taXBzL3QtaXJpczUtNgkyOSBKdWwgMjAwMiAyMjoyMTo0 MSAtMDAwMAkxLjINCisrKyBnY2MvY29uZmlnL21pcHMvdC1pcmlzNS02CTI5 IERlYyAyMDAyIDE1OjQwOjE3IC0wMDAwDQpAQCAtMjAsMTEgKzIwLDExIEBA DQogIyAkKHNsaWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBm cm9tIGV4cGFuc2lvbiB3aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAg V2Ugd2FudCB0aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGlt ZS4NCiBTSExJQl9JTlNUQUxMID0gXA0KLQkkJChTSEVMTCkgJCQoc3JjZGly KS9ta2luc3RhbGxkaXJzICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FV QUwpOyBcDQorCSQkKFNIRUxMKSAkJChzcmNkaXIpL21raW5zdGFsbGRpcnMg JCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsg XA0KIAkkKElOU1RBTExfREFUQSkgJChTSExJQl9OQU1FKSBcDQotCSAgJCQo c2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUp OyBcDQotCXJtIC1mICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp LyQoU0hMSUJfU09MSU5LKTsgXA0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRp cikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQor CXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJf UVVBTCkvJChTSExJQl9TT0xJTkspOyBcDQogCSQoTE5fUykgJChTSExJQl9T T05BTUUpIFwNCi0JICAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFM KS8kKFNITElCX1NPTElOSykNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIp JChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQ0KIFNITElC X01LTUFQID0gJChzcmNkaXIpL21rbWFwLWZsYXQuYXdrDQogU0hMSUJfTUFQ RklMRVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4OiBnY2Mv Y29uZmlnL3BhL3QtaHB1eC1zaGxpYg0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9n Y2MvY29uZmlnL3BhL3QtaHB1eC1zaGxpYix2DQpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMQ0KZGlmZiAtdSAtcjEuMSB0LWhwdXgtc2hsaWINCi0tLSBnY2Mv Y29uZmlnL3BhL3QtaHB1eC1zaGxpYgkxOSBEZWMgMjAwMSAxNzo1OTowNSAt MDAwMAkxLjENCisrKyBnY2MvY29uZmlnL3BhL3QtaHB1eC1zaGxpYgkyOSBE ZWMgMjAwMiAxNTo1MDoxNyAtMDAwMA0KQEAgLTEzLDcgKzEzLDcgQEANCiAj ICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20g ZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3 YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0K IFNITElCX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkgLW0gNTU1ICQoU0hM SUJfTkFNRSkgXA0KLQkkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwN Ci0gICAgICAgIHJtIC1mICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSk7IFwN Ci0gICAgICAgICQoTE5fUykgJChTSExJQl9TT05BTUUpICQkKHNsaWJkaXIp LyQoU0hMSUJfTkFNRSkNCisJJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNI TElCX1NPTkFNRSk7IFwNCisgICAgICAgIHJtIC1mICQkKERFU1RESVIpJCQo c2xpYmRpcikvJChTSExJQl9OQU1FKTsgXA0KKyAgICAgICAgJChMTl9TKSAk KFNITElCX1NPTkFNRSkgJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElC X05BTUUpDQogDQpJbmRleDogZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg0Mw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwv c3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL3JzNjAwMC90LWFpeDQz LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOA0KZGlmZiAtdSAtcjEuMTgg dC1haXg0Mw0KLS0tIGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NDMJMjAgSnVs IDIwMDIgMDI6MjA6MTYgLTAwMDAJMS4xOA0KKysrIGdjYy9jb25maWcvcnM2 MDAwL3QtYWl4NDMJMjkgRGVjIDIwMDIgMTU6NTE6MDkgLTAwMDANCkBAIC01 NSw3ICs1NSw3IEBADQogCXJtIC1mIEBtdWx0aWxpYl9kaXJAL3Noci5vDQog IyAkKHNsaWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9t IGV4cGFuc2lvbiB3aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ug d2FudCB0aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4N Ci1TSExJQl9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNl X25hbWVALmEgJCQoc2xpYmRpcikvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5T VEFMTF9EQVRBKSBAc2hsaWJfYmFzZV9uYW1lQC5hICQkKERFU1RESVIpJCQo c2xpYmRpcikvDQogU0hMSUJfTElCUyA9IC1sYyBgY2FzZSBAc2hsaWJfYmFz ZV9uYW1lQCBpbiAqcHRocmVhZCopIGVjaG8gLWxwdGhyZWFkIDs7IGVzYWNg DQogU0hMSUJfTUtNQVAgPSAkKHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCiBT SExJQl9NQVBGSUxFUyA9ICQoc3JjZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5k ZXg6IGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NTINCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2 cy9nY2MvZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg1Mix2DQpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMQ0KZGlmZiAtdSAtcjEuMSB0LWFpeDUyDQotLS0gZ2Nj L2NvbmZpZy9yczYwMDAvdC1haXg1MgkxMCBPY3QgMjAwMiAxODoyOTozMyAt MDAwMAkxLjENCisrKyBnY2MvY29uZmlnL3JzNjAwMC90LWFpeDUyCTEgSmFu IDIwMDMgMTc6Mjk6MDAgLTAwMDANCkBAIC0zNiw3ICszNiw3IEBADQogCXJt IC1mIEBtdWx0aWxpYl9kaXJAL3Noci5vDQogIyAkKHNsaWJkaXIpIGRvdWJs ZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBi dWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQg dW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxMID0g JChJTlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALmEgJCQoc2xpYmRp cikvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJf YmFzZV9uYW1lQC5hICQkKERFU1RESVIpJCQoc2xpYmRpcikvDQogU0hMSUJf TElCUyA9IC1sYyBgY2FzZSBAc2hsaWJfYmFzZV9uYW1lQCBpbiAqcHRocmVh ZCopIGVjaG8gLWxwdGhyZWFkIDs7IGVzYWNgDQogU0hMSUJfTUtNQVAgPSAk KHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCiBTSExJQl9NQVBGSUxFUyA9ICQo c3JjZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5kZXg6IGdjYy9jcC9NYWtlLWxh bmcuaW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNy L2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NwL01ha2UtbGFuZy5p bix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI5DQpkaWZmIC11IC1yMS4x MjkgTWFrZS1sYW5nLmluDQotLS0gZ2NjL2NwL01ha2UtbGFuZy5pbgkzMCBE ZWMgMjAwMiAxOTowMjowMyAtMDAwMAkxLjEyOQ0KKysrIGdjYy9jcC9NYWtl LWxhbmcuaW4JMSBKYW4gMjAwMyAxNzoyOToxMSAtMDAwMA0KQEAgLTEyOSwy NyArMTI5LDMyIEBADQogYysrLmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGly cw0KIAktaWYgWyAtZiBjYzFwbHVzJChleGVleHQpIF0gOyB0aGVuIFwNCiAJ ICBpZiBbIC1mIGcrKy1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAg ICBybSAtZiAkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnKystY3Jvc3MkKGV4ZWV4 dCkgJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQot CSAgICBjaG1vZCBhK3ggJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChl eGVleHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoTE4pICQoYmluZGlyKS8kKEdY WF9DUk9TU19OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJChDWFhfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJChnY2NfdG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICBybSAtZiAkKGdjY190b29s ZGlyKS9iaW4vZysrJChleGVleHQpOyBcDQotCSAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnKystY3Jvc3MkKGV4ZWV4dCkgJChnY2NfdG9vbGRpcikvYmlu L2crKyQoZXhlZXh0KTsgXA0KLQkgICAgICBybSAtZiAkKGdjY190b29sZGly KS9iaW4vYysrJChleGVleHQpOyBcDQotCSAgICAgICQoTE4pICQoZ2NjX3Rv b2xkaXIpL2Jpbi9nKyskKGV4ZWV4dCkgJChnY2NfdG9vbGRpcikvYmluL2Mr KyQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGly KS8kKEdYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNU QUxMX1BST0dSQU0pIGcrKy1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChi aW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBj aG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9DUk9TU19OQU1F KSQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGly KS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgKCBjZCAk KERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJICAgICAgJChMTikgJChHWFhf Q1JPU1NfTkFNRSkkKGV4ZWV4dCkgJChDWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4 dCkgKTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJChnY2NfdG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICBybSAtZiAkKERFU1RESVIp JChnY2NfdG9vbGRpcikvYmluL2crKyQoZXhlZXh0KTsgXA0KKwkgICAgICAk KElOU1RBTExfUFJPR1JBTSkgZysrLWNyb3NzJChleGVleHQpICQoREVTVERJ UikkKGdjY190b29sZGlyKS9iaW4vZysrJChleGVleHQpOyBcDQorCSAgICAg IHJtIC1mICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4vYysrJChleGVl eHQpOyBcDQorCSAgICAgICggY2QgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIp L2JpbiAmJiBcDQorCSAgICAgICAgJChMTikgZysrJChleGVleHQpIGMrKyQo ZXhlZXh0KSApOyBcDQogCSAgICBlbHNlIHRydWU7IGZpOyBcDQogCSAgZWxz ZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGcrKyQo ZXhlZXh0KSAkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEdYWF9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChD WFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChMTikgJChi aW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIp LyQoQ1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJtIC1m ICQoYmluZGlyKS8kKEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KLQkgICAgJChMTikgJChiaW5kaXIpLyQoR1hYX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQoR1hYX1RBUkdFVF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhf VEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoTE4p ICQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQoYmlu ZGlyKS8kKENYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K KwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkg ZysrJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHWFhfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJ UikkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K KwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKENYWF9JTlNUQUxM X05BTUUpJChleGVleHQpOyBcDQorCSAgICAoIGNkICQoREVTVERJUikkKGJp bmRpcikgJiYgXA0KKwkgICAgICAkKExOKSAkKEdYWF9JTlNUQUxMX05BTUUp JChleGVleHQpICQoQ1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgKTsgXA0K KwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9UQVJHRVRf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgKCBjZCAkKERFU1RE SVIpJChiaW5kaXIpICYmIFwNCisJICAgICAgJChMTikgJChHWFhfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KSAkKEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KSApOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIp LyQoQ1hYX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAg ICAoIGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgXA0KKwkgICAgICAkKExO KSAkKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQoQ1hYX1RBUkdFVF9J TlNUQUxMX05BTUUpJChleGVleHQpICk7IFwNCiAJICBmaSA7IFwNCiAJZmkN CiANCkBAIC0xNTgsMjMgKzE2MywyMyBAQA0KIGMrKy5pbnN0YWxsLW1hbjog aW5zdGFsbGRpcnMgJChzcmNkaXIpL2NwL2crKy4xDQogCS1pZiBbIC1mIGNj MXBsdXMkKGV4ZWV4dCkgXSA7IHRoZW4gXA0KIAkgIGlmIFsgLWYgZysrLWNy b3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JICAgIHJtIC1mICQobWFuMWRp cikvJChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElO U1RBTExfREFUQSkgJChzcmNkaXIpL2NwL2crKy4xICQobWFuMWRpcikvJChH WFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXgg JChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJ ICAgIHJtIC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0NST1NTX05B TUUpJChtYW4xZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3Jj ZGlyKS9jcC9nKysuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9DUk9T U19OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RE SVIpJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwN CiAJICBlbHNlIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChHWFhfSU5T VEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRB KSAkKHNyY2RpcikvY3AvZysrLjEgJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxM X05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRp cikvJChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIHJt IC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIp L2NwL2crKy4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExf TkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElS KSQobWFuMWRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwN CiAJICBmaTsgXA0KIAllbHNlIHRydWU7IGZpDQogDQogYysrLnVuaW5zdGFs bDoNCi0JLXJtIC1yZiAkKGJpbmRpcikvJChDWFhfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1F KSQoZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKEdYWF9JTlNUQUxM X05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoR1hYX0NS T1NTX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEdY WF9JTlNUQUxMX05BTUUpJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRp cikvJChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChE RVNURElSKSQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQp DQorCS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKENYWF9DUk9TU19O QU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikv JChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVT VERJUikkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJ LXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChtYW4xZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIp LyQoR1hYX0NST1NTX05BTUUpJChtYW4xZXh0KQ0KICMMDQogIyBDbGVhbiBo b29rczoNCiAjIEEgbG90IG9mIHRoZSBhbmNpbGxhcnkgZmlsZXMgYXJlIGRl bGV0ZWQgYnkgdGhlIG1haW4gbWFrZWZpbGUuDQpJbmRleDogZ2NjL2YvTWFr ZS1sYW5nLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9mL01ha2UtbGFu Zy5pbix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE2DQpkaWZmIC11IC1y MS4xMTYgTWFrZS1sYW5nLmluDQotLS0gZ2NjL2YvTWFrZS1sYW5nLmluCTEg SmFuIDIwMDMgMTU6MjY6MDcgLTAwMDAJMS4xMTYNCisrKyBnY2MvZi9NYWtl LWxhbmcuaW4JMSBKYW4gMjAwMyAxNzoyOToyMiAtMDAwMA0KQEAgLTI0Niwx MyArMjQ2LDEzIEBADQogZjc3Lmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGly cw0KIAktaWYgWyAtZiBmNzcxJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBp ZiBbIC1mIGc3Ny1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBy bSAtZiAkKGJpbmRpcikvJChHNzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzctY3Jvc3MkKGV4ZWV4dCkg JChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAg ICBjaG1vZCBhK3ggJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVl eHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3 X0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZzc3LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv JChHNzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEr eCAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVl eHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChH NzdfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxM X1BST0dSQU0pIGc3NyQoZXhlZXh0KSAkKGJpbmRpcikvJChHNzdfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGly KS8kKEc3N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzckKGV4ZWV4 dCkgJChERVNURElSKSQoYmluZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGly KS8kKEc3N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZmkgOyBc DQogCWVsc2UgdHJ1ZTsgZmkNCiAJQGlmIFsgLWYgZjc3LWluc3RhbGwtb2sg LW8gLWYgJChzcmNkaXIpL2Y3Ny1pbnN0YWxsLW9rIF07IHRoZW4gXA0KQEAg LTI2OSw0MyArMjY5LDQzIEBADQogIyB0byBkbyB0aGUgaW5zdGFsbC4gIFRo ZSBzZWQgcnVsZSB3YXMgY29waWVkIGZyb20gc3RtcC1pbnQtaGRycy4NCiBm NzcuaW5zdGFsbC1pbmZvOiBmNzcuaW5mbyBpbnN0YWxsZGlycw0KIAlpZiBb IC1mICQoc3JjZGlyKS9mL2c3Ny5pbmZvIF0gOyB0aGVuIFwNCi0JICBybSAt ZiAkKGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIHJtIC1mICQoREVTVERJ UikkKGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KIAkgIGZvciBmIGluICQoc3Jj ZGlyKS9mL2c3Ny5pbmZvKjsgZG8gXA0KIAkgICAgICByZWFsZmlsZT1gZWNo byAkJGYgfCBzZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0J ICAgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVhbGZp bGU7IFwNCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIp JChpbmZvZGlyKS8kJHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KLQkgIGNo bW9kIGEteCAkKGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIGNobW9kIGEt eCAkKERFU1RESVIpJChpbmZvZGlyKS9nNzcuaW5mbyo7IFwNCiAJZWxzZSB0 cnVlOyBmaQ0KIAlAaWYgWyAtZiAkKHNyY2RpcikvZi9nNzcuaW5mbyBdIDsg dGhlbiBcDQogCSAgaWYgJChTSEVMTCkgLWMgJ2luc3RhbGwtaW5mbyAtLXZl cnNpb24gfCBzZWQgMXEgfCBmZ3JlcCAtcyAtdiAtaSBkZWJpYW4nID4vZGV2 L251bGwgMj4mMTsgdGhlbiBcDQotCSAgICBlY2hvICIgaW5zdGFsbC1pbmZv IC0taW5mby1kaXI9JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIjsg XA0KLQkgICAgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JChpbmZvZGlyKSAk KGluZm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAgICBlY2hvICIgaW5z dGFsbC1pbmZvIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgJChE RVNURElSKSQoaW5mb2RpcikvZzc3LmluZm8iOyBcDQorCSAgICBpbnN0YWxs LWluZm8gLS1pbmZvLWRpcj0kKERFU1RESVIpJChpbmZvZGlyKSAkKERFU1RE SVIpJChpbmZvZGlyKS9nNzcuaW5mbyB8fCA6IDsgXA0KIAkgIGVsc2UgOiA7 IGZpOyBcDQogCWVsc2UgOiA7IGZpDQogDQogZjc3Lmluc3RhbGwtbWFuOiAk KEdFTkVSQVRFRF9NQU5QQUdFUykgaW5zdGFsbGRpcnMNCiAJLWlmIFsgLWYg Zjc3MSQoZXhlZXh0KSBdIDsgdGhlbiBcDQogCSAgaWYgWyAtZiBnNzctY3Jv c3MkKGV4ZWV4dCkgXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGly KS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3 X0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQo bWFuMWRpcikvJChHNzdfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAg ICBybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1F KSQobWFuMWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rp cikvZi9nNzcuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19O QU1FKSQobWFuMWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIp JChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJ ICBlbHNlIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChHNzdfSU5TVEFM TF9OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFN RSkkKG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8k KEc3N19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFu MWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9n NzcuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19JTlNUQUxMX05BTUUp JChtYW4xZXh0KTsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1h bjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAg Zmk7IFwNCiAJZWxzZSB0cnVlOyBmaQ0KIA0KIGY3Ny51bmluc3RhbGw6IGlu c3RhbGxkaXJzDQogCWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12 ZXJzaW9uIHwgc2VkIDFxIHwgZmdyZXAgLXMgLXYgLWkgZGViaWFuJyA+L2Rl di9udWxsIDI+JjE7IHRoZW4gXA0KLQkgIGVjaG8gIiBpbnN0YWxsLWluZm8g LS1kZWxldGUgLS1pbmZvLWRpcj0kKGluZm9kaXIpICQoaW5mb2RpcikvZzc3 LmluZm8iOyBcDQotCSAgaW5zdGFsbC1pbmZvIC0tZGVsZXRlIC0taW5mby1k aXI9JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQor CSAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQo REVTVERJUikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5p bmZvIjsgXA0KKwkgIGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGly PSQoREVTVERJUikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3 Ny5pbmZvIHx8IDogOyBcDQogCWVsc2UgOiA7IGZpDQotCXJtIC1yZiAkKGJp bmRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQlybSAt cmYgJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQot CXJtIC1yZiAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFl eHQpOyBcDQotCXJtIC1yZiAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUp JChtYW4xZXh0KTsgXA0KLQlybSAtcmYgJChpbmZvZGlyKS9nNzcuaW5mbyoN CisJcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoYmluZGly KS8kKEc3N19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChE RVNURElSKSQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4 dCk7IFwNCisJcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3X0NS T1NTX05BTUUpJChtYW4xZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQo aW5mb2RpcikvZzc3LmluZm8qDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMg QSBsb3Qgb2YgdGhlIGFuY2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0 aGUgbWFpbiBtYWtlZmlsZS4NCkluZGV4OiBnY2MvamF2YS9NYWtlLWxhbmcu aW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xv Y2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2phdmEvTWFrZS1sYW5nLmlu LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS45NQ0KZGlmZiAtdSAtcjEuOTUg TWFrZS1sYW5nLmluDQotLS0gZ2NjL2phdmEvTWFrZS1sYW5nLmluCTEgSmFu IDIwMDMgMTU6MTA6MDAgLTAwMDAJMS45NQ0KKysrIGdjYy9qYXZhL01ha2Ut bGFuZy5pbgkxIEphbiAyMDAzIDE3OjI5OjMyIC0wMDAwDQpAQCAtMTcxLDUz ICsxNzEsNTQgQEANCiBqYXZhLmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGly cw0KIAktaWYgWyAtZiAkKEdDSikkKGV4ZWV4dCkgXTsgdGhlbiBcDQogCSAg aWYgWyAtZiAkKEdDSiktY3Jvc3MkKGV4ZWV4dCkgXTsgdGhlbiBcDQotCSAg ICBybSAtZiAkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChHQ0opLWNyb3NzJChl eGVleHQpICQoYmluZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7 IFwNCi0JICAgIGNobW9kIGEreCAkKGJpbmRpcikvJChKQVZBX0NST1NTX05B TUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5k aXIpLyQoSkFWQV9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pICQoR0NKKS1jcm9zcyQoZXhlZXh0KSAkKERFU1RE SVIpJChiaW5kaXIpLyQoSkFWQV9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0K KwkgICAgY2htb2QgYSt4ICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NS T1NTX05BTUUpJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICBybSAt ZiAkKGJpbmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKEdDSikkKGV4ZWV4dCkgJChi aW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAg ICBjaG1vZCBhK3ggJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChKQVZBX1RBUkdF VF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICAkKExOKSAkKGJp bmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIp LyQoSkFWQV9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkg ICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQo R0NKKSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNU RElSKSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsg XA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEpBVkFfVEFS R0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgICggY2QgJChE RVNURElSKSQoYmluZGlyKSAmJiBcDQorCSAgICAgICQoTE4pICQoSkFWQV9J TlNUQUxMX05BTUUpJChleGVleHQpICQoSkFWQV9UQVJHRVRfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSApOyBcDQogCSAgZmkgOyBcDQogCWZpIDsgXA0KICAg ICAgICAgZm9yIHRvb2wgaW4gJChKQVZBX1RBUkdFVF9JTkRFUEVOREVOVF9C SU5fVE9PTFMpOyBkbyBcDQogCSAgdG9vbF90cmFuc2Zvcm1lZF9uYW1lPWBl Y2hvICQkdG9vbHxzZWQgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYDsg XA0KICAgICAgICAgICBpZiBbIC1mICQkdG9vbCQoZXhlZXh0KSBdOyB0aGVu IFwNCi0JICAgIHJtIC1mICQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRf bmFtZSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQk dG9vbCQoZXhlZXh0KSAkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25h bWUkKGV4ZWV4dCk7IFwNCi0JICAgIGNobW9kIGEreCAkKGJpbmRpcikvJCR0 b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1m ICQoREVTVERJUikkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUk KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJHRvb2wk KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3Jt ZWRfbmFtZSQoZXhlZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJ UikkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7 IFwNCiAgICAgICAgICAgZmkgOyBcDQogICAgICAgIGRvbmUNCiANCiBqYXZh Lmluc3RhbGwtbWFuOg0KIA0KIGphdmEudW5pbnN0YWxsOg0KLQktcm0gLXJm ICQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQkt cm0gLXJmICQoYmluZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkN Ci0JLXJtIC1yZiAkKG1hbjFkaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJCht YW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvJChKQVZBX0NST1NTX05B TUUpJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvZ2NqaCQobWFu MWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpL2p2LXNjYW4kKG1hbjFleHQp DQotCS1ybSAtcmYgJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCi0J LXJtIC1yZiAkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCi0JLXJtIC1yZiAk KG1hbjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQorCS1ybSAtcmYgJChE RVNURElSKSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NST1NT X05BTUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRp cikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4x ZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpL2djamgkKG1h bjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikvanYtc2Nh biQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9q Y2YtZHVtcCQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4x ZGlyKS9naWokKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFu MWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCiANCiBqYXZhLmluc3RhbGwt aW5mbzogaW5zdGFsbGRpcnMNCiAJaWYgWyAtZiBqYzEkKGV4ZWV4dCkgXSA7 IHRoZW4gXA0KIAkgIGlmIFsgLWYgJChzcmNkaXIpL2phdmEvZ2NqLmluZm8g XTsgdGhlbiBcDQotCSAgICBybSAtZiAkKGluZm9kaXIpL2djai5pbmZvKjsg XA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoaW5mb2RpcikvZ2NqLmluZm8q OyBcDQogCSAgICBmb3IgZiBpbiAkKHNyY2RpcikvamF2YS9nY2ouaW5mbyo7 IGRvIFwNCiAJICAgICAgcmVhbGZpbGU9YGVjaG8gJCRmIHwgc2VkIC1lICdz fC4qL1woW14vXSpcKSQkfFwxfCdgOyBcDQotCSAgICAgICQoSU5TVEFMTF9E QVRBKSAkJGYgJChpbmZvZGlyKS8kJHJlYWxmaWxlOyBcDQorCSAgICAgICQo SU5TVEFMTF9EQVRBKSAkJGYgJChERVNURElSKSQoaW5mb2RpcikvJCRyZWFs ZmlsZTsgXA0KIAkgICAgZG9uZTsgXA0KLQkgICAgY2htb2QgYS14ICQoaW5m b2RpcikvZ2NqLmluZm8qOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElS KSQoaW5mb2RpcikvZ2NqLmluZm8qOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsg XA0KIAllbHNlIHRydWU7IGZpDQotCS1pZiBbIC1mIGpjMSQoZXhlZXh0KSBd ICYmIFsgLWYgJChpbmZvZGlyKS9nY2ouaW5mbyBdOyB0aGVuIFwNCisJLWlm IFsgLWYgamMxJChleGVleHQpIF0gJiYgWyAtZiAkKERFU1RESVIpJChpbmZv ZGlyKS9nY2ouaW5mbyBdOyB0aGVuIFwNCiAJICBpZiAkKFNIRUxMKSAtYyAn aW5zdGFsbC1pbmZvIC0tdmVyc2lvbicgPi9kZXYvbnVsbCAyPiYxOyB0aGVu IFwNCi0JICAgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5mb2Rpcikv ZGlyICQoaW5mb2RpcikvZ2NqLmluZm87IFwNCisJICAgIGluc3RhbGwtaW5m byAtLWRpci1maWxlPSQoREVTVERJUikkKGluZm9kaXIpL2RpciAkKERFU1RE SVIpJChpbmZvZGlyKS9nY2ouaW5mbzsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7 IFwNCiAJZWxzZSB0cnVlOyBmaQ0KIA0KQEAgLTQxOSwzMyArNDIwLDMzIEBA DQogamF2YS5pbnN0YWxsLW1hbjogaW5zdGFsbGRpcnMgJChHRU5FUkFURURf SkFWQV9NQU5QQUdFUykNCiAJLWlmIFsgLWYgJChHQ0opJChleGVleHQpIF07 IHRoZW4gXA0KIAkgIGlmIFsgLWYgJChHQ0opLWNyb3NzJChleGVleHQpIF07 IHRoZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1Nf TkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2phdmEvZ2NqLjEgJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFN RSkkKG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8k KEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBybSAtZiAk KERFU1RESVIpJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFl eHQpOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEv Z2NqLjEgJChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUp JChtYW4xZXh0KTsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1h bjFkaXIpLyQoSkFWQV9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBl bHNlIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChKQVZBX0lOU1RBTExf TkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2phdmEvZ2NqLjEgJChtYW4xZGlyKS8kKEpBVkFfSU5TVEFMTF9O QU1FKSQobWFuMWV4dCk7IFwNCi0JICAgIGNobW9kIGEteCAkKG1hbjFkaXIp LyQoSkFWQV9JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0g LWYgJChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIp L2phdmEvZ2NqLjEgJChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0lOU1RB TExfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNU RElSKSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQp OyBcDQogCSAgZmkgOyBcDQogCWZpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2dj amgkKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2ph dmEvZ2NqaC4xICQobWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCi0JLWNobW9k IGEteCAkKG1hbjFkaXIpL2djamgkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1h bjFkaXIpL2p2LXNjYW4kKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkg JChzcmNkaXIpL2phdmEvanYtc2Nhbi4xICQobWFuMWRpcikvanYtc2NhbiQo bWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIpL2p2LXNjYW4kKG1h bjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0 KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2pjZi1kdW1w LjEgJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCi0JLWNobW9kIGEt eCAkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0KLQktcm0gLWYgJCht YW4xZGlyKS9naWokKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2phdmEvZ2lqLjEgJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQot CS1jaG1vZCBhLXggJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQotCS1ybSAt ZiAkKG1hbjFkaXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQotCS0kKElOU1RB TExfREFUQSkgJChzcmNkaXIpL2phdmEvanYtY29udmVydC4xICQobWFuMWRp cikvanYtY29udmVydCQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFk aXIpL2p2LWNvbnZlcnQkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIp L3JtaWMkKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIp L2phdmEvcm1pYy4xICQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCi0JLWNo bW9kIGEteCAkKG1hbjFkaXIpL3JtaWMkKG1hbjFleHQpDQotCS1ybSAtZiAk KG1hbjFkaXIpL3JtaXJlZ2lzdHJ5JChtYW4xZXh0KQ0KLQktJChJTlNUQUxM X0RBVEEpICQoc3JjZGlyKS9qYXZhL3JtaXJlZ2lzdHJ5LjEgJChtYW4xZGly KS9ybWlyZWdpc3RyeSQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFk aXIpL3JtaXJlZ2lzdHJ5JChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElS KSQobWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRB KSAkKHNyY2RpcikvamF2YS9nY2poLjEgJChERVNURElSKSQobWFuMWRpcikv Z2NqaCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4x ZGlyKS9nY2poJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFu MWRpcikvanYtc2NhbiQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvamF2YS9qdi1zY2FuLjEgJChERVNURElSKSQobWFuMWRpcikv anYtc2NhbiQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJCht YW4xZGlyKS9qdi1zY2FuJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElS KSQobWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQorCS0kKElOU1RBTExf REFUQSkgJChzcmNkaXIpL2phdmEvamNmLWR1bXAuMSAkKERFU1RESVIpJCht YW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERF U1RESVIpJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCisJLXJtIC1m ICQoREVTVERJUikkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCisJLSQoSU5T VEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9naWouMSAkKERFU1RESVIpJCht YW4xZGlyKS9naWokKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChERVNURElS KSQobWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElS KSQobWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCisJLSQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9qdi1jb252ZXJ0LjEgJChERVNURElS KSQobWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCisJLWNobW9kIGEt eCAkKERFU1RESVIpJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0K Kwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkN CisJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9ybWljLjEgJChE RVNURElSKSQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCisJLWNobW9kIGEt eCAkKERFU1RESVIpJChtYW4xZGlyKS9ybWljJChtYW4xZXh0KQ0KKwktcm0g LWYgJChERVNURElSKSQobWFuMWRpcikvcm1pcmVnaXN0cnkkKG1hbjFleHQp DQorCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvcm1pcmVnaXN0 cnkuMSAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlyZWdpc3RyeSQobWFuMWV4 dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlyZWdp c3RyeSQobWFuMWV4dCkNCkluZGV4OiBnY2MvdHJlZWxhbmcvTWFrZS1sYW5n LmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9s b2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy90cmVlbGFuZy9NYWtlLWxh bmcuaW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjkNCmRpZmYgLXUgLXIx LjkgTWFrZS1sYW5nLmluDQotLS0gZ2NjL3RyZWVsYW5nL01ha2UtbGFuZy5p bgkyMyBEZWMgMjAwMiAxOToyNjo0OCAtMDAwMAkxLjkNCisrKyBnY2MvdHJl ZWxhbmcvTWFrZS1sYW5nLmluCTEgSmFuIDIwMDMgMTc6MzE6NTEgLTAwMDAN CkBAIC0xNjcsMTAgKzE2NywxMCBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYg JCRuYW1lIF0gOyB0aGVuIFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2Vu YW1lICQkbmFtZVxgIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25h bWUpJyBgIjsgXA0KLQkgICAgcm0gLWYgJChiaW5kaXIpLyQkbmFtZTIkKGV4 ZWV4dCk7IFwNCi0JICAgIGVjaG8gJChJTlNUQUxMX1BST0dSQU0pICQkbmFt ZSQoZXhlZXh0KSAkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkg ICAgJChJTlNUQUxMX1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKGJpbmRp cikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmlu ZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RE SVIpJChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgIGVjaG8g JChJTlNUQUxMX1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFM TF9QUk9HUkFNKSAkJG5hbWUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS8kJG5hbWUyJChleGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNU RElSKSQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQogCSAgZmkgOyBc DQogCWRvbmUNCiAJJChTVEFNUCkgdHJlZWxhbmcuaW5zdGFsbC5jb21tb24u ZG9uZQ0KQEAgLTE4MCw5ICsxODAsOSBAQA0KIAlkbyBcDQogCSAgIGlmIFsg LWYgJCRuYW1lIF0gOyB0aGVuIFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJh c2VuYW1lICQkbmFtZVxgIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3Jt X25hbWUpJyBgIjsgXA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkbmFt ZTIkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5h bWUkKGV4ZWV4dCkgJChsaWJzdWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwN Ci0JICAgIGNobW9kIGEreCAkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0 KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS8kJG5h bWUyJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRu YW1lJChleGVleHQpICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRuYW1lMiQo ZXhlZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJUikkKGxpYnN1 YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlkb25l DQogDQpAQCAtMTk0LDggKzE5NCw4IEBADQogCSAgZWNobyAkJG5hbWU7IFwN CiAJICBuYW1lMj0iYGVjaG8gJCRuYW1lIHwgc2VkIC1lICckKHByb2dyYW1f dHJhbnNmb3JtX25hbWUpJyBgIjsgXA0KIAkgIGVjaG8gYmVjb21lcyAkJG5h bWUyOyBcDQotCSAgZWNobyAtcm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChl eGVleHQpOyBcDQotCSAgcm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVl eHQpOyBcDQorCSAgZWNobyAtcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikv JCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgIHJtIC1yZiAkKERFU1RESVIpJChi aW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCiAJZG9uZQ0KIAktcm0gdHJl ZWxhbmcuaW5zdGFsbC5jb21tb24uZG9uZQ0KIA0KSW5kZXg6IGxpYmYyYy9N YWtlZmlsZS5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9saWJmMmMvTWFrZWZp bGUuaW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjU0DQpkaWZmIC11IC1y MS41NCBNYWtlZmlsZS5pbg0KLS0tIGxpYmYyYy9NYWtlZmlsZS5pbgkyMyBT ZXAgMjAwMiAwMzo1Mjo1MCAtMDAwMAkxLjU0DQorKysgbGliZjJjL01ha2Vm aWxlLmluCTEgSmFuIDIwMDMgMTc6MzE6NTMgLTAwMDANCkBAIC04MSw2ICs4 MSw3IEBADQogCVdBUk5fQ0ZMQUdTPSckKFdBUk5fQ0ZMQUdTKScgXA0KIAlD RkxBR1M9JyQoQ0ZMQUdTKScgXA0KIAlDUFBGTEFHUz0nJChDUFBGTEFHUykn IFwNCisJREVTVERJUj0nJChERVNURElSKScgXA0KIAlBUj0nJChBUiknIFwN CiAJUkFOTElCPSckKFJBTkxJQiknIFwNCiAJcHJlZml4PSckKHByZWZpeCkn IFwNCkBAIC0yMTQsMjEgKzIxNSwyMSBAQA0KIAljZCBsaWJVNzc7ICQoTUFL RSkgRzc3RElSPS4uLy4uLy4uL2djYy8gY2hlY2sNCiANCiBpbnN0YWxsOiBh bGwNCi0JJChTSEVMTCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRp cnMgJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KLQkkKExJQlRPT0wpIC0t bW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChMSUJHMkMpICQoZ2xpYmNwcF90 b29sZXhlY2xpYmRpcikNCi0JJChJTlNUQUxMX0RBVEEpIGxpYmZydGJlZ2lu LmEgJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KLQkkKFJBTkxJQikgJChn bGliY3BwX3Rvb2xleGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQotCSQoSU5T VEFMTF9EQVRBKSBnMmMuaCAkKGxpYnN1YmRpcikvaW5jbHVkZS9nMmMuaA0K KwkkKFNIRUxMKSAkKHRvcGxldmVsX3NyY2RpcikvbWtpbnN0YWxsZGlycyAk KERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwkkKExJQlRP T0wpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChMSUJHMkMpICQoREVT VERJUikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQorCSQoSU5TVEFMTF9E QVRBKSBsaWJmcnRiZWdpbi5hICQoREVTVERJUikkKGdsaWJjcHBfdG9vbGV4 ZWNsaWJkaXIpDQorCSQoUkFOTElCKSAkKERFU1RESVIpJChnbGliY3BwX3Rv b2xleGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQorCSQoSU5TVEFMTF9EQVRB KSBnMmMuaCAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUvZzJjLmgN CiAJJChNVUxUSURPKSAkKEZMQUdTX1RPX1BBU1MpIG11bHRpLWRvIERPPSIk QCINCi0JQC0kKExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChnbGliY3BwX3Rv b2xleGVjbGliZGlyKQ0KKwlALSQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAk KERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KIA0KIGluc3Rh bGwtc3RyaXA6DQogCSQoTUFLRSkgSU5TVEFMTF9QUk9HUkFNPSckKElOU1RB TExfUFJPR1JBTSkgLXMnIGluc3RhbGwNCiANCiB1bmluc3RhbGw6DQotCXJt IC1mICQobGlic3ViZGlyKS9pbmNsdWRlL2cyYy5oDQotCXJtIC1mICQoZ2xp YmNwcF90b29sZXhlY2xpYmRpcikvbGliZnJ0YmVnaW4uYQ0KLQkkKExJQlRP T0wpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJChnbGliY3BwX3Rvb2xleGVj bGliZGlyKSQoTElCRzJDX0JBU0UpLmxhDQorCXJtIC1mICQoREVTVERJUikk KGxpYnN1YmRpcikvaW5jbHVkZS9nMmMuaA0KKwlybSAtZiAkKERFU1RESVIp JChnbGliY3BwX3Rvb2xleGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQorCSQo TElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAkKERFU1RESVIpJChn bGliY3BwX3Rvb2xleGVjbGliZGlyKSQoTElCRzJDX0JBU0UpLmxhDQogCSQo TVVMVElETykgJChGTEFHU19UT19QQVNTKSBtdWx0aS1kbyBETz0iJEAiDQog DQogbW9zdGx5Y2xlYW46DQpJbmRleDogbGliaWJlcnR5L01ha2VmaWxlLmlu DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2xpYmliZXJ0eS9NYWtlZmlsZS5pbix2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgNCmRpZmYgLXUgLXIxLjc4IE1h a2VmaWxlLmluDQotLS0gbGliaWJlcnR5L01ha2VmaWxlLmluCTIyIE5vdiAy MDAyIDIwOjAxOjA3IC0wMDAwCTEuNzgNCisrKyBsaWJpYmVydHkvTWFrZWZp bGUuaW4JMSBKYW4gMjAwMyAxNzozMjowNSAtMDAwMA0KQEAgLTg0LDYgKzg0 LDcgQEANCiAJIkFSX0ZMQUdTPSQoQVJfRkxBR1MpIiBcDQogCSJDQz0kKEND KSIgXA0KIAkiQ0ZMQUdTPSQoQ0ZMQUdTKSIgXA0KKwkiREVTVERJUj0kKERF U1RESVIpIiBcDQogCSJMSUJDRkxBR1M9JChMSUJDRkxBR1MpIiBcDQogCSJF WFRSQV9PRklMRVM9JChFWFRSQV9PRklMRVMpIiBcDQogCSJIREVGSU5FUz0k KEhERUZJTkVTKSIgXA0KSW5kZXg6IGxpYm9iamMvTWFrZWZpbGUuaW4NCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3Ny Yy9jdnMvZ2NjLWN2cy9nY2MvbGlib2JqYy9NYWtlZmlsZS5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMjINCmRpZmYgLXUgLXIxLjIyIE1ha2VmaWxl LmluDQotLS0gbGlib2JqYy9NYWtlZmlsZS5pbgkyMyBTZXAgMjAwMiAwMzo1 Mjo1MyAtMDAwMAkxLjIyDQorKysgbGlib2JqYy9NYWtlZmlsZS5pbgkxIEph biAyMDAzIDE3OjMzOjE1IC0wMDAwDQpAQCAtMTE4LDYgKzExOCw3IEBADQog CSJBUl9GTEFHUz0kKEFSX0ZMQUdTKSIgXA0KIAkiQ0M9JChDQykiIFwNCiAJ IkNGTEFHUz0kKENGTEFHUykiIFwNCisJIkRFU1RESVI9JChERVNURElSKSIg XA0KIAkiTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKSIgXA0KIAkiRVhUUkFfT0ZJ TEVTPSQoRVhUUkFfT0ZJTEVTKSIgXA0KIAkiSERFRklORVM9JChIREVGSU5F UykiIFwNCkBAIC0zMTgsMjEgKzMxOSwyMSBAQA0KIGluc3RhbGw6IGluc3Rh bGwtbGlicyBpbnN0YWxsLWhlYWRlcnMNCiANCiBpbnN0YWxsLWxpYnM6IGlu c3RhbGxkaXJzDQotCSQoU0hFTEwpICQodG9wbGV2ZWxfc3JjZGlyKS9ta2lu c3RhbGxkaXJzICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikNCi0JJChMSUJU T09MX0lOU1RBTEwpICQoSU5TVEFMTCkgbGlib2JqYy5sYSAkKGdsaWJjcHBf dG9vbGV4ZWNsaWJkaXIpOw0KKwkkKFNIRUxMKSAkKHRvcGxldmVsX3NyY2Rp cikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVj bGliZGlyKQ0KKwkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMKSBsaWJv YmpjLmxhICQoREVTVERJUikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpOw0K IAlpZiBbICIkKE9CSkNfQk9FSE1fR0MpIiBdOyB0aGVuIFwNCiAJICAkKExJ QlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMKSBsaWJvYmpjX2djLmxhIFwNCi0J CQkJJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKTtcDQorCQkJCSQoREVTVERJ UikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpO1wNCiAJZmkNCiAJJChNVUxU SURPKSAkKEZMQUdTX1RPX1BBU1MpIG11bHRpLWRvIERPPSIkQCINCi0JQC0k KExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChnbGliY3BwX3Rvb2xleGVjbGli ZGlyKQ0KKwlALSQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKERFU1RESVIp JChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KIA0KICMgQ29weSBPYmplY3Rp dmUgQyBoZWFkZXJzIHRvIGluc3RhbGxhdGlvbiBpbmNsdWRlIGRpcmVjdG9y eS4NCiBpbnN0YWxsLWhlYWRlcnM6DQotCSQoU0hFTEwpICQodG9wbGV2ZWxf c3JjZGlyKS9ta2luc3RhbGxkaXJzICQobGlic3ViZGlyKS9pbmNsdWRlL29i amMNCisJJChTSEVMTCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRp cnMgJChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlL29iamMNCiAJZm9y IGZpbGUgaW4gJChPQkpDX0gpOyBkbyBcDQogCSAgcmVhbGZpbGU9JChzcmNk aXIpL29iamMvJCR7ZmlsZX07IFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7 cmVhbGZpbGV9ICQobGlic3ViZGlyKS9pbmNsdWRlL29iamM7IFwNCisJICAk KElOU1RBTExfREFUQSkgJCR7cmVhbGZpbGV9ICQoREVTVERJUikkKGxpYnN1 YmRpcikvaW5jbHVkZS9vYmpjOyBcDQogCWRvbmUNCiANCiBjaGVjayB1bmlu c3RhbGwgaW5zdGFsbC1zdHJpcCBkaXN0IGluc3RhbGxjaGVjayBpbnN0YWxs ZGlyczoNCkluZGV4OiBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5h bQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9j YWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9saWJzdGRjKystdjMvaW5jbHVkZS9N YWtlZmlsZS5hbSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQNCmRpZmYg LXUgLXIxLjQ0IE1ha2VmaWxlLmFtDQotLS0gbGlic3RkYysrLXYzL2luY2x1 ZGUvTWFrZWZpbGUuYW0JMTYgRGVjIDIwMDIgMTk6MDE6NTcgLTAwMDAJMS40 NA0KKysrIGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtCTEgSmFu IDIwMDMgMTc6MzM6NDEgLTAwMDANCkBAIC00NzAsMzIgKzQ3MCwzMiBAQA0K ICMgdGhlIHJlc3QgYXJlIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJj ZSB0cmVlLg0KIGd4eF9pbmNsdWRlX2RpciA9IEBneHhfaW5jbHVkZV9kaXJA DQogaW5zdGFsbC1kYXRhLWxvY2FsOg0KLQkkKG1raW5zdGFsbGRpcnMpICR7 Z3h4X2luY2x1ZGVfZGlyfQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2lu Y2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQorCSQobWtpbnN0YWxsZGly cykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfQ0KKwkkKG1raW5zdGFs bGRpcnMpICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1 aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke2JpdHNfaGVhZGVyc307IGRvIFwN Ci0JICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9k aXJ9LyR7Yml0c19idWlsZGRpcn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJz KSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiYWNrd2FyZF9idWlsZGRpcn0NCisJ ICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2lu Y2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0 YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3 YXJkX2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke2JhY2t3YXJkX2hlYWRl cnN9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGlyfTsgZG9uZQ0KLQkk KG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWls ZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGlyfTsgZG9u ZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikke2d4eF9pbmNsdWRl X2Rpcn0vJHtleHRfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7ZXh0X2hl YWRlcnN9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7 Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRpcn07IGRvbmUNCi0JJCht a2luc3RhbGxkaXJzKSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jhc2VfYnVp bGRkaXJ9DQorCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICQoREVTVERJ Uikke2d4eF9pbmNsdWRlX2Rpcn0vJHtleHRfYnVpbGRkaXJ9OyBkb25lDQor CSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fS8ke2NfYmFzZV9idWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4gJHtjX2Jhc2Vf aGVhZGVyc19yZW5hbWV9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICR7 Y19iYXNlX2J1aWxkZGlyfS8kJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn07 IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9 LyQke2ZpbGV9ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jh c2VfYnVpbGRkaXJ9OyBkb25lDQogCWNfYmFzZV9oZWFkZXJzX2V4dHJhX2lu c3RhbGw9JyQoY19iYXNlX2hlYWRlcnNfZXh0cmEpJztcDQogCWZvciBmaWxl IGluICQkY19iYXNlX2hlYWRlcnNfZXh0cmFfaW5zdGFsbDsgZG8gXA0KLQkg ICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJHtneHhfaW5jbHVkZV9kaXJ9LyR7 Yml0c19idWlsZGRpcn07IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkgJCRm aWxlICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxk ZGlyfTsgZG9uZQ0KIAljX2NvbXBhdGliaWxpdHlfaGVhZGVyc19pbnN0YWxs PSckKGNfY29tcGF0aWJpbGl0eV9oZWFkZXJzX2V4dHJhKSc7XA0KIAlmb3Ig ZmlsZSBpbiAkJGNfY29tcGF0aWJpbGl0eV9oZWFkZXJzX2luc3RhbGw7IGRv IFwNCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlICR7Z3h4X2luY2x1ZGVf ZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVf ZGlyfS8ke3N0ZF9idWlsZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJCRm aWxlICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn07IGRvbmUNCisJJCht a2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7 c3RkX2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3N0ZF9oZWFkZXJzX3Jl bmFtZX07IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJHtzdGRfYnVpbGRk aXJ9LyQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KLQkkKG1r aW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWls ZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJHtzdGRfYnVpbGRkaXJ9LyQk e2ZpbGV9ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVp bGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7 Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWlsZGRpcn0NCiAJZm9yIGZp bGUgaW4gJHt0YXJnZXRfaGVhZGVyc30gJHt0YXJnZXRfaGVhZGVyc19leHRy YX0gXA0KIAkgJHt0aHJlYWRfdGFyZ2V0X2hlYWRlcnN9OyBkbyBcDQotCSAg JChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfS8k e3RhcmdldF9idWlsZGRpcn07IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkg JCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke3Rhcmdl dF9idWlsZGRpcn07IGRvbmUNCiANCiAjIEJ5IGFkZGluZyB0aGVzZSBmaWxl cyBoZXJlLCBhdXRvbWFrZSB3aWxsIHJlbW92ZSB0aGVtIGZvciAnbWFrZSBj bGVhbicNCiAjQ0xFQU5GSUxFUyA9ICR7YWxsc3RhbXBzfQ0K --8323584-1802465805-1041558730=:28243-- From gcc-patches-return-74932-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 02:02:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6656 invoked by alias); 3 Jan 2003 02:02:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6649 invoked from network); 3 Jan 2003 02:02:05 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 3 Jan 2003 02:02:05 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h031wXs31188; Thu, 2 Jan 2003 17:58:33 -0800 Date: Thu, 02 Jan 2003 17:58:33 -0800 From: Mark Mitchell To: Graham Stott , "gcc-patches@gcc.gnu.org" Subject: Re: Bootstrap failure on irix6.5 possibly caused by new C++ parser? Message-ID: <97430000.1041559113@warlock.codesourcery.com> In-Reply-To: <3E14EC0C.9060007@btinternet.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Friday, January 03, 2003 01:49:00 AM +0000 Graham Stott wrote: > Mark Mitchell wrote: >>>> I think you can use just one variable in the cp_parser struct, instead >>>> of maintaining the two separate lists-of-lists, too. >>> >>> I'm not sure that's possible. > After looking at it from a different angle I decided that you were correct > a single list-of-lists is suffices. Cool. This patch is fine. Thanks for doing it! -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74933-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 02:11:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8074 invoked by alias); 3 Jan 2003 02:11:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8067 invoked from network); 3 Jan 2003 02:11:29 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 3 Jan 2003 02:11:29 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h032BGk23971 for ; Thu, 2 Jan 2003 21:11:16 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UHHT-0002YA-00 for ; Thu, 02 Jan 2003 21:09:51 -0500 Date: Thu, 2 Jan 2003 21:09:49 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/2437 Message-ID: <20030103020949.GA9803@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/lookup/two-stage1.C: New test. Index: g++.dg/lookup/two-stage1.C =================================================================== RCS file: g++.dg/lookup/two-stage1.C diff -N g++.dg/lookup/two-stage1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/lookup/two-stage1.C 3 Jan 2003 02:10:03 -0000 @@ -0,0 +1,18 @@ +/* PR c++/2437 */ +/* { dg-do run } */ + +// Test of two-stage name lookup. + +int g(double) { return 0; } + +template struct X +{ + int f() { return g(2); } // should call g(double) +}; + +inline int g(int) { return 1; } + +int main() +{ + return X().f(); // should call g(double), but used to call g(int) +} From gcc-patches-return-74934-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 02:13:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10252 invoked by alias); 3 Jan 2003 02:13:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10245 invoked from network); 3 Jan 2003 02:13:13 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 3 Jan 2003 02:13:13 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h0329es31203; Thu, 2 Jan 2003 18:09:40 -0800 Date: Thu, 02 Jan 2003 18:09:40 -0800 From: Mark Mitchell To: Matt Austern , Nathan Sidwell cc: "gcc-patches@gcc.gnu.org" Subject: Re: PATCH: improve vtable emission Message-ID: <109780000.1041559780@warlock.codesourcery.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Thursday, January 02, 2003 01:40:35 PM -0800 Matt Austern wrote: > +#if 0 > + /* This would be nice, but we didn't think of it in time. */ > + || DECL_DESTRUCTOR_P (method) > +#endif Remove this; as Geoff said, we don't believe in #if 0'd code. + if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE) + { + keyed_classes = tree_cons (NULL_TREE, t, keyed_classes); + } Remove the braces; we're not supposed to have them if there's only one statement between them. + tree fnclass = DECL_CLASS_CONTEXT (fndecl); You can just use DECL_CONTEXT here; you know it's a virtual member. + { + keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes); + } Extra braces again. With those minor changes, the patch is fine. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74935-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 05:16:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29896 invoked by alias); 3 Jan 2003 05:16:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29880 invoked from network); 3 Jan 2003 05:16:37 -0000 Received: from unknown (HELO smtp.comcast.net) (24.153.64.2) by 209.249.29.67 with SMTP; 3 Jan 2003 05:16:37 -0000 Received: from kelley (pcp02688653pcs.roylok01.mi.comcast.net [68.61.96.119]) by mtaout02.icomcast.net (iPlanet Messaging Server 5.2 HotFix 1.07 (built Nov 25 2002)) with ESMTP id <0H8400FCHHBDGH@mtaout02.icomcast.net> for gcc-patches@gcc.gnu.org; Fri, 03 Jan 2003 00:16:25 -0500 (EST) Date: Fri, 03 Jan 2003 00:16:28 -0500 From: Kelley Cook Subject: Re: Testcase for fixed PR c++/3406 To: "gcc-patches@gcc.gnu.org" , Nathanael Nerode , Gabriel Dos Reis Message-id: <0H8400FCJHBDGH@mtaout02.icomcast.net> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 7BIT Priority: Normal >Nathanael Nerode writes: > >| I will now be excessively pedantic. :-) > >You're welcome. > >| When '>' is used *as a bracket*, as in template code: >| >| template Y (T) >| >| then it is correct to refer to it as 'angle bracket'. > >But when you see the token ">", you cannot say that it is incorrect to >call it "angle-bracet" nor can you say it is incorrect to call it >"less-than". There is just one *signe* token ">". > >| As the foldoc entry indicates, > > *Either* of the characters "<" (less-than, ASCII 60) and ">" > (greater-than, ASCII 62). As an outsider, I tend agree with Nathanael. The Left Angle Bracket is Unicode 0x2039 while the Less than Sign is 0x003C. They are not the same thing. Having only 96 characters in the ASCII character set may have happened to give them the same representation in C++, but that doesn't excuse calling it by the wrong name. A hyphen is not an en-dash is not a minus sign either. If there was a problem with the subtraction operator, it would be confusing to name the test hyphen-1.c Kelley Cook From gcc-patches-return-74936-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 05:18:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31143 invoked by alias); 3 Jan 2003 05:18:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31135 invoked from network); 3 Jan 2003 05:18:27 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 3 Jan 2003 05:18:27 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h035IGw18818 for ; Thu, 2 Jan 2003 21:18:16 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Thu, 2 Jan 2003 21:18:16 -0800 Received: from apple.com (vpn-scv-x4-200.apple.com [17.219.194.200]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h035IFf07502; Thu, 2 Jan 2003 21:18:15 -0800 (PST) Date: Thu, 2 Jan 2003 21:18:52 -0800 Subject: Re: PATCH: improve vtable emission Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Nathan Sidwell , "gcc-patches@gcc.gnu.org" To: Mark Mitchell From: Matt Austern In-Reply-To: <109780000.1041559780@warlock.codesourcery.com> Message-Id: Content-Transfer-Encoding: 7bit On Thursday, January 2, 2003, at 06:09 PM, Mark Mitchell wrote: > > > --On Thursday, January 02, 2003 01:40:35 PM -0800 Matt Austern > wrote: > >> +#if 0 >> + /* This would be nice, but we didn't think of it in time. */ >> + || DECL_DESTRUCTOR_P (method) >> +#endif > > Remove this; as Geoff said, we don't believe in #if 0'd code. I always assumed you were the one who put that #if 0 section in! But, of course, I'll be happy to remove it. As you say, it'll be cleaner with it gone. On a slightly related subject... Removing the special-casing for a key function that's declared inline out of the class is indeed correct according to the ABI document, but it is a change in our compiler's behavior. I think it's correct to make this change (it fixes a bug, and I can't think of any way it'll cause a problem), but I wanted to make sure people realized it is a change. I'll fix the style issues and check it in. --Matt From gcc-patches-return-74937-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 06:11:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13914 invoked by alias); 3 Jan 2003 06:11:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13905 invoked from network); 3 Jan 2003 06:11:08 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 3 Jan 2003 06:11:08 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id BAA14541 for gcc-patches@gcc.gnu.org; Fri, 3 Jan 2003 01:10:56 -0500 (EST) Date: Fri, 3 Jan 2003 01:10:56 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301030610.BAA14541@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org Subject: Patch installed: contrib/gcc_updatre gperf timestamp dependencies The recent changes to java/keyword.gperf caused tonight's bootstrap to try and rebuild keyword.h using gperf which I (purposely) haven't installed. I patched gcc_update to `touch' the gperf generated files. Tested on solaris2.7 and installed as "obvious". Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/contrib/ChangeLog,v retrieving revision 1.153 diff -u -p -r1.153 ChangeLog --- ChangeLog 29 Dec 2002 19:34:53 -0000 1.153 +++ ChangeLog 3 Jan 2003 06:04:11 -0000 @@ -1,3 +1,9 @@ +2003-01-03 Kaveh R. Ghazi + + * gcc_update (files_and_dependencies): Add gcc/cp/cfns.h depends + on gcc/cp/cfns.gperf and gcc/java/keyword.h depends on + gcc/java/keyword.gperf + 2002-12-29 Gerald Pfeifer * gcc_update (files_and_dependencies): Add gcc/intl/plural.c as Index: gcc_update =================================================================== RCS file: /cvs/gcc/gcc/contrib/gcc_update,v retrieving revision 1.41 diff -u -p -r1.41 gcc_update --- gcc_update 29 Dec 2002 19:34:53 -0000 1.41 +++ gcc_update 3 Jan 2003 06:04:11 -0000 @@ -29,7 +29,7 @@ # contrib/gcc_update --list # # -# (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +# (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation # Originally by Gerald Pfeifer , August 1998. # # This script is Free Software, and it can be copied, distributed and @@ -72,6 +72,8 @@ gcc/fixinc/fixincl.x: gcc/fixinc/fixincl gcc/intl/plural.c: gcc/intl/plural.y # And then, language-specific files gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def +gcc/cp/cfns.h: gcc/cp/cfns.gperf +gcc/java/keyword.h: gcc/java/keyword.gperf gcc/ada/treeprs.ads: gcc/ada/treeprs.adt gcc/ada/sinfo.ads gcc/ada/xtreeprs.adb gcc/ada/einfo.h: gcc/ada/einfo.ads gcc/ada/einfo.adb gcc/ada/xeinfo.adb gcc/ada/sinfo.h: gcc/ada/sinfo.ads gcc/ada/xsinfo.adb From gcc-patches-return-74938-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 09:25:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16067 invoked by alias); 3 Jan 2003 09:25:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16046 invoked from network); 3 Jan 2003 09:25:21 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 3 Jan 2003 09:25:21 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 526513FD2; Fri, 3 Jan 2003 10:25:09 +0100 (CET) Date: Fri, 3 Jan 2003 10:25:09 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] rtlopt merge part 2 -- bb-reorder rewrite Message-ID: <20030103092509.GA5382@artax.karlin.mff.cuni.cz> References: <20021220152930.GA4115@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021220152930.GA4115@artax.karlin.mff.cuni.cz> User-Agent: Mutt/1.3.28i > Hi! > > this is a rewrite of bb-reorder. It performs also a loop rotation > and duplication of some small hot basic blocks. I take this patch back. I have written some improvements and have some more ideas. I'll send the updated patch soon. Josef From gcc-patches-return-74939-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 09:55:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26369 invoked by alias); 3 Jan 2003 09:55:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26352 invoked from network); 3 Jan 2003 09:55:22 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 3 Jan 2003 09:55:22 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 3FD08142BD; Fri, 3 Jan 2003 10:55:11 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18UOOM-0006kX-00; Fri, 03 Jan 2003 10:45:26 +0100 Mail-Copies-To: never To: Christian Cornelssen Cc: Subject: Re: [3.4] DESTDIR support completed References: From: Andreas Jaeger Date: Fri, 03 Jan 2003 10:45:26 +0100 In-Reply-To: (Christian Cornelssen's message of "Fri, 3 Jan 2003 02:52:10 +0100 (CET)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Christian Cornelssen writes: > Hello, > > In `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00111.html', > on Fri, 3 Jan 2003, Christian Cornelssen wrote: > >> Pro: "mkinstalldirs" already takes an optional "prefix" argument which > --------^ > should have been "mkheaders", of course, sorry... > > I have changed the installdirs rule and taken out the "mkheaders" > patch from `destdir2.diff', as suggested. The result is attached > as `destdir3.diff'. Please visit > `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00047.html' for the > patches adding documentation and regenerating dependent files. > > ChangeLog entry preparation is in progress... > > I am hoping for feedback from testers on modern targets and/or > with Ada. The patches are uncritical in that they don't change > commands there when DESTDIR is empty, but the goal is to support > nonempty values (*absolute* paths), of course. I did a test with all languages on i686-linux-gnu and that looked fine (with DESTDIR set), Thanks, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74940-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 10:16:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32590 invoked by alias); 3 Jan 2003 10:16:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32529 invoked from network); 3 Jan 2003 10:16:16 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 3 Jan 2003 10:16:16 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h03AFM1F008652; Fri, 3 Jan 2003 11:15:23 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h03AFMFk008651; Fri, 3 Jan 2003 11:15:22 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Kelley Cook Cc: "gcc-patches@gcc.gnu.org" , Nathanael Nerode Subject: Re: Testcase for fixed PR c++/3406 References: <0H8400FCJHBDGH@mtaout02.icomcast.net> From: Gabriel Dos Reis In-Reply-To: <0H8400FCJHBDGH@mtaout02.icomcast.net> Organization: Integrable Solutions Date: 03 Jan 2003 11:15:22 +0100 Message-ID: Lines: 17 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Kelley Cook writes: | >| As the foldoc entry indicates, | > | > *Either* of the characters "<" (less-than, ASCII 60) and ">" | > (greater-than, ASCII 62). | | As an outsider, I tend agree with Nathanael. | | The Left Angle Bracket is Unicode 0x2039 while the Less than Sign is | 0x003C. They are not the same thing. | | Having only 96 characters in the ASCII character set may have happened | to give them the same representation in C++, but that doesn't excuse | calling it by the wrong name. The foldoc entry was not even talking about C++. From gcc-patches-return-74941-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 10:20:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1672 invoked by alias); 3 Jan 2003 10:20:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1663 invoked from network); 3 Jan 2003 10:20:54 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 3 Jan 2003 10:20:54 -0000 Received: from [128.130.111.39] (acrux [128.130.111.39]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h03AKBB5013783; Fri, 3 Jan 2003 11:20:11 +0100 (CET) Date: Fri, 3 Jan 2003 11:20:13 +0100 (CET) From: Gerald Pfeifer To: "Joseph S. Myers" cc: gcc-patches@gcc.gnu.org Subject: Re: PATCH for Re: installation instructions; glitchlet In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Okay, fixed thusly. Thanks for the explanation. Gerald 2003-01-03 Gerald Pfeifer * doc/install.texi (Configuration): Fix markup for reference to gcc/config.gcc. Index: doc/install.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/install.texi,v retrieving revision 1.159 diff -u -3 -p -r1.159 install.texi --- doc/install.texi 31 Dec 2002 19:16:24 -0000 1.159 +++ doc/install.texi 3 Jan 2003 10:14:56 -0000 @@ -717,7 +717,7 @@ compiler should generate code for by def only supported on some ports, specifically arm, powerpc, and SPARC@. If configure does not recognize the model name (e.g.@: arm700, 603e, or ultrasparc) you provide, please check the -@command{gcc/config.gcc} script for a complete list of supported models. +@file{gcc/config.gcc} script for a complete list of supported models. @item --enable-altivec Specify that the target supports AltiVec vector enhancements. This From gcc-patches-return-74942-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 10:25:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2977 invoked by alias); 3 Jan 2003 10:25:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2962 invoked from network); 3 Jan 2003 10:25:10 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 3 Jan 2003 10:25:10 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h03ANk1F008676; Fri, 3 Jan 2003 11:23:46 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h03ANjqs008675; Fri, 3 Jan 2003 11:23:45 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Phil Edwards Cc: Mark Mitchell , Benjamin Kosnik , "gcc-patches@gcc.gnu.org" , "libstdc++@gcc.gnu.org" Subject: Re: V3 PATCH: Various pedantic fixes References: <20030102143813.34974847.bkoz@redhat.com> <90720000.1041544393@warlock.codesourcery.com> <20030102194021.A2277@disaster.jaj.com> From: Gabriel Dos Reis In-Reply-To: <20030102194021.A2277@disaster.jaj.com> Organization: Integrable Solutions Date: 03 Jan 2003 11:23:45 +0100 Message-ID: Lines: 28 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Phil Edwards writes: | --On Thursday, January 02, 2003 02:38:13 PM -0600 Benjamin Kosnik | > wrote: | > | > > Thanks for this and the new C++ parser Mark. | | Ditto! | | I've always had a current "wouldn't it be cool if..." hack project going on, | but never one realted to GCC. Now I do: with this parser, I can start | playing with N1345[*], I hope you won't duplicate work... At the last Santa Cruz meeting, Jason, Matt, Benjamin and I informally discussed compile reflection (which includes type traits) support in the C++ front-end. At the time, the BIB was active and Jason suggested I posted patches for inclusion in BIB... Something I unfortunately didn't because I was not trusting that such pacthes would survive the double merge BIB + cp-parser-branch. Now that we have the new parser, I'm looking for the mainline tree to stabilize a bit (I believe two weeks should be sufficient) before creating an official branch for putting some support of compile time reflection in the C++ front-end. -- Gaby From gcc-patches-return-74943-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 11:45:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31047 invoked by alias); 3 Jan 2003 11:45:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30997 invoked from network); 3 Jan 2003 11:45:21 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 3 Jan 2003 11:45:21 -0000 Received: from [128.130.111.39] (acrux [128.130.111.39]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h03Bj6B5015414 for ; Fri, 3 Jan 2003 12:45:06 +0100 (CET) Date: Fri, 3 Jan 2003 12:45:08 +0100 (CET) From: Gerald Pfeifer To: gcc-patches@gcc.gnu.org Subject: PATCH: mirrors.html Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Update ftp1.sinica.edu.tw. Gerald Index: mirrors.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/mirrors.html,v retrieving revision 1.132 diff -u -3 -p -r1.132 mirrors.html --- mirrors.html 29 Oct 2002 12:27:27 -0000 1.132 +++ mirrors.html 3 Jan 2003 11:44:08 -0000 @@ -50,7 +50,7 @@ sites.

  • Poland (Warsaw): sunsite.icm.edu.pl, thanks to sunsite at icm dot edu dot pl
  • Russia (Moscow, no snapshots): linux.ihep.su
  • South Africa: ftp.sun.ac.za
  • -
  • Taiwan: ftp1.sinica.edu.tw
  • +
  • Taiwan: ftp1.sinica.edu.tw
  • Taiwan: ftp.nctu.edu.tw, thanks to ftpadm at ftp dot nctu dot edu dot tw
  • UK: ftp.mirror.ac.uk, thanks to mirror at mirror dot ac dot uk
  • UK: sunsite.doc.ic.ac.uk
  • From gcc-patches-return-74944-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 11:47:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31844 invoked by alias); 3 Jan 2003 11:47:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31832 invoked from network); 3 Jan 2003 11:47:24 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 3 Jan 2003 11:47:24 -0000 Received: from [128.130.111.39] (acrux [128.130.111.39]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h03Bl5B5015467; Fri, 3 Jan 2003 12:47:05 +0100 (CET) Date: Fri, 3 Jan 2003 12:47:07 +0100 (CET) From: Gerald Pfeifer To: gcc-patches@gcc.gnu.org cc: Volker Reichelt , Neil Booth Subject: PATCH: gnats.hml In-Reply-To: <200301022354.AAA94256@numa6.igpm.rwth-aachen.de> Message-ID: References: <200301022354.AAA94256@numa6.igpm.rwth-aachen.de> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Fix typo. (Spotted by Volker.) Gerald Index: gnats.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gnats.html,v retrieving revision 1.20 diff -u -3 -p -r1.20 gnats.html --- gnats.html 2 Jan 2003 05:24:10 -0000 1.20 +++ gnats.html 3 Jan 2003 11:45:37 -0000 @@ -86,7 +86,7 @@ does not foo", "objc crashes when doing
    c
    A problem with the C compiler front end.
    debug
    -
    A problem with gererating debugging information.
    +
    A problem with generating debugging information.
    driver
    A problem with a compiler driver, namely gcc, g++, g77, gcj or From gcc-patches-return-74945-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 12:51:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28210 invoked by alias); 3 Jan 2003 12:51:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28195 invoked from network); 3 Jan 2003 12:51:08 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 3 Jan 2003 12:51:08 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03Couk11340 for ; Fri, 3 Jan 2003 07:50:56 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18URGW-0006mZ-00 for ; Fri, 03 Jan 2003 07:49:32 -0500 Date: Fri, 3 Jan 2003 07:49:32 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/3816 Message-ID: <20030103124932.GA26072@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/parse/namespace3.C: New test. Index: g++.dg/parse/namespace3.C =================================================================== RCS file: g++.dg/parse/namespace3.C diff -N g++.dg/parse/namespace3.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/namespace3.C 3 Jan 2003 12:49:52 -0000 @@ -0,0 +1,12 @@ +/* PR c+/3816 */ +/* { dg-do compile } */ +namespace A {}; + +namespace OtherNamespace { + + typedef struct { + int member; + } A; // used to conflict with A namespace + +}; // end of namespace + From gcc-patches-return-74946-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 14:28:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13681 invoked by alias); 3 Jan 2003 14:28:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13672 invoked from network); 3 Jan 2003 14:28:31 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 3 Jan 2003 14:28:31 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id E82FA4DE18; Fri, 3 Jan 2003 15:28:20 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Fri, 3 Jan 2003 15:28:22 +0100 Date: Fri, 3 Jan 2003 15:28:22 +0100 From: Jan Hubicka To: gcc-patches@gcc.gnu.org, rth@cygnus.com Subject: Fix SSE attributes Message-ID: <20030103142822.GB4000@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, this patch creates new type for SSE comi instruction that behaves very differently from SSE cmp instructions. It also fixed decoding attributes for SSE conversions that behaves very magically on Athlon. There is no change in produced code, I will send patch for scheduler decscription to use these later once it is tuned properly. Bootstrapped/regstedted mainline, OK? Honza Fri Jan 3 15:23:55 CET 2003 Jan Hubicka * athlon.md (athlon_ssecmp*): Handle ssecomi as well. * i386.md (type attribute): Add ssecomi. (unit, memory, prefix attributes): Handle ssecomi. (cvt?2? patterns): Fix athlon_decode attribute (comi patterns): Set attribute to ssecomi. Index: athlon.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/athlon.md,v retrieving revision 1.1.14.6 diff -c -3 -p -r1.1.14.6 athlon.md *** athlon.md 2 Jan 2003 19:52:13 -0000 1.1.14.6 --- athlon.md 3 Jan 2003 14:23:07 -0000 *************** *** 565,596 **** "athlon-vector,athlon-fadd") (define_insn_reservation "athlon_ssecmp_load" 4 (and (eq_attr "cpu" "athlon,k8") ! (and (eq_attr "type" "ssecmp") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "load")))) "athlon-direct,athlon-load,athlon-fadd") (define_insn_reservation "athlon_ssecmp" 2 (and (eq_attr "cpu" "athlon,k8") ! (and (eq_attr "type" "ssecmp") (eq_attr "mode" "SF,DF"))) "athlon-direct,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector_load" 6 (and (eq_attr "cpu" "athlon") ! (and (eq_attr "type" "ssecmp") (eq_attr "memory" "load"))) "athlon-vector,athlon-load,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector_load_k8" 5 (and (eq_attr "cpu" "k8") ! (and (eq_attr "type" "ssecmp") (eq_attr "memory" "load"))) "athlon-double,athlon-load,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector" 3 (and (eq_attr "cpu" "athlon") ! (eq_attr "type" "ssecmp")) "athlon-vector,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector_k8" 3 (and (eq_attr "cpu" "k8") ! (eq_attr "type" "ssecmp")) "athlon-double,athlon-fadd") (define_insn_reservation "athlon_sseadd_load" 7 (and (eq_attr "cpu" "athlon") --- 565,596 ---- "athlon-vector,athlon-fadd") (define_insn_reservation "athlon_ssecmp_load" 4 (and (eq_attr "cpu" "athlon,k8") ! (and (eq_attr "type" "ssecmp,ssecomi") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "load")))) "athlon-direct,athlon-load,athlon-fadd") (define_insn_reservation "athlon_ssecmp" 2 (and (eq_attr "cpu" "athlon,k8") ! (and (eq_attr "type" "ssecmp,ssecomi") (eq_attr "mode" "SF,DF"))) "athlon-direct,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector_load" 6 (and (eq_attr "cpu" "athlon") ! (and (eq_attr "type" "ssecmp,ssecomi") (eq_attr "memory" "load"))) "athlon-vector,athlon-load,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector_load_k8" 5 (and (eq_attr "cpu" "k8") ! (and (eq_attr "type" "ssecmp,ssecomi") (eq_attr "memory" "load"))) "athlon-double,athlon-load,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector" 3 (and (eq_attr "cpu" "athlon") ! (eq_attr "type" "ssecmp,ssecomi")) "athlon-vector,athlon-fadd") (define_insn_reservation "athlon_ssecmpvector_k8" 3 (and (eq_attr "cpu" "k8") ! (eq_attr "type" "ssecmp,ssecomi")) "athlon-double,athlon-fadd") (define_insn_reservation "athlon_sseadd_load" 7 (and (eq_attr "cpu" "athlon") Index: i386.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.md,v retrieving revision 1.380.2.14 diff -c -3 -p -r1.380.2.14 i386.md *** i386.md 2 Jan 2003 19:49:06 -0000 1.380.2.14 --- i386.md 3 Jan 2003 14:23:29 -0000 *************** *** 146,152 **** str,cld, fmov,fop,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,fistp, sselog,sseiadd,sseishft,sseimul, ! sse,ssemov,sseadd,ssemul,ssecmp,ssecomi,ssecvt,ssediv, mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft,initpipe" (const_string "other")) --- 146,152 ---- str,cld, fmov,fop,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,fistp, sselog,sseiadd,sseishft,sseimul, ! sse,ssemov,sseadd,ssemul,ssecmp,ssecomi,ssecvt,sseicvt,ssediv, mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft,initpipe" (const_string "other")) *************** *** 160,166 **** (cond [(eq_attr "type" "fmov,fop,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,fistp") (const_string "i387") (eq_attr "type" "sselog,sseiadd,sseishft,sseimul, ! sse,ssemov,sseadd,ssemul,ssecmp,ssecomi,ssecvt,ssediv") (const_string "sse") (eq_attr "type" "mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft") (const_string "mmx") --- 160,166 ---- (cond [(eq_attr "type" "fmov,fop,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,fistp") (const_string "i387") (eq_attr "type" "sselog,sseiadd,sseishft,sseimul, ! sse,ssemov,sseadd,ssemul,ssecmp,ssecomi,ssecvt,sseicvt,ssediv") (const_string "sse") (eq_attr "type" "mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft") (const_string "mmx") *************** *** 227,233 **** (eq_attr "type" "imovx,setcc,icmov, sselog,sseiadd,sseishft,sseimul, ! sse,ssemov,sseadd,ssemul,ssecmp,ssecomi,ssecvt,ssediv, mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft") (const_int 1) (const_int 0))) --- 227,233 ---- (eq_attr "type" "imovx,setcc,icmov, sselog,sseiadd,sseishft,sseimul, ! sse,ssemov,sseadd,ssemul,ssecmp,ssecomi,ssecvt,sseicvt,ssediv, mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft") (const_int 1) (const_int 0))) *************** *** 349,355 **** "!alu1,negnot, imov,imovx,icmp,test, fmov,fcmp,fsgn, ! sse,ssemov,ssecmp,ssecomi,ssecvt, mmx,mmxmov,mmxcmp,mmxcvt") (match_operand 2 "memory_operand" "")) (const_string "load") --- 349,355 ---- "!alu1,negnot, imov,imovx,icmp,test, fmov,fcmp,fsgn, ! sse,ssemov,ssecmp,ssecomi,ssecvt,sseicvt, mmx,mmxmov,mmxcmp,mmxcvt") (match_operand 2 "memory_operand" "")) (const_string "load") *************** *** 3844,3860 **** (set_attr "mode" "SF,SF,SF,SF,DF")]) (define_insn "*truncdfsf2_2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=Y,!m") (float_truncate:SF ! (match_operand:DF 1 "nonimmediate_operand" "mY,f#Y")))] "TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: - return "cvtsd2ss\t{%1, %0|%0, %1}"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) return "fstp%z0\t%y0"; else --- 3844,3861 ---- (set_attr "mode" "SF,SF,SF,SF,DF")]) (define_insn "*truncdfsf2_2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=Y,Y,!m") (float_truncate:SF ! (match_operand:DF 1 "nonimmediate_operand" "Y,mY,f#Y")))] "TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: case 1: + return "cvtsd2ss\t{%1, %0|%0, %1}"; + case 2: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) return "fstp%z0\t%y0"; else *************** *** 3863,3870 **** abort (); } } ! [(set_attr "type" "ssecvt,fmov") ! (set_attr "mode" "DF,SF")]) (define_insn "*truncdfsf2_2_nooverlap" [(set (match_operand:SF 0 "nonimmediate_operand" "=&Y,!m") --- 3864,3872 ---- abort (); } } ! [(set_attr "type" "ssecvt,ssecvt,fmov") ! (set_attr "athlon_decode" "vector,double,*") ! (set_attr "mode" "DF,DF,SF")]) (define_insn "*truncdfsf2_2_nooverlap" [(set (match_operand:SF 0 "nonimmediate_operand" "=&Y,!m") *************** *** 3904,3915 **** (set_attr "mode" "SF")]) (define_insn "truncdfsf2_sse_only" ! [(set (match_operand:SF 0 "register_operand" "=Y") (float_truncate:SF ! (match_operand:DF 1 "nonimmediate_operand" "mY")))] "!TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS" "cvtsd2ss\t{%1, %0|%0, %1}" [(set_attr "type" "ssecvt") (set_attr "mode" "DF")]) (define_insn "*truncdfsf2_sse_only_nooverlap" --- 3906,3918 ---- (set_attr "mode" "SF")]) (define_insn "truncdfsf2_sse_only" ! [(set (match_operand:SF 0 "register_operand" "=Y,Y") (float_truncate:SF ! (match_operand:DF 1 "nonimmediate_operand" "Y,mY")))] "!TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS" "cvtsd2ss\t{%1, %0|%0, %1}" [(set_attr "type" "ssecvt") + (set_attr "athlon_decode" "vector,double") (set_attr "mode" "DF")]) (define_insn "*truncdfsf2_sse_only_nooverlap" *************** *** 4371,4388 **** ;; When SSE available, it is always faster to use it! (define_insn "fix_truncsfdi_sse" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (fix:DI (match_operand:SF 1 "nonimmediate_operand" "xm")))] "TARGET_64BIT && TARGET_SSE" "cvttss2si{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt")]) (define_insn "fix_truncdfdi_sse" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (fix:DI (match_operand:DF 1 "nonimmediate_operand" "Ym")))] "TARGET_64BIT && TARGET_SSE2" "cvttsd2si{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt")]) ;; Signed conversion to SImode. --- 4374,4393 ---- ;; When SSE available, it is always faster to use it! (define_insn "fix_truncsfdi_sse" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (fix:DI (match_operand:SF 1 "nonimmediate_operand" "x,xm")))] "TARGET_64BIT && TARGET_SSE" "cvttss2si{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") ! (set_attr "athlon_decode" "double,vector")]) (define_insn "fix_truncdfdi_sse" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (fix:DI (match_operand:DF 1 "nonimmediate_operand" "Y,Ym")))] "TARGET_64BIT && TARGET_SSE2" "cvttsd2si{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt,sseicvt") ! (set_attr "athlon_decode" "double,vector")]) ;; Signed conversion to SImode. *************** *** 4479,4496 **** ;; When SSE available, it is always faster to use it! (define_insn "fix_truncsfsi_sse" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (fix:SI (match_operand:SF 1 "nonimmediate_operand" "xm")))] "TARGET_SSE" "cvttss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt")]) (define_insn "fix_truncdfsi_sse" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (fix:SI (match_operand:DF 1 "nonimmediate_operand" "Ym")))] "TARGET_SSE2" "cvttsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt")]) (define_split [(set (match_operand:SI 0 "register_operand" "") --- 4484,4503 ---- ;; When SSE available, it is always faster to use it! (define_insn "fix_truncsfsi_sse" ! [(set (match_operand:SI 0 "register_operand" "=r,r") ! (fix:SI (match_operand:SF 1 "nonimmediate_operand" "x,xm")))] "TARGET_SSE" "cvttss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") ! (set_attr "athlon_decode" "double,vector")]) (define_insn "fix_truncdfsi_sse" ! [(set (match_operand:SI 0 "register_operand" "=r,r") ! (fix:SI (match_operand:DF 1 "nonimmediate_operand" "Y,Ym")))] "TARGET_SSE2" "cvttsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") ! (set_attr "athlon_decode" "double,vector")]) (define_split [(set (match_operand:SI 0 "register_operand" "") *************** *** 4663,4686 **** "") (define_insn "*floatsisf2_i387" ! [(set (match_operand:SF 0 "register_operand" "=f#x,?f#x,x#f") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "m,r,mr")))] "TARGET_80387 && (!TARGET_SSE || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # cvtsi2ss\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,ssecvt") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) (define_insn "*floatsisf2_sse" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "mr")))] "TARGET_SSE" "cvtsi2ss\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) ; Avoid possible reformating penalty on the destination by first --- 4670,4696 ---- "") (define_insn "*floatsisf2_i387" ! [(set (match_operand:SF 0 "register_operand" "=f#x,?f#x,x#f,x#f") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "m,r,r,mr")))] "TARGET_80387 && (!TARGET_SSE || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # + cvtsi2ss\t{%1, %0|%0, %1} cvtsi2ss\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,sseicvt,sseicvt") (set_attr "mode" "SF") + (set_attr "athlon_decode" "*,*,vector,double") (set_attr "fp_int_src" "true")]) (define_insn "*floatsisf2_sse" ! [(set (match_operand:SF 0 "register_operand" "=x,x") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "r,mr")))] "TARGET_SSE" "cvtsi2ss\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") (set_attr "mode" "SF") + (set_attr "athlon_decode" "vector,double") (set_attr "fp_int_src" "true")]) ; Avoid possible reformating penalty on the destination by first *************** *** 4717,4740 **** (set_attr "fp_int_src" "true")]) (define_insn "*floatdisf2_i387" ! [(set (match_operand:SF 0 "register_operand" "=f#x,?f#x,x#f") ! (float:SF (match_operand:DI 1 "nonimmediate_operand" "m,r,mr")))] "TARGET_64BIT && TARGET_80387 && (!TARGET_SSE || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # cvtsi2ss{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,ssecvt") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) (define_insn "*floatdisf2_sse" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (float:SF (match_operand:DI 1 "nonimmediate_operand" "mr")))] "TARGET_64BIT && TARGET_SSE" "cvtsi2ss{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) ; Avoid possible reformating penalty on the destination by first --- 4727,4753 ---- (set_attr "fp_int_src" "true")]) (define_insn "*floatdisf2_i387" ! [(set (match_operand:SF 0 "register_operand" "=f#x,?f#x,x#f,x#f") ! (float:SF (match_operand:DI 1 "nonimmediate_operand" "m,r,r,mr")))] "TARGET_64BIT && TARGET_80387 && (!TARGET_SSE || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # + cvtsi2ss{q}\t{%1, %0|%0, %1} cvtsi2ss{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,sseicvt,sseicvt") (set_attr "mode" "SF") + (set_attr "athlon_decode" "*,*,vector,double") (set_attr "fp_int_src" "true")]) (define_insn "*floatdisf2_sse" ! [(set (match_operand:SF 0 "register_operand" "=x,x") ! (float:SF (match_operand:DI 1 "nonimmediate_operand" "r,mr")))] "TARGET_64BIT && TARGET_SSE" "cvtsi2ss{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") (set_attr "mode" "SF") + (set_attr "athlon_decode" "vector,double") (set_attr "fp_int_src" "true")]) ; Avoid possible reformating penalty on the destination by first *************** *** 4771,4794 **** "") (define_insn "*floatsidf2_i387" ! [(set (match_operand:DF 0 "register_operand" "=f#Y,?f#Y,Y#f") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "m,r,mr")))] "TARGET_80387 && (!TARGET_SSE2 || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # cvtsi2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,ssecvt") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) (define_insn "*floatsidf2_sse" ! [(set (match_operand:DF 0 "register_operand" "=Y") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "mr")))] "TARGET_SSE2" "cvtsi2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) (define_expand "floatdidf2" --- 4784,4810 ---- "") (define_insn "*floatsidf2_i387" ! [(set (match_operand:DF 0 "register_operand" "=f#Y,?f#Y,Y#f,Y#f") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "m,r,r,mr")))] "TARGET_80387 && (!TARGET_SSE2 || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # + cvtsi2sd\t{%1, %0|%0, %1} cvtsi2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,sseicvt,sseicvt") (set_attr "mode" "DF") + (set_attr "athlon_decode" "*,*,double,direct") (set_attr "fp_int_src" "true")]) (define_insn "*floatsidf2_sse" ! [(set (match_operand:DF 0 "register_operand" "=Y,Y") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "r,mr")))] "TARGET_SSE2" "cvtsi2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") (set_attr "mode" "DF") + (set_attr "athlon_decode" "double,direct") (set_attr "fp_int_src" "true")]) (define_expand "floatdidf2" *************** *** 4809,4832 **** (set_attr "fp_int_src" "true")]) (define_insn "*floatdidf2_i387" ! [(set (match_operand:DF 0 "register_operand" "=f#Y,?f#Y,Y#f") ! (float:DF (match_operand:DI 1 "nonimmediate_operand" "m,r,mr")))] "TARGET_64BIT && TARGET_80387 && (!TARGET_SSE2 || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # cvtsi2sd{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,ssecvt") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) (define_insn "*floatdidf2_sse" ! [(set (match_operand:DF 0 "register_operand" "=Y") ! (float:DF (match_operand:DI 1 "nonimmediate_operand" "mr")))] "TARGET_SSE2" "cvtsi2sd{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) (define_insn "floathixf2" --- 4825,4851 ---- (set_attr "fp_int_src" "true")]) (define_insn "*floatdidf2_i387" ! [(set (match_operand:DF 0 "register_operand" "=f#Y,?f#Y,Y#f,Y#f") ! (float:DF (match_operand:DI 1 "nonimmediate_operand" "m,r,r,mr")))] "TARGET_64BIT && TARGET_80387 && (!TARGET_SSE2 || TARGET_MIX_SSE_I387)" "@ fild%z1\t%1 # + cvtsi2sd{q}\t{%1, %0|%0, %1} cvtsi2sd{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,sseicvt,sseicvt") (set_attr "mode" "DF") + (set_attr "athlon_decode" "*,*,double,direct") (set_attr "fp_int_src" "true")]) (define_insn "*floatdidf2_sse" ! [(set (match_operand:DF 0 "register_operand" "=Y,Y") ! (float:DF (match_operand:DI 1 "nonimmediate_operand" "r,mr")))] "TARGET_SSE2" "cvtsi2sd{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") (set_attr "mode" "DF") + (set_attr "athlon_decode" "double,direct") (set_attr "fp_int_src" "true")]) (define_insn "floathixf2" *************** *** 19812,19860 **** (set_attr "mode" "SF")]) (define_insn "cvtsi2ss" ! [(set (match_operand:V4SF 0 "register_operand" "=x") (vec_merge:V4SF ! (match_operand:V4SF 1 "register_operand" "0") (vec_duplicate:V4SF ! (float:SF (match_operand:SI 2 "nonimmediate_operand" "rm"))) (const_int 14)))] "TARGET_SSE" "cvtsi2ss\t{%2, %0|%0, %2}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "SF")]) (define_insn "cvtsi2ssq" ! [(set (match_operand:V4SF 0 "register_operand" "=x") (vec_merge:V4SF ! (match_operand:V4SF 1 "register_operand" "0") (vec_duplicate:V4SF ! (float:SF (match_operand:DI 2 "nonimmediate_operand" "rm"))) (const_int 14)))] "TARGET_SSE && TARGET_64BIT" "cvtsi2ssq\t{%2, %0|%0, %2}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "SF")]) (define_insn "cvtss2si" ! [(set (match_operand:SI 0 "register_operand" "=r") (vec_select:SI ! (fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "xm")) (parallel [(const_int 0)])))] "TARGET_SSE" "cvtss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "SF")]) (define_insn "cvttss2si" ! [(set (match_operand:SI 0 "register_operand" "=r") (vec_select:SI ! (unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] UNSPEC_FIX) (parallel [(const_int 0)])))] "TARGET_SSE" "cvttss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") ! (set_attr "mode" "SF")]) ;; MMX insns --- 19831,19883 ---- (set_attr "mode" "SF")]) (define_insn "cvtsi2ss" ! [(set (match_operand:V4SF 0 "register_operand" "=x,x") (vec_merge:V4SF ! (match_operand:V4SF 1 "register_operand" "0,0") (vec_duplicate:V4SF ! (float:SF (match_operand:SI 2 "nonimmediate_operand" "r,rm"))) (const_int 14)))] "TARGET_SSE" "cvtsi2ss\t{%2, %0|%0, %2}" ! [(set_attr "type" "sseicvt") ! (set_attr "athlon_decode" "vector,double") (set_attr "mode" "SF")]) (define_insn "cvtsi2ssq" ! [(set (match_operand:V4SF 0 "register_operand" "=x,x") (vec_merge:V4SF ! (match_operand:V4SF 1 "register_operand" "0,0") (vec_duplicate:V4SF ! (float:SF (match_operand:DI 2 "nonimmediate_operand" "r,rm"))) (const_int 14)))] "TARGET_SSE && TARGET_64BIT" "cvtsi2ssq\t{%2, %0|%0, %2}" ! [(set_attr "type" "sseicvt") ! (set_attr "athlon_decode" "vector,double") (set_attr "mode" "SF")]) (define_insn "cvtss2si" ! [(set (match_operand:SI 0 "register_operand" "=r,r") (vec_select:SI ! (fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "x,m")) (parallel [(const_int 0)])))] "TARGET_SSE" "cvtss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") ! (set_attr "athlon_decode" "double,vector") (set_attr "mode" "SF")]) (define_insn "cvttss2si" ! [(set (match_operand:SI 0 "register_operand" "=r,r") (vec_select:SI ! (unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "x,xm")] UNSPEC_FIX) (parallel [(const_int 0)])))] "TARGET_SSE" "cvttss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") ! (set_attr "mode" "SF") ! (set_attr "athlon_decode" "double,vector")]) ;; MMX insns *************** *** 21431,21472 **** (parallel [(const_int 0)]))))] "TARGET_SSE2" "cvtsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") (set_attr "mode" "SI")]) (define_insn "cvttsd2si" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (unspec:SI [(vec_select:DF (match_operand:V2DF 1 "register_operand" "xm") (parallel [(const_int 0)]))] UNSPEC_FIX))] "TARGET_SSE2" "cvttsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "ssecvt") ! (set_attr "mode" "SI")]) (define_insn "cvtsi2sd" ! [(set (match_operand:V2DF 0 "register_operand" "=x") ! (vec_merge:V2DF (match_operand:V2DF 1 "register_operand" "0") (vec_duplicate:V2DF (float:DF ! (match_operand:SI 2 "nonimmediate_operand" "rm"))) (const_int 2)))] "TARGET_SSE2" "cvtsi2sd\t{%2, %0|%0, %2}" ! [(set_attr "type" "ssecvt") ! (set_attr "mode" "DF")]) ;; Conversions between SF and DF (define_insn "cvtsd2ss" ! [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (match_operand:V4SF 1 "register_operand" "0") (vec_duplicate:V4SF (float_truncate:V2SF ! (match_operand:V2DF 2 "nonimmediate_operand" "xm"))) (const_int 14)))] "TARGET_SSE2" "cvtsd2ss\t{%2, %0|%0, %2}" [(set_attr "type" "ssecvt") (set_attr "mode" "SF")]) (define_insn "cvtss2sd" --- 21454,21498 ---- (parallel [(const_int 0)]))))] "TARGET_SSE2" "cvtsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") (set_attr "mode" "SI")]) (define_insn "cvttsd2si" ! [(set (match_operand:SI 0 "register_operand" "=r,r") ! (unspec:SI [(vec_select:DF (match_operand:V2DF 1 "register_operand" "x,xm") (parallel [(const_int 0)]))] UNSPEC_FIX))] "TARGET_SSE2" "cvttsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sseicvt") ! (set_attr "mode" "SI") ! (set_attr "athlon_decode" "double,vector")]) (define_insn "cvtsi2sd" ! [(set (match_operand:V2DF 0 "register_operand" "=x,x") ! (vec_merge:V2DF (match_operand:V2DF 1 "register_operand" "0,0") (vec_duplicate:V2DF (float:DF ! (match_operand:SI 2 "nonimmediate_operand" "r,rm"))) (const_int 2)))] "TARGET_SSE2" "cvtsi2sd\t{%2, %0|%0, %2}" ! [(set_attr "type" "sseicvt") ! (set_attr "mode" "DF") ! (set_attr "athlon_decode" "double,direct")]) ;; Conversions between SF and DF (define_insn "cvtsd2ss" ! [(set (match_operand:V4SF 0 "register_operand" "=x,x") ! (vec_merge:V4SF (match_operand:V4SF 1 "register_operand" "0,0") (vec_duplicate:V4SF (float_truncate:V2SF ! (match_operand:V2DF 2 "nonimmediate_operand" "x,xm"))) (const_int 14)))] "TARGET_SSE2" "cvtsd2ss\t{%2, %0|%0, %2}" [(set_attr "type" "ssecvt") + (set_attr "athlon_decode" "vector,double") (set_attr "mode" "SF")]) (define_insn "cvtss2sd" From gcc-patches-return-74947-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 15:29:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2350 invoked by alias); 3 Jan 2003 15:29:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2337 invoked from network); 3 Jan 2003 15:29:23 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 3 Jan 2003 15:29:23 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03FTAF06422 for ; Fri, 3 Jan 2003 10:29:10 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UTjf-0003qO-00 for ; Fri, 03 Jan 2003 10:27:47 -0500 Date: Fri, 3 Jan 2003 10:27:47 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/4633 Message-ID: <20030103152747.GA14777@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/template/nested1.C: New test. Index: g++.dg/template/nested1.C =================================================================== RCS file: g++.dg/template/nested1.C diff -N g++.dg/template/nested1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/template/nested1.C 3 Jan 2003 15:28:01 -0000 @@ -0,0 +1,15 @@ +/* PR c++/4633 */ +/* { dg-do compile } */ + +// The 'class X' inside the template used to escape (somehow), +// so that the typedef claimed that it was redefining X. + +template struct S ; + +template <> struct S +{ + template struct R; + template struct R { }; + + typedef int X; +}; From gcc-patches-return-74948-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 15:50:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12001 invoked by alias); 3 Jan 2003 15:50:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11979 invoked from network); 3 Jan 2003 15:50:51 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 3 Jan 2003 15:50:51 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03Fock27834 for ; Fri, 3 Jan 2003 10:50:39 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UU4Q-0006ye-00 for ; Fri, 03 Jan 2003 10:49:14 -0500 Date: Fri, 3 Jan 2003 10:49:14 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/4652 Message-ID: <20030103154914.GA26814@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/parse/namespace4.C: New test. Index: g++.dg/parse/namespace4.C =================================================================== RCS file: g++.dg/parse/namespace4.C diff -N g++.dg/parse/namespace4.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/namespace4.C 3 Jan 2003 15:49:42 -0000 @@ -0,0 +1,18 @@ +/* PR c++/4652 */ +/* { dg-do compile } */ +/* Another conflict between namespace IDs and other things. */ + +namespace A { }; + +class B { + + struct { + int x; + } A; + +}; + +int main() { + B b; + return 0; +} From gcc-patches-return-74949-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 16:08:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21374 invoked by alias); 3 Jan 2003 16:08:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21309 invoked from network); 3 Jan 2003 16:08:15 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 3 Jan 2003 16:08:15 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03G82F02681 for ; Fri, 3 Jan 2003 11:08:02 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UUL6-00020y-00 for ; Fri, 03 Jan 2003 11:06:28 -0500 Date: Fri, 3 Jan 2003 11:06:28 -0500 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR c++/4754 Message-ID: <20030103160628.GA2722@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied. * g++.dg/parse/extern-C-1.C: New test. Index: g++.dg/parse/extern-C-1.C =================================================================== RCS file: g++.dg/parse/extern-C-1.C diff -N g++.dg/parse/extern-C-1.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ g++.dg/parse/extern-C-1.C 3 Jan 2003 16:06:51 -0000 @@ -0,0 +1,13 @@ +/* PR c++/4754 */ +/* { dg-do compile } */ +// GCC 3.2 got very confused by the nested extern "C" blocks, and thought +// there was a storage class specifier on 'int i'. + +extern "C" +{ + extern "C" struct Test + { + int i; + }; +} + From gcc-patches-return-74950-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 16:45:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7346 invoked by alias); 3 Jan 2003 16:45:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7319 invoked from network); 3 Jan 2003 16:45:16 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 3 Jan 2003 16:45:16 -0000 Received: from localhost (IDENT:1Gy+DIZ9VctKwS2d3Swaomh928MsgmM3@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h03Gj4lU032467 for ; Fri, 3 Jan 2003 11:45:04 -0500 Date: Fri, 03 Jan 2003 11:45:01 -0500 (EST) Message-Id: <20030103.114501.35028036.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300: Clean up global variable use. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.9, Required: 5 X-Spam-Tests: DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -3.9 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to clean up global variable use. Currently, prologue and epilogue functions use three global variables, interrupt_handler, os_task, and monitor. These are basically cache of the results of the functions that return whether a certain attribute is attached to the current function being compiled. These are not only dirty but also are obstacles when implementing RTL-based prologue/epilogue. The patch removes these global variables and replace the reference to the variable with corresponding functions. Tested on h8300 port. Committed. Kazu Hirata 2003-01-03 Kazu Hirata * config/h8300/h8300-protos.h: Add a prototype for h8300_current_function_interrupt_function_p. * config/h8300/h8300.c (interrupt_handler): Remove. (os_task): Likewise. (monitor): Likewise. (pragma_interrupt): New. (WORD_REG_USED): Use h8300_current_function_interrupt_function_p. (dosize): Likewise. (h8300_output_function_prologue): Likewise. Do not set interrupt_handler, os_task, monitor. (h8300_output_function_prologue): Use h8300_current_function_interrupt_function_p. Do not set interrupt_handler, os_task, monitor. (h8300_current_function_interrupt_function_p): New. (h8300_pr_interrupt): Set pragma_interrupt. (h8300_insert_attributes): Reset pragma_interrupt. Index: h8300-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300-protos.h,v retrieving revision 1.44 diff -u -r1.44 h8300-protos.h --- h8300-protos.h 2 Jan 2003 14:59:30 -0000 1.44 +++ h8300-protos.h 3 Jan 2003 15:59:58 -0000 @@ -90,6 +90,7 @@ #endif /* TREE_CODE */ extern void h8300_init_once PARAMS ((void)); +extern int h8300_current_function_interrupt_function_p PARAMS ((void)); extern void asm_file_start PARAMS ((FILE *)); extern void asm_file_end PARAMS ((FILE *)); extern int h8300_initial_elimination_offset PARAMS ((int, int)); Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.194 diff -u -r1.194 h8300.c --- h8300.c 2 Jan 2003 14:59:30 -0000 1.194 +++ h8300.c 3 Jan 2003 15:59:59 -0000 @@ -74,17 +74,8 @@ /* CPU_TYPE, says what cpu we're compiling for. */ int cpu_type; -/* True if the current function is an interrupt handler - (either via #pragma or an attribute specification). */ -static int interrupt_handler; - -/* True if the current function is an OS Task - (via an attribute specification). */ -static int os_task; - -/* True if the current function is a monitor - (via an attribute specification). */ -static int monitor; +/* True if a #pragma interrupt has been seen for the current function. */ +static int pragma_interrupt; /* True if a #pragma saveall has been seen for the current function. */ static int pragma_saveall; @@ -383,10 +374,11 @@ /* Save the frame pointer if it was used. */ \ || (regno == FRAME_POINTER_REGNUM && regs_ever_live[regno]) \ /* Save any register used in an interrupt handler. */ \ - || (interrupt_handler && regs_ever_live[regno]) \ + || (h8300_current_function_interrupt_function_p () \ + && regs_ever_live[regno]) \ /* Save call clobbered registers in non-leaf interrupt \ handlers. */ \ - || (interrupt_handler \ + || (h8300_current_function_interrupt_function_p () \ && call_used_regs[regno] \ && !current_function_is_leaf))) @@ -408,7 +400,7 @@ subs since this shouldn't happen often. */ if ((TARGET_H8300 && size <= 4) || ((TARGET_H8300H || TARGET_H8300S) && size <= 8) - || (TARGET_H8300 && interrupt_handler) + || (TARGET_H8300 && h8300_current_function_interrupt_function_p ()) || (TARGET_H8300 && current_function_needs_context && sign < 0)) { @@ -530,17 +522,11 @@ int saved_regs; int n_regs; - /* Note a function with the interrupt attribute and set interrupt_handler - accordingly. */ - if (h8300_interrupt_function_p (current_function_decl)) - interrupt_handler = 1; - /* If the current function has the OS_Task attribute set, then we have a naked prologue. */ if (h8300_os_task_function_p (current_function_decl)) { fprintf (file, ";OS_Task prologue\n"); - os_task = 1; return; } @@ -550,8 +536,6 @@ like interrupt functions, except the prologue must mask interrupts. */ fprintf (file, ";monitor prologue\n"); - interrupt_handler = 1; - monitor = 1; if (TARGET_H8300) { fprintf (file, "\tsubs\t#2,sp\n"); @@ -657,7 +641,7 @@ int saved_regs; int n_regs; - if (os_task) + if (h8300_os_task_function_p (current_function_decl)) { /* OS_Task epilogues are nearly naked -- they just have an rts instruction. */ @@ -668,7 +652,7 @@ /* Monitor epilogues are the same as interrupt function epilogues. Just make a note that we're in a monitor epilogue. */ - if (monitor) + if (h8300_monitor_function_p (current_function_decl)) fprintf (file, ";monitor epilogue\n"); /* If the last insn was a BARRIER, we don't have to write any code. */ @@ -733,18 +717,25 @@ if (frame_pointer_needed) pop (file, FRAME_POINTER_REGNUM); - if (interrupt_handler) + if (h8300_current_function_interrupt_function_p ()) fprintf (file, "\trte\n"); else fprintf (file, "\trts\n"); out: - interrupt_handler = 0; - os_task = 0; - monitor = 0; pragma_saveall = 0; } +/* Return nonzero if the current function is an interrupt + function. */ + +int +h8300_current_function_interrupt_function_p () +{ + return (h8300_interrupt_function_p (current_function_decl) + || h8300_monitor_function_p (current_function_decl)); +} + /* Output assembly code for the start of the file. */ void @@ -1078,7 +1069,7 @@ h8300_pr_interrupt (pfile) struct cpp_reader *pfile ATTRIBUTE_UNUSED; { - interrupt_handler = 1; + pragma_interrupt = 1; } void @@ -3878,9 +3869,11 @@ tree node; tree *attributes; { - if (!interrupt_handler + if (!pragma_interrupt || TREE_CODE (node) != FUNCTION_DECL) return; + + pragma_interrupt = 0; /* Add an 'interrupt_handler' attribute. */ *attributes = tree_cons (get_identifier ("interrupt_handler"), From gcc-patches-return-74951-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:22:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29640 invoked by alias); 3 Jan 2003 17:22:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29613 invoked from network); 3 Jan 2003 17:22:43 -0000 Received: from unknown (HELO garibaldi.home) (62.30.75.143) by 209.249.29.67 with SMTP; 3 Jan 2003 17:22:43 -0000 Received: from blueyonder.co.uk (localhost.localdomain [127.0.0.1]) by garibaldi.home (8.12.5/8.12.5) with ESMTP id h03HMU1p016064; Fri, 3 Jan 2003 17:22:31 GMT Message-ID: <3E15C6D6.6020306@blueyonder.co.uk> Date: Fri, 03 Jan 2003 17:22:30 +0000 From: Nathan Sidwell User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20021003 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org, neroden@twcny.rr.com Subject: [C++ PATCH] Fix PR 45, 3784 Content-Type: multipart/mixed; boundary="------------070706060108000201010805" This is a multi-part message in MIME format. --------------070706060108000201010805 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, I've installed this patch which fixed 45 and 3784. Although a template parm's level and index are sufficient to identify it within a single instantiation, it is not enough across instantiations of non-type template parms. booted & tested on i686-pc-linux-gnu. It will shortly go on the 3.3 branch nathan -- Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC The voices in my head said this was stupid too nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org --------------070706060108000201010805 Content-Type: text/plain; name="3784.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="3784.patch" 2002-12-26 Nathan Sidwell PR c++/45, c++/3784 * tree.c (cp_tree_equal, TEMPLATE_PARM_INDEX): The types must be the same too. Index: cp/tree.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/tree.c,v retrieving revision 1.308 diff -c -3 -p -r1.308 tree.c *** cp/tree.c 16 Dec 2002 18:22:20 -0000 1.308 --- cp/tree.c 26 Dec 2002 18:56:34 -0000 *************** cp_tree_equal (t1, t2) *** 1750,1757 **** return 0; case TEMPLATE_PARM_INDEX: ! return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2) ! && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2); case SIZEOF_EXPR: case ALIGNOF_EXPR: --- 1750,1759 ---- return 0; case TEMPLATE_PARM_INDEX: ! return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2) ! && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2) ! && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)), ! TREE_TYPE (TEMPLATE_PARM_DECL (t2)))); case SIZEOF_EXPR: case ALIGNOF_EXPR: --------------070706060108000201010805 Content-Type: text/plain; name="3784.C" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="3784.C" // { dg-do compile } // Copyright (C) 2002 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 26 Dec 2002 // PR 3784: We were confusing non-type template parms. template class X { }; template void foo1(X); template void foo2(X); int main() { X<2> x; foo2(x); } --------------070706060108000201010805-- From gcc-patches-return-74952-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:22:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29980 invoked by alias); 3 Jan 2003 17:22:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29956 invoked from network); 3 Jan 2003 17:22:55 -0000 Received: from unknown (HELO garibaldi.home) (62.30.75.143) by 209.249.29.67 with SMTP; 3 Jan 2003 17:22:55 -0000 Received: from blueyonder.co.uk (localhost.localdomain [127.0.0.1]) by garibaldi.home (8.12.5/8.12.5) with ESMTP id h03HMg1p016070; Fri, 3 Jan 2003 17:22:42 GMT Message-ID: <3E15C6E2.1020609@blueyonder.co.uk> Date: Fri, 03 Jan 2003 17:22:42 +0000 From: Nathan Sidwell User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20021003 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org, neroden@twcny.rr.com Subject: [C++ PATCH] Fix PR 45, 3784 Content-Type: multipart/mixed; boundary="------------010108040902070805050201" This is a multi-part message in MIME format. --------------010108040902070805050201 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, I've installed this patch which fixed 45 and 3784. Although a template parm's level and index are sufficient to identify it within a single instantiation, it is not enough across instantiations of non-type template parms. booted & tested on i686-pc-linux-gnu. It will shortly go on the 3.3 branch nathan -- Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC The voices in my head said this was stupid too nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org --------------010108040902070805050201 Content-Type: text/plain; name="3784.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="3784.patch" 2002-12-26 Nathan Sidwell PR c++/45, c++/3784 * tree.c (cp_tree_equal, TEMPLATE_PARM_INDEX): The types must be the same too. Index: cp/tree.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/tree.c,v retrieving revision 1.308 diff -c -3 -p -r1.308 tree.c *** cp/tree.c 16 Dec 2002 18:22:20 -0000 1.308 --- cp/tree.c 26 Dec 2002 18:56:34 -0000 *************** cp_tree_equal (t1, t2) *** 1750,1757 **** return 0; case TEMPLATE_PARM_INDEX: ! return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2) ! && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2); case SIZEOF_EXPR: case ALIGNOF_EXPR: --- 1750,1759 ---- return 0; case TEMPLATE_PARM_INDEX: ! return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2) ! && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2) ! && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)), ! TREE_TYPE (TEMPLATE_PARM_DECL (t2)))); case SIZEOF_EXPR: case ALIGNOF_EXPR: --------------010108040902070805050201 Content-Type: text/plain; name="3784.C" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="3784.C" // { dg-do compile } // Copyright (C) 2002 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 26 Dec 2002 // PR 3784: We were confusing non-type template parms. template class X { }; template void foo1(X); template void foo2(X); int main() { X<2> x; foo2(x); } --------------010108040902070805050201-- From gcc-patches-return-74953-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:31:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2336 invoked by alias); 3 Jan 2003 17:31:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2327 invoked from network); 3 Jan 2003 17:31:40 -0000 Received: from unknown (HELO mozart.inet.co.th) (203.150.14.100) by 209.249.29.67 with SMTP; 3 Jan 2003 17:31:40 -0000 Received: from TruPPP0B176.inet.co.th (IDENT:/VUNY/4gPA35/synqjH5VCkmb/29gBrB@TruPPP0B176.inet.co.th [203.151.125.176]) by mozart.inet.co.th (8.9.1a/8.9.0) with ESMTP id AAA02863 for ; Sat, 4 Jan 2003 00:31:17 +0700 (GMT+0700) Date: Sat, 4 Jan 2003 00:35:39 +0700 (ICT) From: Kriang Lerdsuwanakij X-X-Sender: Reply-To: To: Subject: [C++ PATCH] Fix name lookup inconsistency Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi This following patch corrects an inconsistency in name lookup code. When doing name lookup a class template preferring a type, lookup_name returns a TEMPLATE_DECL for an ordinary class template but returns a TYPE_DECL for a member class template. With the patch, a TEMPLATE_DECL is always returned. This would help fixing some template vs class bugs like PR8442 I am working on. Bootstrapped and tested on i686-pc-linux-gnu with no regressions. OK to commit to main trunk? --Kriang 2003-01-03 Kriang Lerdsuwanakij * cp-tree.h (LOOKUP_TEMPLATES_EXPECTED): Remove. * decl (qualify_lookup): Adjust. diff -cpr gcc-main-save/gcc/cp/cp-tree.h gcc-main-new/gcc/cp/cp-tree.h *** gcc-main-save/gcc/cp/cp-tree.h Tue Dec 31 23:28:54 2002 --- gcc-main-new/gcc/cp/cp-tree.h Fri Jan 3 23:13:12 2003 *************** enum overload_flags { NO_SPECIAL = 0, DT *** 3384,3392 **** LOOKUP_PREFER_TYPES means not to accept objects, and possibly namespaces. LOOKUP_PREFER_NAMESPACES means not to accept objects, and possibly types. ! LOOKUP_PREFER_BOTH means class-or-namespace-name. ! LOOKUP_TEMPLATES_EXPECTED means that class templates also count ! as types. */ #define LOOKUP_PROTECT (1) #define LOOKUP_COMPLAIN (2) --- 3384,3390 ---- LOOKUP_PREFER_TYPES means not to accept objects, and possibly namespaces. LOOKUP_PREFER_NAMESPACES means not to accept objects, and possibly types. ! LOOKUP_PREFER_BOTH means class-or-namespace-name. */ #define LOOKUP_PROTECT (1) #define LOOKUP_COMPLAIN (2) *************** enum overload_flags { NO_SPECIAL = 0, DT *** 3402,3408 **** #define LOOKUP_PREFER_TYPES (2048) #define LOOKUP_PREFER_NAMESPACES (4096) #define LOOKUP_PREFER_BOTH (6144) - #define LOOKUP_TEMPLATES_EXPECTED (8192) #define LOOKUP_NAMESPACES_ONLY(F) \ (((F) & LOOKUP_PREFER_NAMESPACES) && !((F) & LOOKUP_PREFER_TYPES)) --- 3400,3405 ---- diff -cpr gcc-main-save/gcc/cp/decl.c gcc-main-new/gcc/cp/decl.c *** gcc-main-save/gcc/cp/decl.c Tue Dec 31 23:28:55 2002 --- gcc-main-new/gcc/cp/decl.c Fri Jan 3 22:47:31 2003 *************** qualify_lookup (val, flags) *** 5940,5947 **** return val; if ((flags & LOOKUP_PREFER_TYPES) && (TREE_CODE (val) == TYPE_DECL ! || ((flags & LOOKUP_TEMPLATES_EXPECTED) ! && DECL_CLASS_TEMPLATE_P (val)))) return val; if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES)) return NULL_TREE; --- 5940,5946 ---- return val; if ((flags & LOOKUP_PREFER_TYPES) && (TREE_CODE (val) == TYPE_DECL ! || DECL_CLASS_TEMPLATE_P (val))) return val; if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES)) return NULL_TREE; From gcc-patches-return-74954-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:32:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2923 invoked by alias); 3 Jan 2003 17:32:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2783 invoked from network); 3 Jan 2003 17:32:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 17:32:14 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA11407; Fri, 3 Jan 2003 10:32:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D774A4F8073; Fri, 3 Jan 2003 10:34:55 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: FYI: document new properties From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I like the IMPUDENT NOSE on that car.. Are you a TEEN-AGER? Date: 03 Jan 2003 10:34:55 -0700 Message-ID: <87fzsannls.fsf@fleche.redhat.com> Lines: 33 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. This adds documentation for a couple new libgcj system properties. Tom Index: ChangeLog from Tom Tromey * gcj.texi (GNU Classpath Properties): Document new properties. Index: gcj.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/gcj.texi,v retrieving revision 1.47 diff -u -r1.47 gcj.texi --- gcj.texi 28 Dec 2002 21:38:54 -0000 1.47 +++ gcj.texi 3 Jan 2003 17:30:34 -0000 @@ -2168,6 +2168,15 @@ @code{java.io.ObjectOutput} classes when set to something else then the empty string. Only used when running a debug build of the library. +@item gnu.classpath.vm.shortname +This is a succint name of the virtual machine. For @code{libgcj}, +this will always be @samp{libgcj}. + +@item gnu.classpath.home.url +A base URL used for finding system property files (e.g., +@file{classpath.security}). By default this is a @samp{file:} URL +pointing to the @file{lib} directory under @samp{java.home}. + @end table @node libgcj Runtime Properties From gcc-patches-return-74955-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:43:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10714 invoked by alias); 3 Jan 2003 17:43:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9863 invoked from network); 3 Jan 2003 17:42:34 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.76.82) by 209.249.29.67 with SMTP; 3 Jan 2003 17:42:34 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id A9AC65DA5; Fri, 3 Jan 2003 18:43:28 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id EBD70F867 for ; Fri, 3 Jan 2003 18:43:27 +0100 (CET) Date: Fri, 3 Jan 2003 18:43:27 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Re: [3.4] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-1730069087-1041615568=:2540" Content-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-1730069087-1041615568=:2540 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Hello again, attached is a `destdir4-changelog.diff' in "cvs diff -U0" format creating the desired ChangeLog entries for the DESTDIR patch. Also attached are my current "cvs diff -u" versions of the diffs. Only `destdir4.diff' has changed relative to its predecessor. The relative changes are: * gcc/Makefile.in (install-libgcc, install-multilib): Also pass DESTDIR to sub-Make. * gcc/mklibgcc.in: Remove the previously added DESTDIR comment, it did not apply. Besides, while reviewing, I had to wonder about `gcc/treelang/Make-lang.in', in particular about either the name or the contents of the rule for `treelang.install-info'. But that is another issue. I'd still appreciate feedback for the gcc/config/* changes from people with 64-bit machines. Regards, Christian Cornelssen --8323584-1730069087-1041615568=:2540 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir4-changelog.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4-changelog.diff" SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9DaGFuZ2VM b2csdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjY0OA0KZGlmZiAtVTAgLXIx LjY0OCBDaGFuZ2VMb2cNCi0tLSBDaGFuZ2VMb2cJMzEgRGVjIDIwMDIgMjA6 MTA6NTMgLTAwMDAJMS42NDgNCisrKyBDaGFuZ2VMb2cJMyBKYW4gMjAwMyAx NzoyMjowOCAtMDAwMA0KQEAgLTAsMCArMSw2IEBADQorMjAwMy0wMS0wMyAg Q2hyaXN0aWFuIENvcm5lbHNzZW4gIDxjY29ybkBjcy50dS1iZXJsaW4uZGU+ DQorDQorCSogTWFrZWZpbGUudHBsIChCQVNFX0ZMQUdTX1RPX1BBU1MpOiBB bHNvIHBhc3MgREVTVERJUi4NCisJKGluc3RhbGwtaW5mbywgZGlyLmluZm8p OiBQcmVwZW5kICQoREVTVERJUikgdG8gJChpbmZvZGlyKS4NCisJKiBNYWtl ZmlsZS5pbjogUmVnZW5lcmF0ZS4NCisNCkluZGV4OiBnY2MvQ2hhbmdlTG9n DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9DaGFuZ2VMb2csdg0KcmV0cmll dmluZyByZXZpc2lvbiAxLjE2MjQ0DQpkaWZmIC1VMCAtcjEuMTYyNDQgQ2hh bmdlTG9nDQotLS0gZ2NjL0NoYW5nZUxvZwkzIEphbiAyMDAzIDEwOjE2OjEz IC0wMDAwCTEuMTYyNDQNCisrKyBnY2MvQ2hhbmdlTG9nCTMgSmFuIDIwMDMg MTc6MjI6MDggLTAwMDANCkBAIC0wLDAgKzEsMjYgQEANCisyMDAzLTAxLTAz ICBDaHJpc3RpYW4gQ29ybmVsc3NlbiAgPGNjb3JuQGNzLnR1LWJlcmxpbi5k ZT4NCisNCisJKiBNYWtlZmlsZS5pbiAoT1JESU5BUllfRkxBR1NfVE9fUEFT Uyk6IEFsc28gcGFzcyBERVNURElSLg0KKwkoaW5zdGFsbC1nY2MtdG9vbGRp ciwgaW5zdGFsbC1jcHAsIGluc3RhbGxkaXJzLA0KKwlpbnN0YWxsLWNvbW1v biwgaW5zdGFsbC1kcml2ZXIsIGluc3RhbGwtaW5mbywgaW5zdGFsbC1tYW4s DQorCWluc3RhbGwtaGVhZGVycywgaW5zdGFsbC1pbmNsdWRlLWRpciwgaW5z dGFsbC1oZWFkZXJzLXRhciwNCisJaW5zdGFsbC1oZWFkZXJzLWNwaW8sIGlu c3RhbGwtaGVhZGVycy1jcCwgaW5zdGFsbC1ta2hlYWRlcnMsDQorCWluc3Rh bGwtY29sbGVjdDIsIHVuaW5zdGFsbCk6IFByZXBlbmQgJChERVNURElSKSB0 bw0KKwlkZXN0aW5hdGlvbiBwYXRocyBpbiBhbGwgKHVuKWluc3RhbGxhdGlv biBjb21tYW5kcy4NCisJKGluc3RhbGwtZHJpdmVyKTogUmV3cml0ZSAkKExO KSBjb21tYW5kcyB0byBzdXBwb3J0IERFU1RESVINCisJd2l0aCAibG4iIGFz IHdlbGwgYXMgd2l0aCAibG4gLXMiLg0KKwkoaW5zdGFsbGRpcnMpOiBTaW1w bHkgdXNlIG1raW5zdGFsbGRpcnMuDQorCShpbnN0YWxsLWxpYmdjYywgaW5z dGFsbC1tdWx0aWxpYik6IEFsc28gcGFzcyBERVNURElSLg0KKwkqIG1rbGli Z2NjLmluOiBQcmVwZW5kICQoREVTVERJUikgdG8gJChsaWJzdWJkaXIpIGlu IHRoZQ0KKwlpbnN0YWxsYXRpb24gZGVzdGluYXRpb24gdmFyaWFibGUgbGRp ci4NCisJKiBjb25maWcvYWxwaGEvdC1vc2Y0LCBjb25maWcvYXJtL3QtbmV0 YnNkLA0KKwljb25maWcvaWE2NC90LWhwdXgsIGNvbmZpZy9taXBzL3QtaXJp czUtNiwNCisJY29uZmlnL3BhL3QtaHB1eC1zaGxpYiwgY29uZmlnL3JzNjAw MC90LWFpeDQzLA0KKwljb25maWcvcnM2MDAwL3QtYWl4NTIsIGNvbmZpZy90 LXNsaWJnY2MtZWxmLXZlciwNCisJY29uZmlnL3Qtc2xpYmdjYy1zbGQ6IFBy ZXBlbmQgJCQoREVTVERJUikgdG8gJCQoc2xpYmRpcikNCisJaW4gdGhlIGRl ZmluaXRpb24gb2YgU0hMSUJfSU5TVEFMTC4NCisJY29uZmlnL2FyYy90LWFy YyAoaW5zdGFsbC1tdWx0aWxpYi1hcmMpOiBQcmVwZW5kICQoREVTVERJUikg dG8NCisJJChsaWJzdWJkaXIpIGluIHRoZSBpbnN0YWxsYXRpb24gY29tbWFu ZHMuDQorCSogZG9jL2luc3RhbGwudGV4aTogQWRkIGRvY3VtZW50YXRpb24g Zm9yIGluc3RhbGxhdGlvbiBpbnRvDQorCXRvb2xkaXJzIGFuZCB3aXRoIERF U1RESVIuDQorDQpJbmRleDogZ2NjL2FkYS9DaGFuZ2VMb2cNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMv Z2NjLWN2cy9nY2MvZ2NjL2FkYS9DaGFuZ2VMb2csdg0KcmV0cmlldmluZyBy ZXZpc2lvbiAxLjI3NQ0KZGlmZiAtVTAgLXIxLjI3NSBDaGFuZ2VMb2cNCi0t LSBnY2MvYWRhL0NoYW5nZUxvZwkyOCBEZWMgMjAwMiAyMTozODo1MSAtMDAw MAkxLjI3NQ0KKysrIGdjYy9hZGEvQ2hhbmdlTG9nCTMgSmFuIDIwMDMgMTc6 MjI6MDkgLTAwMDANCkBAIC0wLDAgKzEsNyBAQA0KKzIwMDMtMDEtMDMgIENo cmlzdGlhbiBDb3JuZWxzc2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRlPg0K Kw0KKwkqIE1ha2UtbGFuZy5pbiAoYWRhLmluc3RhbGwtaW5mbywgYWRhLmlu c3RhbGwtY29tbW9uLA0KKwlhZGEudW5pbnN0YWxsKTogUHJlcGVuZCAkKERF U1RESVIpIHRvIHRoZSBkZXN0aW5hdGlvbg0KKwlkaXJlY3RvcnkgaW4gYWxs ICh1bilpbnN0YWxsYXRpb24gY29tbWFuZHMuDQorCSogTWFrZWZpbGUuaW4g KGluc3RhbGwtZ25hdGxpYiwgaW5zdGFsbC1ydHMpOiBEaXR0by4NCisNCklu ZGV4OiBnY2MvY3AvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2dj Yy9jcC9DaGFuZ2VMb2csdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjMxMjEN CmRpZmYgLVUwIC1yMS4zMTIxIENoYW5nZUxvZw0KLS0tIGdjYy9jcC9DaGFu Z2VMb2cJMyBKYW4gMjAwMyAwMjoxMTo1MSAtMDAwMAkxLjMxMjENCisrKyBn Y2MvY3AvQ2hhbmdlTG9nCTMgSmFuIDIwMDMgMTc6MjI6MDkgLTAwMDANCkBA IC0wLDAgKzEsOCBAQA0KKzIwMDMtMDEtMDMgIENocmlzdGlhbiBDb3JuZWxz c2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRlPg0KKw0KKwkqIE1ha2UtbGFu Zy5pbiAoYysrLmluc3RhbGwtY29tbW9uLCBjKysuaW5zdGFsbC1tYW4sDQor CWMrKy51bmluc3RhbGwpOiBQcmVwZW5kICQoREVTVERJUikgdG8gZGVzdGlu YXRpb24gcGF0aHMgaW4NCisJYWxsICh1bilpbnN0YWxsYXRpb24gY29tbWFu ZHMuDQorCShjKysuaW5zdGFsbC1jb21tb24pOiBSZXdyaXRlICQoTE4pIGNv bW1hbmRzIHRvIHN1cHBvcnQNCisJREVTVERJUiB3aXRoICJsbiIgYXMgd2Vs bCBhcyB3aXRoICJsbiAtcyIuDQorDQpJbmRleDogZ2NjL2YvQ2hhbmdlTG9n DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9mL0NoYW5nZUxvZyx2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuNTEwDQpkaWZmIC1VMCAtcjEuNTEwIENoYW5n ZUxvZw0KLS0tIGdjYy9mL0NoYW5nZUxvZwkxIEphbiAyMDAzIDE1OjI2OjA3 IC0wMDAwCTEuNTEwDQorKysgZ2NjL2YvQ2hhbmdlTG9nCTMgSmFuIDIwMDMg MTc6MjI6MDkgLTAwMDANCkBAIC0wLDAgKzEsNiBAQA0KKzIwMDMtMDEtMDMg IENocmlzdGlhbiBDb3JuZWxzc2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRl Pg0KKw0KKwkqIE1ha2UtbGFuZy5pbiAoZjc3Lmluc3RhbGwtY29tbW9uLCBm NzcuaW5zdGFsbC1pbmZvLA0KKwlmNzcuaW5zdGFsbC1tYW4sIGY3Ny51bmlu c3RhbGwpOiBQcmVwZW5kICQoREVTVERJUikgdG8NCisJZGVzdGluYXRpb24g cGF0aHMgaW4gYWxsICh1bilpbnN0YWxsYXRpb24gY29tbWFuZHMuDQorDQpJ bmRleDogZ2NjL2phdmEvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2Nj L2djYy9qYXZhL0NoYW5nZUxvZyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu MTEwNw0KZGlmZiAtVTAgLXIxLjExMDcgQ2hhbmdlTG9nDQotLS0gZ2NjL2ph dmEvQ2hhbmdlTG9nCTIgSmFuIDIwMDMgMTE6Mzk6NTEgLTAwMDAJMS4xMTA3 DQorKysgZ2NjL2phdmEvQ2hhbmdlTG9nCTMgSmFuIDIwMDMgMTc6MjI6MTAg LTAwMDANCkBAIC0wLDAgKzEsOCBAQA0KKzIwMDMtMDEtMDMgIENocmlzdGlh biBDb3JuZWxzc2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRlPg0KKw0KKwkq IE1ha2UtbGFuZy5pbiAoamF2YS5pbnN0YWxsLWNvbW1vbiwgamF2YS51bmlu c3RhbGwsDQorCWphdmEuaW5zdGFsbC1pbmZvLCBqYXZhLmluc3RhbGwtbWFu KTogUHJlcGVuZCAkKERFU1RESVIpDQorCXRvIGRlc3RpbmF0aW9uIHBhdGhz IGluIGFsbCAodW4paW5zdGFsbGF0aW9uIGNvbW1hbmRzLg0KKwkoamF2YS5p bnN0YWxsLWNvbW1vbik6IFJld3JpdGUgJChMTikgY29tbWFuZCB0byBzdXBw b3J0DQorCURFU1RESVIgd2l0aCAibG4iIGFzIHdlbGwgYXMgd2l0aCAibG4g LXMiLg0KKw0KSW5kZXg6IGdjYy90cmVlbGFuZy9DaGFuZ2VMb2cNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9j dnMvZ2NjLWN2cy9nY2MvZ2NjL3RyZWVsYW5nL0NoYW5nZUxvZyx2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMjANCmRpZmYgLVUwIC1yMS4yMCBDaGFuZ2VM b2cNCi0tLSBnY2MvdHJlZWxhbmcvQ2hhbmdlTG9nCTI4IERlYyAyMDAyIDIx OjM4OjU0IC0wMDAwCTEuMjANCisrKyBnY2MvdHJlZWxhbmcvQ2hhbmdlTG9n CTMgSmFuIDIwMDMgMTc6MjI6MTEgLTAwMDANCkBAIC0wLDAgKzEsNyBAQA0K KzIwMDMtMDEtMDMgIENocmlzdGlhbiBDb3JuZWxzc2VuICA8Y2Nvcm5AY3Mu dHUtYmVybGluLmRlPg0KKw0KKwkqIE1ha2UtbGFuZy5pbiAodHJlZWxhbmcu aW5zdGFsbC5jb21tb24uZG9uZSwNCisJdHJlZWxhbmcuaW5zdGFsbC1pbmZv LCB0cmVlbGFuZy51bmluc3RhbGwpOiBQcmVwZW5kDQorCSQoREVTVERJUikg dG8gZGVzdGluYXRpb24gcGF0aHMgaW4gYWxsICh1bilpbnN0YWxsYXRpb24N CisJY29tbWFuZHMuDQorDQpJbmRleDogbGliZjJjL0NoYW5nZUxvZw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3Jj L2N2cy9nY2MtY3ZzL2djYy9saWJmMmMvQ2hhbmdlTG9nLHYNCnJldHJpZXZp bmcgcmV2aXNpb24gMS4xODgNCmRpZmYgLVUwIC1yMS4xODggQ2hhbmdlTG9n DQotLS0gbGliZjJjL0NoYW5nZUxvZwkxOCBEZWMgMjAwMiAxNjozNzoxNCAt MDAwMAkxLjE4OA0KKysrIGxpYmYyYy9DaGFuZ2VMb2cJMyBKYW4gMjAwMyAx NzoyMjoxMSAtMDAwMA0KQEAgLTAsMCArMSw2IEBADQorMjAwMy0wMS0wMyAg Q2hyaXN0aWFuIENvcm5lbHNzZW4gIDxjY29ybkBjcy50dS1iZXJsaW4uZGU+ DQorDQorCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBBbHNvIHBh c3MgREVTVERJUi4NCisJKGluc3RhbGwsIHVuaW5zdGFsbCk6IFByZXBlbmQg JChERVNURElSKSB0byBkZXN0aW5hdGlvbg0KKwlwYXRocyBpbiBhbGwgKHVu KWluc3RhbGxhdGlvbiBjb21tYW5kcy4NCisNCkluZGV4OiBsaWJpYmVydHkv Q2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2xpYmliZXJ0eS9DaGFu Z2VMb2csdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjM5OA0KZGlmZiAtVTAg LXIxLjM5OCBDaGFuZ2VMb2cNCi0tLSBsaWJpYmVydHkvQ2hhbmdlTG9nCTQg RGVjIDIwMDIgMDE6NTc6MjcgLTAwMDAJMS4zOTgNCisrKyBsaWJpYmVydHkv Q2hhbmdlTG9nCTMgSmFuIDIwMDMgMTc6MjI6MTEgLTAwMDANCkBAIC0wLDAg KzEsNCBAQA0KKzIwMDMtMDEtMDMgIENocmlzdGlhbiBDb3JuZWxzc2VuICA8 Y2Nvcm5AY3MudHUtYmVybGluLmRlPg0KKw0KKwkqIE1ha2VmaWxlLmluIChG TEFHU19UT19QQVNTKTogQWxzbyBwYXNzIERFU1RESVIuDQorDQpJbmRleDog bGlib2JqYy9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvbGlib2Jq Yy9DaGFuZ2VMb2csdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjg4DQpkaWZm IC1VMCAtcjEuODggQ2hhbmdlTG9nDQotLS0gbGlib2JqYy9DaGFuZ2VMb2cJ MTYgRGVjIDIwMDIgMTg6MjI6NTMgLTAwMDAJMS44OA0KKysrIGxpYm9iamMv Q2hhbmdlTG9nCTMgSmFuIDIwMDMgMTc6MjI6MTIgLTAwMDANCkBAIC0wLDAg KzEsNiBAQA0KKzIwMDMtMDEtMDMgIENocmlzdGlhbiBDb3JuZWxzc2VuICA8 Y2Nvcm5AY3MudHUtYmVybGluLmRlPg0KKw0KKwkqIE1ha2VmaWxlLmluIChG TEFHU19UT19QQVNTKTogQWxzbyBwYXNzIERFU1RESVIuDQorCShpbnN0YWxs LWxpYnMsIGluc3RhbGwtaGVhZGVycyk6IFByZXBlbmQgJChERVNURElSKSB0 bw0KKwlkZXN0aW5hdGlvbiBwYXRocyBpbiBhbGwgKHVuKWluc3RhbGxhdGlv biBjb21tYW5kcy4NCisNCkluZGV4OiBsaWJzdGRjKystdjMvQ2hhbmdlTG9n DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2xpYnN0ZGMrKy12My9DaGFuZ2VMb2cs dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE0ODUNCmRpZmYgLVUwIC1yMS4x NDg1IENoYW5nZUxvZw0KLS0tIGxpYnN0ZGMrKy12My9DaGFuZ2VMb2cJMiBK YW4gMjAwMyAyMjo0ODoxNyAtMDAwMAkxLjE0ODUNCisrKyBsaWJzdGRjKyst djMvQ2hhbmdlTG9nCTMgSmFuIDIwMDMgMTc6MjI6MTIgLTAwMDANCkBAIC0w LDAgKzEsMTAgQEANCisyMDAzLTAxLTAzICBDaHJpc3RpYW4gQ29ybmVsc3Nl biAgPGNjb3JuQGNzLnR1LWJlcmxpbi5kZT4NCisNCisJKiBpbmNsdWRlL01h a2VmaWxlLmFtIChpbnN0YWxsLWRhdGEtbG9jYWwpOiBQcmVwZW5kDQorCSQo REVTVERJUikgdG8gZGVzdGluYXRpb24gcGF0aHMgaW4gYWxsICh1bilpbnN0 YWxsYXRpb24NCisJY29tbWFuZHMuICBVc2UgJHtjX2Jhc2VfYnVpbGRkaXJ9 IGFuZCAke3N0ZF9idWlsZGRpcn0NCisJYXMgZGVzdGluYXRpb24gc3ViZGly ZWN0b3JpZXMgdG8gYWNoaWV2ZSBjb25zaXN0ZW5jeSB3aXRoDQorCXByZWNl ZGluZyBta2luc3RhbGxkaXJzIGNvbW1hbmRzLiAgTm8gZWZmZWN0IGJlY2F1 c2UgYm90aA0KKwl2YXJpYWJsZXMgY29udGFpbiAiLiIgb25seS4NCisJKiBp bmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLg0KKw0K --8323584-1730069087-1041615568=:2540 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir4.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4.diff" SW5kZXg6IE1ha2VmaWxlLnRwbA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9NYWtl ZmlsZS50cGwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjI3DQpkaWZmIC11 IC1yMS4yNyBNYWtlZmlsZS50cGwNCi0tLSBNYWtlZmlsZS50cGwJMjkgRGVj IDIwMDIgMTk6MDQ6NDAgLTAwMDAJMS4yNw0KKysrIE1ha2VmaWxlLnRwbAkx IEphbiAyMDAzIDE3OjI2OjM0IC0wMDAwDQpAQCAtMzg4LDYgKzM4OCw3IEBA DQogCSJDWFhGTEFHUz0kKENYWEZMQUdTKSIgXA0KIAkiQ1hYRkxBR1NfRk9S X1RBUkdFVD0kKENYWEZMQUdTX0ZPUl9UQVJHRVQpIiBcDQogCSJDWFhfRk9S X1RBUkdFVD0kKENYWF9GT1JfVEFSR0VUKSIgXA0KKwkiREVTVERJUj0kKERF U1RESVIpIiBcDQogCSJETExUT09MX0ZPUl9UQVJHRVQ9JChETExUT09MX0ZP Ul9UQVJHRVQpIiBcDQogCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwNCiAJIklO U1RBTExfREFUQT0kKElOU1RBTExfREFUQSkiIFwNCkBAIC02MzMsNyArNjM0 LDcgQEANCiBpbnN0YWxsLWluZm86IGRvLWluc3RhbGwtaW5mbyBkaXIuaW5m bw0KIAlzPWBjZCAkKHNyY2Rpcik7ICR7UFdEfWA7IGV4cG9ydCBzOyBcDQog CWlmIFsgLWYgZGlyLmluZm8gXSA7IHRoZW4gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSBkaXIuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvIDsgXA0KKwkgICQo SU5TVEFMTF9EQVRBKSBkaXIuaW5mbyAkKERFU1RESVIpJChpbmZvZGlyKS9k aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgZmkNCiANCiBsb2NhbC1jbGVh bjoNCkBAIC03NjQsNyArNzY1LDcgQEANCiANCiBkaXIuaW5mbzogZG8taW5z dGFsbC1pbmZvDQogCWlmIFsgLWYgJChzcmNkaXIpL3RleGluZm8vZ2VuLWlu Zm8tZGlyIF0gOyB0aGVuIFwNCi0JICAkKHNyY2RpcikvdGV4aW5mby9nZW4t aW5mby1kaXIgJChpbmZvZGlyKSAkKHNyY2RpcikvdGV4aW5mby9kaXIuaW5m by10ZW1wbGF0ZSA+IGRpci5pbmZvLm5ldyA7IFwNCisJICAkKHNyY2Rpcikv dGV4aW5mby9nZW4taW5mby1kaXIgJChERVNURElSKSQoaW5mb2RpcikgJChz cmNkaXIpL3RleGluZm8vZGlyLmluZm8tdGVtcGxhdGUgPiBkaXIuaW5mby5u ZXcgOyBcDQogCSAgbXYgLWYgZGlyLmluZm8ubmV3IGRpci5pbmZvIDsgXA0K IAllbHNlIHRydWUgOyBcDQogCWZpDQpJbmRleDogZ2NjL01ha2VmaWxlLmlu DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2Nh bC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9NYWtlZmlsZS5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuOTYxDQpkaWZmIC11IC1yMS45NjEgTWFrZWZp bGUuaW4NCi0tLSBnY2MvTWFrZWZpbGUuaW4JMTkgRGVjIDIwMDIgMTU6NTM6 NDYgLTAwMDAJMS45NjENCisrKyBnY2MvTWFrZWZpbGUuaW4JMyBKYW4gMjAw MyAxNDoxNTozMSAtMDAwMA0KQEAgLTY4OCw2ICs2ODgsNyBAQA0KIAkiQklT T049JChCSVNPTikiIFwNCiAJIkJJU09ORkxBR1M9JChCSVNPTkZMQUdTKSIg XA0KIAkiQ0ZMQUdTPSQoQ0ZMQUdTKSAkKFdBUk5fQ0ZMQUdTKSIgXA0KKwki REVTVERJUj0kKERFU1RESVIpIiBcDQogCSJHQ0NfRk9SX1RBUkdFVD0kKEdD Q19GT1JfVEFSR0VUKSIgXA0KIAkiTERGTEFHUz0kKExERkxBR1MpIiBcDQog CSJGTEVYPSQoRkxFWCkiIFwNCkBAIC0yMzg2LDcgKzIzODcsNyBAQA0KIA0K IC5QSE9OWTogaW5zdGFsbC1nY2MtdG9vbGRpcg0KIGluc3RhbGwtZ2NjLXRv b2xkaXI6DQotCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxkaXJzICQo Z2NjX3Rvb2xkaXIpDQorCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxk aXJzICQoREVTVERJUikkKGdjY190b29sZGlyKQ0KIA0KICMgQnVpbGQgZml4 ZWQgY29waWVzIG9mIHN5c3RlbSBmaWxlcy4NCiBzdG1wLWZpeGluYzogZml4 aW5jLnNoIGdzeXNsaW1pdHMuaA0KQEAgLTI3NzYsMTczICsyNzc3LDE2MyBA QA0KICMgSGFuZGxlIGNwcCBpbnN0YWxsYXRpb24uDQogaW5zdGFsbC1jcHA6 IGNwcCQoZXhlZXh0KQ0KIAktaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkg XSA7IHRoZW4gXA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKENQUF9DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3 NTUgY3BwJChleGVleHQpICQoYmluZGlyKS8kKENQUF9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChD UFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJP R1JBTSkgLW0gNzU1IGNwcCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIp LyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQogCSAgaWYgWyB4JChj cHBfaW5zdGFsbF9kaXIpICE9IHggXTsgdGhlbiBcDQotCSAgICBybSAtZiAk KHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0NST1NTX05BTUUp JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1 IGNwcCQoZXhlZXh0KSAkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQo Q1BQX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChERVNURElSKSQocHJlZml4KS8kKGNw cF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN CiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWVsc2UgXA0KLQkgIHJtIC1mICQo YmluZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAg JChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChiaW5k aXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNwcCQo ZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCk7IFwNCiAJICBpZiBbIHgkKGNwcF9pbnN0YWxsX2Rpcikg IT0geCBdOyB0aGVuIFwNCi0JICAgIHJtIC1mICQocHJlZml4KS8kKGNwcF9p bnN0YWxsX2RpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0K LQkgICAgJChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkg JChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChwcmVm aXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNw cCQoZXhlZXh0KSAkKERFU1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxf ZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZWxz ZSB0cnVlOyBmaTsgXA0KIAlmaQ0KIA0KICMgQ3JlYXRlIHRoZSBpbnN0YWxs YXRpb24gZGlyZWN0b3JpZXMuDQorIyAkKGxpYmRpcikvZ2NjLWxpYi9pbmNs dWRlIGlzbid0IGN1cnJlbnRseSBzZWFyY2hlZCBieSBjcHAuDQogaW5zdGFs bGRpcnM6DQotCS1pZiBbIC1kICQocHJlZml4KSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKHByZWZpeCkgOyBjaG1vZCBhK3J4ICQocHJlZml4KSA7 IGZpDQotCS1pZiBbIC1kICQoZXhlY19wcmVmaXgpIF0gOyB0aGVuIHRydWUg OyBlbHNlIG1rZGlyICQoZXhlY19wcmVmaXgpIDsgY2htb2QgYStyeCAkKGV4 ZWNfcHJlZml4KSA7IGZpDQotCS1pZiBbIC1kICQobGliZGlyKSBdIDsgdGhl biB0cnVlIDsgZWxzZSBta2RpciAkKGxpYmRpcikgOyBjaG1vZCBhK3J4ICQo bGliZGlyKSA7IGZpDQotCS1pZiBbIC1kICQobGliZGlyKS9nY2MtbGliIF0g OyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQobGliZGlyKS9nY2MtbGliIDsg Y2htb2QgYStyeCAkKGxpYmRpcikvZ2NjLWxpYiA7IGZpDQotIyBUaGlzIGRp ciBpc24ndCBjdXJyZW50bHkgc2VhcmNoZWQgYnkgY3BwLg0KLSMJLWlmIFsg LWQgJChsaWJkaXIpL2djYy1saWIvaW5jbHVkZSBdIDsgdGhlbiB0cnVlIDsg ZWxzZSBta2RpciAkKGxpYmRpcikvZ2NjLWxpYi9pbmNsdWRlIDsgY2htb2Qg YStyeCAkKGxpYmRpcikvZ2NjLWxpYi9pbmNsdWRlIDsgZmkNCi0JLWZkaXI9 IDsgZm9yIGRpciBpbiBgZWNobyAkKGxpYnN1YmRpcikgfCB0ciAnLycgJyAn YDsgZG8gXA0KLQkgIGZkaXI9JCR7ZmRpcn0vJCR7ZGlyfTsgXA0KLQkgIGlm IFsgLWQgJCR7ZmRpcn0gXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJCR7 ZmRpcn07IGNobW9kIGErcnggJCR7ZmRpcn07IGZpIDsgXA0KLQlkb25lDQot CS1pZiBbIC1kICQoYmluZGlyKSBdIDsgdGhlbiB0cnVlIDsgZWxzZSBta2Rp ciAkKGJpbmRpcikgOyBjaG1vZCBhK3J4ICQoYmluZGlyKSA7IGZpDQotCS1p ZiBbIC1kICQoaW5jbHVkZWRpcikgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtk aXIgJChpbmNsdWRlZGlyKSA7IGNobW9kIGErcnggJChpbmNsdWRlZGlyKSA7 IGZpDQotCS1pZiBbIC1kICQoaW5mb2RpcikgXSA7IHRoZW4gdHJ1ZSA7IGVs c2UgbWtkaXIgJChpbmZvZGlyKSA7IGNobW9kIGErcnggJChpbmZvZGlyKSA7 IGZpDQotCS1pZiBbIC1kICQoc2xpYmRpcikgXSA7IHRoZW4gdHJ1ZSA7IGVs c2UgbWtkaXIgJChzbGliZGlyKSA7IGNobW9kIGErcnggJChzbGliZGlyKSA7 IGZpDQotIyBXZSBkb24ndCB1c2UgbWtkaXIgLXAgdG8gY3JlYXRlIHRoZSBw YXJlbnRzIG9mIG1hbjFkaXIsDQotIyBiZWNhdXNlIHNvbWUgc3lzdGVtcyBk b24ndCBzdXBwb3J0IGl0Lg0KLSMgSW5zdGVhZCwgd2UgdXNlIHRoaXMgdGVj aG5pcXVlIHRvIGNyZWF0ZSB0aGUgaW1tZWRpYXRlIHBhcmVudCBvZiBtYW4x ZGlyLg0KLQktcGFyZW50PWBlY2hvICQobWFuMWRpcil8c2VkIC1lICdzQC9b Xi9dKiQkQEAnYDsgXA0KLQlpZiBbIC1kICQkcGFyZW50IF0gOyB0aGVuIHRy dWUgOyBlbHNlIG1rZGlyICQkcGFyZW50IDsgY2htb2QgYStyeCAkJHBhcmVu dCA7IGZpDQotCS1pZiBbIC1kICQobWFuMWRpcikgXSA7IHRoZW4gdHJ1ZSA7 IGVsc2UgbWtkaXIgJChtYW4xZGlyKSA7IGNobW9kIGErcnggJChtYW4xZGly KSA7IGZpDQotCS1pZiBbIC1kICQobWFuN2RpcikgXSA7IHRoZW4gdHJ1ZSA7 IGVsc2UgbWtkaXIgJChtYW43ZGlyKSA7IGNobW9kIGErcnggJChtYW43ZGly KSA7IGZpDQorCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxkaXJzICQo REVTVERJUikkKGxpYnN1YmRpcikNCisJJChTSEVMTCkgJHtzcmNkaXJ9L21r aW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKQ0KKwkkKFNIRUxMKSAk e3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChpbmNsdWRlZGly KQ0KKwkkKFNIRUxMKSAke3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RE SVIpJChpbmZvZGlyKQ0KKwkkKFNIRUxMKSAke3NyY2Rpcn0vbWtpbnN0YWxs ZGlycyAkKERFU1RESVIpJChzbGliZGlyKQ0KKwkkKFNIRUxMKSAke3NyY2Rp cn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChtYW4xZGlyKQ0KKwkkKFNI RUxMKSAke3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChtYW43 ZGlyKQ0KIA0KICMgSW5zdGFsbCB0aGUgY29tcGlsZXIgZXhlY3V0YWJsZXMg YnVpbHQgZHVyaW5nIGNyb3NzIGNvbXBpbGF0aW9uLg0KIGluc3RhbGwtY29t bW9uOiBuYXRpdmUgJChFWFRSQV9QQVJUUykgbGFuZy5pbnN0YWxsLWNvbW1v bg0KIAlmb3IgZmlsZSBpbiAkKENPTVBJTEVSUyk7IGRvIFwNCiAJICBpZiBb IC1mICQkZmlsZSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAkKGxpYnN1YmRp cikvJCRmaWxlOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxl ICQobGlic3ViZGlyKS8kJGZpbGU7IFwNCisJICAgIHJtIC1mICQoREVTVERJ UikkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgJCRmaWxlICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxlOyBc DQogCSAgZWxzZSB0cnVlOyBcDQogCSAgZmk7IFwNCiAJZG9uZQ0KIAlmb3Ig ZmlsZSBpbiAkKEVYVFJBX1BBU1NFUykgJChFWFRSQV9QUk9HUkFNUykgJChV U0VfQ09MTEVDVDIpIC4uOyBkbyBcDQogCSAgaWYgWyB4IiQkZmlsZSIgIT0g eC4uIF07IHRoZW4gXA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkZmls ZTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKGxpYnN1 YmRpcikvJCRmaWxlOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJz dWJkaXIpLyQkZmlsZTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQk ZmlsZSAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KIAkgIGVs c2UgdHJ1ZTsgZmk7IFwNCiAJZG9uZQ0KIAlmb3IgZmlsZSBpbiAkKEVYVFJB X1BBUlRTKSAuLjsgZG8gXA0KIAkgIGlmIFsgeCIkJGZpbGUiICE9IHguLiBd OyB0aGVuIFwNCi0JICAgIHJtIC1mICQobGlic3ViZGlyKS8kJGZpbGU7IFwN Ci0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChsaWJzdWJkaXIpLyQk ZmlsZTsgXA0KLQkgICAgY2htb2QgYS14ICQobGlic3ViZGlyKS8kJGZpbGU7 IFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRmaWxl OyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikk KGxpYnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNU RElSKSQobGlic3ViZGlyKS8kJGZpbGU7IFwNCiAJICBlbHNlIHRydWU7IGZp OyBcDQogCWRvbmUNCiAjIERvbid0IG1lc3Mgd2l0aCBzcGVjcyBpZiBpdCBk b2Vzbid0IGV4aXN0IHlldC4NCiAJLWlmIFsgLWYgc3BlY3MgXSA7IHRoZW4g XA0KLQkgIHJtIC1mICQobGlic3ViZGlyKS9zcGVjczsgXA0KLQkgICQoSU5T VEFMTF9EQVRBKSBzcGVjcyAkKGxpYnN1YmRpcikvc3BlY3M7IFwNCi0JICBj aG1vZCBhLXggJChsaWJzdWJkaXIpL3NwZWNzOyBcDQorCSAgcm0gLWYgJChE RVNURElSKSQobGlic3ViZGlyKS9zcGVjczsgXA0KKwkgICQoSU5TVEFMTF9E QVRBKSBzcGVjcyAkKERFU1RESVIpJChsaWJzdWJkaXIpL3NwZWNzOyBcDQor CSAgY2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvc3BlY3M7IFwN CiAJZmkNCiAjIEluc3RhbGwgcHJvdG9pemUgaWYgaXQgd2FzIGNvbXBpbGVk Lg0KIAktaWYgWyAtZiBwcm90b2l6ZSQoZXhlZXh0KSBdOyBcDQogCXRoZW4g XA0KIAkgICAgaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkgXSA7IHRoZW4g XA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoUFJPVE9JWkVfQ1JPU1NfTkFNRSkk KGV4ZWV4dCk7IFwNCi0JCSQoSU5TVEFMTF9QUk9HUkFNKSBwcm90b2l6ZSQo ZXhlZXh0KSAkKGJpbmRpcikvJChQUk9UT0laRV9DUk9TU19OQU1FKSQoZXhl ZXh0KTsgXA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHVu cHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElSKSQoYmlu ZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCQkk KElOU1RBTExfUFJPR1JBTSkgcHJvdG9pemUkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBc DQorCQlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoVU5QUk9UT0laRV9D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0p IHVucHJvdG9pemUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKFVO UFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCiAJICAgIGVsc2Ug XA0KLQkJcm0gLWYgJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXpl JChleGVleHQpICQoYmluZGlyKS8kKFBST1RPSVpFX0lOU1RBTExfTkFNRSkk KGV4ZWV4dCk7IFwNCi0JCXJtIC1mICQoYmluZGlyKS8kKFVOUFJPVE9JWkVf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkJJChJTlNUQUxMX1BST0dS QU0pIHVucHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQoVU5QUk9UT0la RV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCQlybSAtZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHByb3RvaXplJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0laRV9JTlNUQUxMX05BTUUp JChleGVleHQpOyBcDQorCQlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQo VU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCQkkKElO U1RBTExfUFJPR1JBTSkgdW5wcm90b2l6ZSQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpLyQoVU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQp OyBcDQogCSAgICBmaSA7IFwNCi0JICAgIHJtIC1mICQobGlic3ViZGlyKS9T WVNDQUxMUy5jLlg7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSBTWVNDQUxM Uy5jLlggJChsaWJzdWJkaXIpL1NZU0NBTExTLmMuWDsgXA0KLQkgICAgY2ht b2QgYS14ICQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwNCisJICAgIHJt IC1mICQoREVTVERJUikkKGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQor CSAgICAkKElOU1RBTExfREFUQSkgU1lTQ0FMTFMuYy5YICQoREVTVERJUikk KGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQorCSAgICBjaG1vZCBhLXgg JChERVNURElSKSQobGlic3ViZGlyKS9TWVNDQUxMUy5jLlg7IFwNCiAJZmkN CiAjIEluc3RhbGwgZ2NvdiBpZiBpdCB3YXMgY29tcGlsZWQuDQogCS1pZiBb IC1mIGdjb3YkKGV4ZWV4dCkgXTsgXA0KIAl0aGVuIFwNCi0JICAgIHJtIC1m ICQoYmluZGlyKS9nY292JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ2NvdiQoZXhlZXh0KSAkKGJpbmRpcikvJChHQ09WX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikk KGJpbmRpcikvZ2NvdiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGdjb3YkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKEdD T1ZfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KIAlmaQ0KLQkkKElOU1RB TExfU0NSSVBUKSBnY2NidWcgJChiaW5kaXIpLyQoR0NDQlVHX0lOU1RBTExf TkFNRSkNCisJJChJTlNUQUxMX1NDUklQVCkgZ2NjYnVnICQoREVTVERJUikk KGJpbmRpcikvJChHQ0NCVUdfSU5TVEFMTF9OQU1FKQ0KIA0KICMgSW5zdGFs bCB0aGUgZHJpdmVyIHByb2dyYW0gYXMgJCh0YXJnZXRfYWxpYXMpLWdjYywg DQogIyAkKHRhcmdldC1hbGlhcyktZ2NjLSQodmVyc2lvbikNCiAjIGFuZCBh bHNvIGFzIGVpdGhlciBnY2MgKGlmIG5hdGl2ZSkgb3IgJChnY2NfdG9vbGRp cikvYmluL2djYy4NCiBpbnN0YWxsLWRyaXZlcjogaW5zdGFsbGRpcnMgeGdj YyQoZXhlZXh0KQ0KIAktaWYgWyAtZiBnY2MtY3Jvc3MkKGV4ZWV4dCkgXSA7 IHRoZW4gXA0KLQkgIHJtIC1mICQoYmluZGlyKS8kKEdDQ19DUk9TU19OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jv c3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQoR0NDX0NST1NTX05BTUUpJChleGVl eHQpOyBcDQotCSAgcm0gLWYgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n Y2MtJCh2ZXJzaW9uKTsgXA0KLQkgICQoTE4pICQoYmluZGlyKS8kKEdDQ19D Uk9TU19OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMp LWdjYy0kKHZlcnNpb24pIDsgXA0KLQkgIGlmIFsgLWQgJChnY2NfdG9vbGRp cikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChnY2NfdG9vbGRp cikvYmluL2djYyQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGdjYy1jcm9zcyQoZXhlZXh0KSAkKGdjY190b29sZGlyKS9iaW4vZ2Nj JChleGVleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8k KEdDQ19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnY2MtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS8kKEdDQ19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQo REVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNp b24pOyBcDQorCSAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJ ICAgICQoTE4pICQoR0NDX0NST1NTX05BTUUpJChleGVleHQpICQodGFyZ2V0 X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKSApOyBcDQorCSAgaWYgWyAtZCAkKERF U1RESVIpJChnY2NfdG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAg cm0gLWYgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jvc3MkKGV4 ZWV4dCkgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4 dCk7IFwNCiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWVsc2UgXA0KLQkgIHJt IC1mICQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQotCSAgJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkgJChiaW5k aXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICBybSAt ZiAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNpb24pOyBc DQotCSAgJChMTikgJChiaW5kaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtJCh2ZXJzaW9u KSA7IFwNCi0JICBybSAtZiAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdj Yy10bXAkKGV4ZWV4dCk7IFwNCi0JICAkKExOKSAkKGJpbmRpcikvJChHQ0Nf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWdjYy10bXAkKGV4ZWV4dCk7IFwNCi0JICBtdiAkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWdjYy10bXAkKGV4ZWV4dCkgJChiaW5kaXIpLyQoR0ND X1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgcm0gLWYg JChERVNURElSKSQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0pIHhnY2MkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ2NjLSQodmVyc2lvbik7IFwNCisJICAoIGNkICQoREVTVERJ UikkKGJpbmRpcikgJiYgXA0KKwkgICAgJChMTikgJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLSQodmVyc2lvbikg KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWdjYy10bXAkKGV4ZWV4dCk7IFwNCisJICAoIGNkICQoREVTVERJ UikkKGJpbmRpcikgJiYgXA0KKwkgICAgJChMTikgJChHQ0NfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLXRtcCQoZXhlZXh0 KSAmJiBcDQorCSAgICBtdiAtZiAkKHRhcmdldF9hbGlhcyktZ2NjLXRtcCQo ZXhlZXh0KSAkKEdDQ19UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAp OyBcDQogCWZpDQogDQogIyBJbnN0YWxsIHRoZSBpbmZvIGZpbGVzLg0KICMg JChJTlNUQUxMX0RBVEEpIG1pZ2h0IGJlIGEgcmVsYXRpdmUgcGF0aG5hbWUs IHNvIHdlIGNhbid0IGNkIGludG8gc3JjZGlyDQogIyB0byBkbyB0aGUgaW5z dGFsbC4NCiBpbnN0YWxsLWluZm86IGRvYyBpbnN0YWxsZGlycyBsYW5nLmlu c3RhbGwtaW5mbw0KLQktcm0gLWYgJChpbmZvZGlyKS9jcHAuaW5mbyogJChp bmZvZGlyKS9nY2MuaW5mbyoNCi0JLXJtIC1mICQoaW5mb2RpcikvY3BwaW50 ZXJuYWxzLmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQorCS1ybSAt ZiAkKERFU1RESVIpJChpbmZvZGlyKS9jcHAuaW5mbyogJChERVNURElSKSQo aW5mb2RpcikvZ2NjLmluZm8qDQorCS1ybSAtZiAkKERFU1RESVIpJChpbmZv ZGlyKS9jcHBpbnRlcm5hbHMuaW5mbyogJChERVNURElSKSQoaW5mb2Rpcikv Z2NjaW50LmluZm8qDQogCWlmIFsgLWYgJChkb2NkaXIpL2djYy5pbmZvIF07 IHRoZW4gXA0KIAkgIGZvciBmIGluICQoZG9jZGlyKS9jcHAuaW5mbyogJChk b2NkaXIpL2djYy5pbmZvKiBcDQogCQkkKGRvY2RpcikvY3BwaW50ZXJuYWxz LmluZm8qICQoZG9jZGlyKS9nY2NpbnQuaW5mbyo7IGRvIFwNCiAJICAgIHJl YWxmaWxlPWBlY2hvICQkZiB8IHNlZCAtZSAnc3wuKi9cKFteL10qXCkkJHxc MXwnYDsgXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIp LyQkcmVhbGZpbGU7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChE RVNURElSKSQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0KIAkgIGRvbmU7IFwN CiAJZWxzZSB0cnVlOyBmaQ0KIAktaWYgJChTSEVMTCkgLWMgJ2luc3RhbGwt aW5mbyAtLXZlcnNpb24nID4vZGV2L251bGwgMj4mMTsgdGhlbiBcDQotCSAg aWYgWyAtZiAkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBcDQorCSAgaWYgWyAt ZiAkKERFU1RESVIpJChpbmZvZGlyKS9kaXIgXSA7IHRoZW4gXA0KIAkgICAg Zm9yIGYgaW4gY3BwLmluZm8gZ2NjLmluZm8gZ2NjaW50LmluZm8gY3BwaW50 ZXJuYWxzLmluZm87IGRvIFwNCi0JCWlmIFsgLWYgJChpbmZvZGlyKS8kJGYg XTsgdGhlbiBcDQotCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5m b2RpcikvZGlyICQoaW5mb2RpcikvJCRmOyBcDQorCQlpZiBbIC1mICQoREVT VERJUikkKGluZm9kaXIpLyQkZiBdOyB0aGVuIFwNCisJCSAgaW5zdGFsbC1p bmZvIC0tZGlyLWZpbGU9JChERVNURElSKSQoaW5mb2RpcikvZGlyICQoREVT VERJUikkKGluZm9kaXIpLyQkZjsgXA0KIAkJZWxzZSB0cnVlOyBmaTsgXA0K IAkgICAgZG9uZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0 cnVlOyBmaTsNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2NwcC5pbmZvKiAk KGluZm9kaXIpL2djYy5pbmZvKg0KLQktY2htb2QgYS14ICQoaW5mb2Rpcikv Y3BwaW50ZXJuYWxzLmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQor CS1jaG1vZCBhLXggJChERVNURElSKSQoaW5mb2RpcikvY3BwLmluZm8qICQo REVTVERJUikkKGluZm9kaXIpL2djYy5pbmZvKg0KKwktY2htb2QgYS14ICQo REVTVERJUikkKGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKERFU1RE SVIpJChpbmZvZGlyKS9nY2NpbnQuaW5mbyoNCiANCiAjIEluc3RhbGwgdGhl IG1hbiBwYWdlcy4NCiBpbnN0YWxsLW1hbjogaW5zdGFsbGRpcnMgJChHRU5F UkFURURfTUFOUEFHRVMpIGxhbmcuaW5zdGFsbC1tYW4NCiAJLWlmIFsgLWYg Z2NjLWNyb3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKG1h bjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICQo SU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2NjLjEgJChtYW4xZGlyKS8kKEdD Q19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICBjaG1vZCBhLXggJCht YW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJICBy bSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQo bWFuMWV4dCk7IFwNCisJICAkKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dj Yy4xICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJCht YW4xZXh0KTsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGly KS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJZWxzZSBcDQot CSAgcm0gLWYgJChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4x ZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2NjLjEg JChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0K LQkgIGNobW9kIGEteCAkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv JChHQ0NfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAkKElOU1RB TExfREFUQSkgJChkb2NkaXIpL2djYy4xICQoREVTVERJUikkKG1hbjFkaXIp LyQoR0NDX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgY2htb2Qg YS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQogCWZpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2NwcCQo bWFuMWV4dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvY3BwLjEg JChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJChtYW4x ZGlyKS9jcHAkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2djb3Yk KG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2djb3Yu MSAkKG1hbjFkaXIpL2djb3YkKG1hbjFleHQpDQotCS1jaG1vZCBhLXggJCht YW4xZGlyKS9nY292JChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9m c2YtZnVuZGluZyQobWFuN2V4dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAkKGRv Y2RpcikvZnNmLWZ1bmRpbmcuNyAkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJCht YW43ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuN2RpcikvZnNmLWZ1bmRpbmck KG1hbjdleHQpDQotCS1ybSAtZiAkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQp DQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dmZGwuNyAkKG1hbjdk aXIpL2dmZGwkKG1hbjdleHQpDQotCS1jaG1vZCBhLXggJChtYW43ZGlyKS9n ZmRsJChtYW43ZXh0KQ0KLQktcm0gLWYgJChtYW43ZGlyKS9ncGwkKG1hbjdl eHQpDQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2dwbC43ICQobWFu N2RpcikvZ3BsJChtYW43ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuN2Rpcikv Z3BsJChtYW43ZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv Y3BwJChtYW4xZXh0KQ0KKwktJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9j cHAuMSAkKERFU1RESVIpJChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQorCS1j aG1vZCBhLXggJChERVNURElSKSQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0K Kwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkN CisJLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2Nvdi4xICQoREVTVERJ UikkKG1hbjFkaXIpL2djb3YkKG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChE RVNURElSKSQobWFuMWRpcikvZ2NvdiQobWFuMWV4dCkNCisJLXJtIC1mICQo REVTVERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KKwkt JChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9mc2YtZnVuZGluZy43ICQoREVT VERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KKwktY2ht b2QgYS14ICQoREVTVERJUikkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43 ZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuN2RpcikvZ2ZkbCQobWFu N2V4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ2ZkbC43ICQo REVTVERJUikkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQpDQorCS1jaG1vZCBh LXggJChERVNURElSKSQobWFuN2RpcikvZ2ZkbCQobWFuN2V4dCkNCisJLXJt IC1mICQoREVTVERJUikkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCisJLSQo SU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvZ3BsLjcgJChERVNURElSKSQobWFu N2RpcikvZ3BsJChtYW43ZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikk KG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCiANCiAjIEluc3RhbGwgdGhlIGxp YnJhcnkuDQogaW5zdGFsbC1saWJnY2M6IGxpYmdjYy5tayBsaWJnY2MuYSBp bnN0YWxsZGlycw0KQEAgLTI5NjYsNiArMjk1Nyw3IEBADQogCSAgTUFLRU9W RVJSSURFUz0gXA0KIAkgIElOU1RBTExfREFUQT0iJChJTlNUQUxMX0RBVEEp IiBcDQogCSAgUkFOTElCX0ZPUl9UQVJHRVQ9IiQkcl9mX3QiIFwNCisJICBE RVNURElSPSIkKERFU1RESVIpIiBcDQogCSAgbGlic3ViZGlyPSIkKGxpYnN1 YmRpcikiIFwNCiAJICBzbGliZGlyPSIkKHNsaWJkaXIpIiBcDQogCSAgLWYg bGliZ2NjLm1rIGluc3RhbGwNCkBAIC0yOTkyLDYgKzI5ODQsNyBAQA0KIAkg IE1BS0VPVkVSUklERVM9IFwNCiAJICBJTlNUQUxMX0RBVEE9IiQoSU5TVEFM TF9EQVRBKSIgXA0KIAkgIFJBTkxJQl9GT1JfVEFSR0VUPSIkJHJfZl90IiBc DQorCSAgREVTVERJUj0iJChERVNURElSKSIgXA0KIAkgIGxpYnN1YmRpcj0i JChsaWJzdWJkaXIpIiBcDQogCSAgc2xpYmRpcj0iJChzbGliZGlyKSIgXA0K IAkgIC1mIGxpYmdjYy5tayBpbnN0YWxsDQpAQCAtMzAwMSwyMyArMjk5NCwy MyBAQA0KICMgRml4IHN5bWxpbmtzIHRvIGFic29sdXRlIHBhdGhzIGluIHRo ZSBpbnN0YWxsZWQgaW5jbHVkZSBkaXJlY3RvcnkgdG8NCiAjIHBvaW50IHRv IHRoZSBpbnN0YWxsZWQgZGlyZWN0b3J5LCBub3QgdGhlIGJ1aWxkIGRpcmVj dG9yeS4NCiAjIERvbid0IG5lZWQgdG8gdXNlIExOX1MgaGVyZSBzaW5jZSB3 ZSByZWFsbHkgZG8gbmVlZCBsbiAtcyBhbmQgbm8gc3Vic3RpdHV0ZXMuDQot CS1maWxlcz1gY2QgJChsaWJzdWJkaXIpL2luY2x1ZGU7IGZpbmQgLiAtdHlw ZSBsIC1wcmludCAyPi9kZXYvbnVsbGA7IFwNCisJLWZpbGVzPWBjZCAkKERF U1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGU7IGZpbmQgLiAtdHlwZSBsIC1w cmludCAyPi9kZXYvbnVsbGA7IFwNCiAJaWYgWyAkJD8gLWVxIDAgXTsgdGhl biBcDQogCSAgZGlyPWBjZCBpbmNsdWRlOyAke1BXRH1gOyBcDQogCSAgZm9y IGkgaW4gJCRmaWxlczsgZG8gXA0KLQkgICAgZGVzdD1gbHMgLWxkICQobGli c3ViZGlyKS9pbmNsdWRlLyQkaSB8IHNlZCAtbiAncy8uKi0+IC8vcCdgOyBc DQorCSAgICBkZXN0PWBscyAtbGQgJChERVNURElSKSQobGlic3ViZGlyKS9p bmNsdWRlLyQkaSB8IHNlZCAtbiAncy8uKi0+IC8vcCdgOyBcDQogCSAgICBp ZiBleHByICIkJGRlc3QiIDogIiQkZGlyLioiID4gL2Rldi9udWxsOyB0aGVu IFwNCi0JICAgICAgcm0gLWYgJChsaWJzdWJkaXIpL2luY2x1ZGUvJCRpOyBc DQotCSAgICAgIGxuIC1zIGBlY2hvICQkaSB8IHNlZCAic3wvW14vXSp8Ly4u fGciIHwgc2VkICdzfC8uLiQkfHwnYGBlY2hvICIkJGRlc3QiIHwgc2VkICJz fCQkZGlyfHwiYCAkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCisJICAg ICAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlLyQkaTsg XA0KKwkgICAgICBsbiAtcyBgZWNobyAkJGkgfCBzZWQgInN8L1teL10qfC8u LnxnIiB8IHNlZCAnc3wvLi4kJHx8J2BgZWNobyAiJCRkZXN0IiB8IHNlZCAi c3wkJGRpcnx8ImAgJChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlLyQk aTsgXA0KIAkgICAgZmk7IFwNCiAJICBkb25lOyBcDQogCWZpDQogDQogIyBD cmVhdGUgb3IgcmVjcmVhdGUgdGhlIGdjYyBwcml2YXRlIGluY2x1ZGUgZmls ZSBkaXJlY3RvcnkuDQogaW5zdGFsbC1pbmNsdWRlLWRpcjogaW5zdGFsbGRp cnMNCi0JLXJtIC1yZiAkKGxpYnN1YmRpcikvaW5jbHVkZQ0KLQlta2RpciAk KGxpYnN1YmRpcikvaW5jbHVkZQ0KLQktY2htb2QgYStyeCAkKGxpYnN1YmRp cikvaW5jbHVkZQ0KKwktcm0gLXJmICQoREVTVERJUikkKGxpYnN1YmRpcikv aW5jbHVkZQ0KKwlta2RpciAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1 ZGUNCisJLWNobW9kIGErcnggJChERVNURElSKSQobGlic3ViZGlyKS9pbmNs dWRlDQogDQogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSB1c2lu ZyB0YXIuDQogaW5zdGFsbC1oZWFkZXJzLXRhcjogc3RtcC1pbnQtaGRycyAk KFNUTVBfRklYUFJPVE8pIGluc3RhbGwtaW5jbHVkZS1kaXINCkBAIC0zMDI2 LDcgKzMwMTksNyBAQA0KICMgZm91bmQgaW4gQ0RQQVRILCBjb3JydXB0aW5n IHRoZSBvdXRwdXQuICBXZSBjb3VsZCBqdXN0IHJlZGlyZWN0IHRoZQ0KICMg b3V0cHV0IG9mIGBjZCcsIGJ1dCBzb21lIHNoZWxscyBsb3NlIG9uIHJlZGly ZWN0aW9uIHdpdGhpbiBgKCkncw0KIAkoY2QgYCR7UFdEfWAvaW5jbHVkZSA7 IFwNCi0JIHRhciAtY2YgLSAuOyBleGl0IDApIHwgKGNkICQobGlic3ViZGly KS9pbmNsdWRlOyB0YXIgeHBmIC0gKQ0KKwkgdGFyIC1jZiAtIC47IGV4aXQg MCkgfCAoY2QgJChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlOyB0YXIg eHBmIC0gKQ0KICMgL2Jpbi9zaCBvbiBzb21lIHN5c3RlbXMgcmV0dXJucyB0 aGUgc3RhdHVzIG9mIHRoZSBmaXJzdCB0YXIsDQogIyBhbmQgdGhhdCBjYW4g bG9zZSB3aXRoIEdOVSB0YXIgd2hpY2ggYWx3YXlzIHdyaXRlcyBhIGZ1bGwg YmxvY2suDQogIyBTbyB1c2UgYGV4aXQgMCcgdG8gaWdub3JlIGl0cyBleGl0 IHN0YXR1cy4NCkBAIC0zMDM1LDc4ICszMDI4LDc4IEBADQogaW5zdGFsbC1o ZWFkZXJzLWNwaW86IHN0bXAtaW50LWhkcnMgJChTVE1QX0ZJWFBST1RPKSBp bnN0YWxsLWluY2x1ZGUtZGlyDQogIyBTZWUgZGlzY3Vzc2lvbiBhYm91dCB0 aGUgdXNlIG9mIGBwd2RgIGFib3ZlDQogCWNkIGAke1BXRH1gL2luY2x1ZGUg OyBcDQotCWZpbmQgLiAtcHJpbnQgfCBjcGlvIC1wZHVtICQobGlic3ViZGly KS9pbmNsdWRlDQorCWZpbmQgLiAtcHJpbnQgfCBjcGlvIC1wZHVtICQoREVT VERJUikkKGxpYnN1YmRpcikvaW5jbHVkZQ0KIA0KICMgSW5zdGFsbCB0aGUg aW5jbHVkZSBkaXJlY3RvcnkgdXNpbmcgY3AuDQogaW5zdGFsbC1oZWFkZXJz LWNwOiBzdG1wLWludC1oZHJzICQoU1RNUF9GSVhQUk9UTykgaW5zdGFsbC1p bmNsdWRlLWRpcg0KLQljcCAtcCAtciBpbmNsdWRlICQobGlic3ViZGlyKQ0K KwljcCAtcCAtciBpbmNsdWRlICQoREVTVERJUikkKGxpYnN1YmRpcikNCiAN CiBpdG9vbHNkaXIgPSAkKGxpYnN1YmRpcikvaW5zdGFsbC10b29scw0KICMg RG9uJ3QgaW5zdGFsbCB0aGUgaGVhZGVycy4gIEluc3RlYWQsIGluc3RhbGwg YXBwcm9wcmlhdGUgc2NyaXB0cw0KICMgYW5kIHN1cHBvcnRpbmcgZmlsZXMg Zm9yIGZpeGluY2x1ZGVzIHRvIGJlIHJ1biBsYXRlci4NCiBpbnN0YWxsLW1r aGVhZGVyczogc3RtcC1pbnQtaGRycyAkKFNUTVBfRklYUFJPVE8pIGluc3Rh bGwtaW5jbHVkZS1kaXIgXA0KICAgICBta2hlYWRlcnMgeGxpbWl0cy5oDQot CS1ybSAtcmYgJChpdG9vbHNkaXIpDQotCSQoU0hFTEwpICQoc3JjZGlyKS9t a2luc3RhbGxkaXJzICQoaXRvb2xzZGlyKS9pbmNsdWRlDQorCS1ybSAtcmYg JChERVNURElSKSQoaXRvb2xzZGlyKQ0KKwkkKFNIRUxMKSAkKHNyY2Rpcikv bWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChpdG9vbHNkaXIpL2luY2x1ZGUN CiAJZm9yIGZpbGUgaW4gJChVU0VSX0gpOyBkbyBcDQogCSAgcmVhbGZpbGU9 YGVjaG8gJCRmaWxlIHwgc2VkIC1lICdzfC4qL1woW14vXSpcKSQkfFwxfCdg OyBcDQogCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSBcDQotCSAgICAkKGl0 b29sc2RpcikvaW5jbHVkZS8kJHJlYWxmaWxlIDsgXA0KKwkgICAgJChERVNU RElSKSQoaXRvb2xzZGlyKS9pbmNsdWRlLyQkcmVhbGZpbGUgOyBcDQogCWRv bmUNCi0JJChJTlNUQUxMX0RBVEEpIHhsaW1pdHMuaCAkKGl0b29sc2Rpcikv aW5jbHVkZS9saW1pdHMuaA0KKwkkKElOU1RBTExfREFUQSkgeGxpbWl0cy5o ICQoREVTVERJUikkKGl0b29sc2RpcikvaW5jbHVkZS9saW1pdHMuaA0KIAlp ZiBbIHgkKFNUTVBfRklYSU5DKSAhPSB4IF0gOyB0aGVuIFwNCiAJICAkKElO U1RBTExfREFUQSkgJChzcmNkaXIpL1JFQURNRS1maXhpbmMgXA0KLQkgICAg JChpdG9vbHNkaXIpL2luY2x1ZGUvUkVBRE1FIDsgXA0KLQkgICQoSU5TVEFM TF9QUk9HUkFNKSBmaXhpbmMuc2ggJChpdG9vbHNkaXIpL2ZpeGluYy5zaCA7 IFwNCi0JICAkKElOU1RBTExfUFJPR1JBTSkgZml4aW5jL2ZpeGluY2wgJChp dG9vbHNkaXIpL2ZpeGluY2wgOyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQo c3JjZGlyKS9nc3lzbGltaXRzLmggJChpdG9vbHNkaXIpL2dzeXNsaW1pdHMu aCA7IFwNCisJICAgICQoREVTVERJUikkKGl0b29sc2RpcikvaW5jbHVkZS9S RUFETUUgOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0pIGZpeGluYy5zaCAk KERFU1RESVIpJChpdG9vbHNkaXIpL2ZpeGluYy5zaCA7IFwNCisJICAkKElO U1RBTExfUFJPR1JBTSkgZml4aW5jL2ZpeGluY2wgJChERVNURElSKSQoaXRv b2xzZGlyKS9maXhpbmNsIDsgXA0KKwkgICQoSU5TVEFMTF9EQVRBKSAkKHNy Y2RpcikvZ3N5c2xpbWl0cy5oICQoREVTVERJUikkKGl0b29sc2RpcikvZ3N5 c2xpbWl0cy5oIDsgXA0KIAllbHNlIDo7IGZpDQogCWlmIFsgeCQoU1RNUF9G SVhQUk9UTykgIT0geCBdIDsgdGhlbiBcDQogCSAgJChJTlNUQUxMX1BST0dS QU0pICQoc3JjZGlyKS9ta2luc3RhbGxkaXJzIFwNCi0JCSQoaXRvb2xzZGly KS9ta2luc3RhbGxkaXJzIDsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSAk KHNyY2RpcikvZml4cHJvdG8gJChpdG9vbHNkaXIpL2ZpeHByb3RvIDsgXA0K KwkJJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2luc3RhbGxkaXJzIDsgXA0K KwkgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvZml4cHJvdG8gJChE RVNURElSKSQoaXRvb2xzZGlyKS9maXhwcm90byA7IFwNCiAJICAkKElOU1RB TExfUFJPR1JBTSkgZml4LWhlYWRlciQoYnVpbGRfZXhlZXh0KSBcDQotCQkk KGl0b29sc2RpcikvZml4LWhlYWRlciQoYnVpbGRfZXhlZXh0KSA7IFwNCisJ CSQoREVTVERJUikkKGl0b29sc2RpcikvZml4LWhlYWRlciQoYnVpbGRfZXhl ZXh0KSA7IFwNCiAJZWxzZSA6OyBmaQ0KLQkkKElOU1RBTExfUFJPR1JBTSkg bWtoZWFkZXJzICQoaXRvb2xzZGlyKS9ta2hlYWRlcnMNCisJJChJTlNUQUxM X1BST0dSQU0pIG1raGVhZGVycyAkKERFU1RESVIpJChpdG9vbHNkaXIpL21r aGVhZGVycw0KIAllY2hvICdTWVNURU1fSEVBREVSX0RJUj0iJyIkKFNZU1RF TV9IRUFERVJfRElSKSInIicgXA0KLQkJPiAkKGl0b29sc2RpcikvbWtoZWFk ZXJzLmNvbmYNCisJCT4gJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRl cnMuY29uZg0KIAllY2hvICdPVEhFUl9GSVhJTkNMVURFU19ESVJTPSIkKE9U SEVSX0ZJWElOQ0xVREVTX0RJUlMpIicgXA0KLQkJPj4gJChpdG9vbHNkaXIp L21raGVhZGVycy5jb25mDQorCQk+PiAkKERFU1RESVIpJChpdG9vbHNkaXIp L21raGVhZGVycy5jb25mDQogCWVjaG8gJ0ZJWFBST1RPX0RFRklORVM9IiQo RklYUFJPVE9fREVGSU5FUykiJyBcDQotCQk+PiAkKGl0b29sc2RpcikvbWto ZWFkZXJzLmNvbmYNCi0JZWNobyAnU1RNUF9GSVhQUk9UTz0iJChTVE1QX0ZJ WFBST1RPKSInID4+ICQoaXRvb2xzZGlyKS9ta2hlYWRlcnMuY29uZg0KLQll Y2hvICdTVE1QX0ZJWElOQz0iJChTVE1QX0ZJWElOQykiJyA+PiAkKGl0b29s c2RpcikvbWtoZWFkZXJzLmNvbmYNCisJCT4+ICQoREVTVERJUikkKGl0b29s c2RpcikvbWtoZWFkZXJzLmNvbmYNCisJZWNobyAnU1RNUF9GSVhQUk9UTz0i JChTVE1QX0ZJWFBST1RPKSInID4+ICQoREVTVERJUikkKGl0b29sc2Rpcikv bWtoZWFkZXJzLmNvbmYNCisJZWNobyAnU1RNUF9GSVhJTkM9IiQoU1RNUF9G SVhJTkMpIicgPj4gJChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMu Y29uZg0KIA0KICMgVXNlIHRoaXMgdGFyZ2V0IHRvIGluc3RhbGwgdGhlIHBy b2dyYW0gYGNvbGxlY3QyJyB1bmRlciB0aGUgbmFtZSBgY29sbGVjdDInLg0K IGluc3RhbGwtY29sbGVjdDI6IGNvbGxlY3QyIGluc3RhbGxkaXJzDQotCSQo SU5TVEFMTF9QUk9HUkFNKSBjb2xsZWN0MiQoZXhlZXh0KSAkKGxpYnN1YmRp cikvY29sbGVjdDIkKGV4ZWV4dCkNCisJJChJTlNUQUxMX1BST0dSQU0pIGNv bGxlY3QyJChleGVleHQpICQoREVTVERJUikkKGxpYnN1YmRpcikvY29sbGVj dDIkKGV4ZWV4dCkNCiAjIEluc3RhbGwgdGhlIGRyaXZlciBwcm9ncmFtIGFz ICQobGlic3ViZGlyKS9nY2MgZm9yIGNvbGxlY3QyLg0KLQkkKElOU1RBTExf UFJPR1JBTSkgeGdjYyQoZXhlZXh0KSAkKGxpYnN1YmRpcikvZ2NjJChleGVl eHQpDQorCSQoSU5TVEFMTF9QUk9HUkFNKSB4Z2NjJChleGVleHQpICQoREVT VERJUikkKGxpYnN1YmRpcikvZ2NjJChleGVleHQpDQogDQogIyBDYW5jZWwg aW5zdGFsbGF0aW9uIGJ5IGRlbGV0aW5nIHRoZSBpbnN0YWxsZWQgZmlsZXMu DQogdW5pbnN0YWxsOiBpbnRsLnVuaW5zdGFsbCBsYW5nLnVuaW5zdGFsbA0K LQktcm0gLXJmICQobGlic3ViZGlyKQ0KLQktcm0gLXJmICQoYmluZGlyKS8k KEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChiaW5k aXIpLyQoR0NDX0NST1NTX05BTUUpJChleGVleHQpDQotCS1ybSAtZiAkKGJp bmRpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQktcm0gLWYg JChiaW5kaXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVleHQpDQorCS1ybSAt cmYgJChERVNURElSKSQobGlic3ViZGlyKQ0KKwktcm0gLXJmICQoREVTVERJ UikkKGJpbmRpcikvJChHQ0NfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwkt cm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkk KGV4ZWV4dCkNCisJLXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChDUFBf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQo YmluZGlyKS8kKENQUF9DUk9TU19OQU1FKSQoZXhlZXh0KQ0KIAktaWYgWyB4 JChjcHBfaW5zdGFsbF9kaXIpICE9IHggXTsgdGhlbiBcDQotCSAgcm0gLWYg JChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQotCSAgcm0gLWYgJChwcmVmaXgpLyQoY3BwX2lu c3RhbGxfZGlyKS8kKENQUF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkg IHJtIC1mICQoREVTVERJUikkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIp LyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAtZiAk KERFU1RESVIpJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KIAllbHNlIHRydWU7IGZpDQotCS1y bSAtcmYgJChiaW5kaXIpLyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKFBST1RPSVpFX0NST1NTX05B TUUpJChleGVleHQpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoVU5QUk9UT0la RV9JTlNUQUxMX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYgJChiaW5kaXIp LyQoVU5QUk9UT0laRV9DUk9TU19OQU1FKSQoZXhlZXh0KQ0KLQktcm0gLXJm ICQoYmluZGlyKS8kKEdDT1ZfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQkt cm0gLXJmICQobWFuMWRpcikvJChHQ0NfSU5TVEFMTF9OQU1FKSQobWFuMWV4 dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpLyQoR0NDX0NST1NTX05BTUUpJCht YW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0K LQktcm0gLXJmICQobWFuMWRpcikvcHJvdG9pemUkKG1hbjFleHQpDQotCS1y bSAtcmYgJChtYW4xZGlyKS91bnByb3RvaXplJChtYW4xZXh0KQ0KLQktcm0g LWYgJChpbmZvZGlyKS9jcHAuaW5mbyogJChpbmZvZGlyKS9nY2MuaW5mbyoN Ci0JLXJtIC1mICQoaW5mb2RpcikvY3BwaW50ZXJuYWxzLmluZm8qICQoaW5m b2RpcikvZ2NjaW50LmluZm8qDQorCS1ybSAtcmYgJChERVNURElSKSQoYmlu ZGlyKS8kKFBST1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJt IC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPVE9JWkVfQ1JPU1NfTkFN RSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQo VU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9JWkVfQ1JPU1NfTkFNRSkk KGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQoR0NP Vl9JTlNUQUxMX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElS KSQobWFuMWRpcikvJChHQ0NfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCkNCisJ LXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19DUk9TU19OQU1F KSQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9j cHAkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikv cHJvdG9pemUkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFu MWRpcikvdW5wcm90b2l6ZSQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJ UikkKGluZm9kaXIpL2NwcC5pbmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9n Y2MuaW5mbyoNCisJLXJtIC1mICQoREVTVERJUikkKGluZm9kaXIpL2NwcGlu dGVybmFscy5pbmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9nY2NpbnQuaW5m byoNCiAjDA0KICMgVGhlc2UgdGFyZ2V0cyBhcmUgZm9yIHRoZSBkZWphZ251 IHRlc3RzdWl0ZXMuIFRoZSBmaWxlIHNpdGUuZXhwDQogIyBjb250YWlucyBn bG9iYWwgdmFyaWFibGVzIHRoYXQgYWxsIHRoZSB0ZXN0c3VpdGVzIHdpbGwg dXNlLg0KSW5kZXg6IGdjYy9ta2xpYmdjYy5pbg0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3Zz L2djYy9nY2MvbWtsaWJnY2MuaW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjQ5DQpkaWZmIC11IC1yMS40OSBta2xpYmdjYy5pbg0KLS0tIGdjYy9ta2xp YmdjYy5pbgkxNiBEZWMgMjAwMiAxODoxOTo0NCAtMDAwMAkxLjQ5DQorKysg Z2NjL21rbGliZ2NjLmluCTMgSmFuIDIwMDMgMTQ6MjA6MTggLTAwMDANCkBA IC00MzYsMTAgKzQzNiwxMCBAQA0KICAgZGlyPWBlY2hvICR7bWx9IHwgc2Vk IC1lICdzLzsuKiQvLycgLWUgJ3MvPS8kKEVRKS9nJ2ANCiAgIGZsYWdzPWBl Y2hvICR7bWx9IHwgc2VkIC1lICdzL15bXjtdKjsvLycgLWUgJ3MvQC8gLS9n J2A7DQogICBpZiBbICRkaXIgIT0gLiBdOyB0aGVuDQotICAgIGxkaXI9JyQo bGlic3ViZGlyKScvJGRpcg0KKyAgICBsZGlyPSckKERFU1RESVIpJChsaWJz dWJkaXIpJy8kZGlyDQogICAgIGVjaG8gIglpZiBbIC1kICRsZGlyIF07IHRo ZW4gdHJ1ZTsgZWxzZSBta2RpciAkbGRpcjsgY2htb2QgYStyeCAkbGRpcjsg Zmk7Ig0KICAgZWxzZQ0KLSAgICBsZGlyPSckKGxpYnN1YmRpciknDQorICAg IGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknDQogICBmaQ0KICAgZWNo byAnCSQoSU5TVEFMTF9EQVRBKScgJHtkaXJ9L2xpYmdjYy5hICR7bGRpcn0v DQogICBlY2hvICcJJChSQU5MSUJfRk9SX1RBUkdFVCknICR7bGRpcn0vbGli Z2NjLmENCkBAIC00OTUsMTAgKzQ5NSwxMCBAQA0KICAgICBkaXI9YGVjaG8g JHttbH0gfCBzZWQgLWUgJ3MvOy4qJC8vJyAtZSAncy89LyQoRVEpL2cnYA0K ICAgICBpZiBbICRkaXIgIT0gLiBdOyB0aGVuDQogICAgICAgb3V0PSR7ZGly fS8kZg0KLSAgICAgIGxkaXI9JyQobGlic3ViZGlyKScvJGRpcg0KKyAgICAg IGxkaXI9JyQoREVTVERJUikkKGxpYnN1YmRpciknLyRkaXINCiAgICAgZWxz ZQ0KICAgICAgIG91dD0kZg0KLSAgICAgIGxkaXI9JyQobGlic3ViZGlyKScN CisgICAgICBsZGlyPSckKERFU1RESVIpJChsaWJzdWJkaXIpJw0KICAgICBm aQ0KICAgICBlY2hvICcJJChJTlNUQUxMX0RBVEEpJyAkb3V0ICRsZGlyLw0K ICAgZG9uZQ0KSW5kZXg6IGdjYy9hZGEvTWFrZS1sYW5nLmluDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3Zz L2djYy1jdnMvZ2NjL2djYy9hZGEvTWFrZS1sYW5nLmluLHYNCnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMA0KZGlmZiAtdSAtcjEuMjAgTWFrZS1sYW5nLmlu DQotLS0gZ2NjL2FkYS9NYWtlLWxhbmcuaW4JMjMgRGVjIDIwMDIgMTk6MjY6 NDYgLTAwMDAJMS4yMA0KKysrIGdjYy9hZGEvTWFrZS1sYW5nLmluCTEgSmFu IDIwMDMgMTc6Mjc6MzIgLTAwMDANCkBAIC0zOTQsMzAgKzM5NCwzMCBAQA0K IAkkKHNyY2RpcikvYWRhL2duYXRfcm0uaW5mbyAkKHNyY2RpcikvYWRhL2du YXQtc3R5bGUuaW5mbw0KIA0KIGFkYS5pbnN0YWxsLWluZm86DQotCS1ybSAt ZiAkKGluZm9kaXIpL2duYXRfdWdfKi5pbmZvKg0KLQktcm0gLWYgJChpbmZv ZGlyKS9nbmF0X3JtLmluZm8qIA0KLQktcm0gLWYgJChpbmZvZGlyKS9nbmF0 LXN0eWxlLmluZm8qIA0KKwktcm0gLWYgJChERVNURElSKSQoaW5mb2Rpcikv Z25hdF91Z18qLmluZm8qDQorCS1ybSAtZiAkKERFU1RESVIpJChpbmZvZGly KS9nbmF0X3JtLmluZm8qIA0KKwktcm0gLWYgJChERVNURElSKSQoaW5mb2Rp cikvZ25hdC1zdHlsZS5pbmZvKiANCiAJaWYgWyAtZiAkKHNyY2RpcikvYWRh L2duYXRfdWdfdW54LmluZm8gXTsgdGhlbiBcDQogCSAgZm9yIGYgaW4gJChz cmNkaXIpL2FkYS9nbmF0X3VnXyouaW5mbyogXA0KIAkJJChzcmNkaXIpL2Fk YS9nbmF0X3JtLmluZm8qIFwNCiAJCSQoc3JjZGlyKS9hZGEvZ25hdC1zdHls ZS5pbmZvKjsgZG8gXA0KIAkgICAgcmVhbGZpbGU9YGVjaG8gJCRmIHwgc2Vk IC1lICdzfC4qL1woW14vXSpcKSQkfFwxfCdgOyBcDQotCSAgICAkKElOU1RB TExfREFUQSkgJCRmICQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0KKwkgICAg JChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChpbmZvZGlyKS8kJHJl YWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KIAllbHNlIHRydWU7IGZpDQogCS1p ZiAkKFNIRUxMKSAtYyAnaW5zdGFsbC1pbmZvIC0tdmVyc2lvbicgPi9kZXYv bnVsbCAyPiYxOyB0aGVuIFwNCi0JICBpZiBbIC1mICQoaW5mb2RpcikvZGly IF0gOyB0aGVuIFwNCisJICBpZiBbIC1mICQoREVTVERJUikkKGluZm9kaXIp L2RpciBdIDsgdGhlbiBcDQogCSAgICBmb3IgZiBpbiBnbmF0X3VnX3Ztcy5p bmZvIGduYXRfdWdfd250LmluZm8gZ25hdF91Z191bnguaW5mbyBcDQogCQln bmF0X3VnX3Z4dy5pbmZvIGduYXRfcm0uaW5mbyBnbmF0LXN0eWxlLmluZm87 IGRvIFwNCi0JCWlmIFsgLWYgJChpbmZvZGlyKS8kJGYgXTsgdGhlbiBcDQot CQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5mb2RpcikvZGlyICQo aW5mb2RpcikvJCRmOyBcDQorCQlpZiBbIC1mICQoREVTVERJUikkKGluZm9k aXIpLyQkZiBdOyB0aGVuIFwNCisJCSAgaW5zdGFsbC1pbmZvIC0tZGlyLWZp bGU9JChERVNURElSKSQoaW5mb2RpcikvZGlyICQoREVTVERJUikkKGluZm9k aXIpLyQkZjsgXA0KIAkJZWxzZSB0cnVlOyBmaTsgXA0KIAkgICAgZG9uZTsg XA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0cnVlOyBmaTsNCi0J LWNobW9kIGEteCAkKGluZm9kaXIpL2duYXRfdWdfdm1zLmluZm8qICQoaW5m b2RpcikvZ25hdF91Z193bnQuaW5mbyoNCi0JLWNobW9kIGEteCAkKGluZm9k aXIpL2duYXRfdWdfdW54LmluZm8qICQoaW5mb2RpcikvZ25hdF91Z192eHcu aW5mbyoNCi0JLWNobW9kIGEteCAkKGluZm9kaXIpL2duYXRfcm0uaW5mbyog JChpbmZvZGlyKS9nbmF0LXN0eWxlLmluZm8qDQorCS1jaG1vZCBhLXggJChE RVNURElSKSQoaW5mb2RpcikvZ25hdF91Z192bXMuaW5mbyogJChERVNURElS KSQoaW5mb2RpcikvZ25hdF91Z193bnQuaW5mbyoNCisJLWNobW9kIGEteCAk KERFU1RESVIpJChpbmZvZGlyKS9nbmF0X3VnX3VueC5pbmZvKiAkKERFU1RE SVIpJChpbmZvZGlyKS9nbmF0X3VnX3Z4dy5pbmZvKg0KKwktY2htb2QgYS14 ICQoREVTVERJUikkKGluZm9kaXIpL2duYXRfcm0uaW5mbyogJChERVNURElS KSQoaW5mb2RpcikvZ25hdC1zdHlsZS5pbmZvKg0KIA0KIGFkYS9nbmF0X3Vn X3VueC5kdmkgOiAkKHNyY2RpcikvYWRhL2duYXRfdWdfdW54LnRleGkgXA0K IAkkKHNyY2RpcikvZG9jL2luY2x1ZGUvZmRsLnRleGkgJChzcmNkaXIpL2Rv Yy9pbmNsdWRlL2djYy1jb21tb24udGV4aQ0KQEAgLTQ2OSwyMTcgKzQ2OSwy MTcgQEANCiAJIHRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGJpbmQtY3Jvc3Mk KGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmluZC1jcm9zcyQoZXhlZXh0 KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRiaW5kJChleGVleHQp OyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4g XA0KLQkgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0YmluZCQoZXhl ZXh0KTsgXA0KLQkgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJpbmQt Y3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4 dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRiaW5kJChleGVleHQpOyBcDQorCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJpbmQkKGV4ZWV4dCk7 IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmluLy4g XSA7IHRoZW4gXA0KKwkgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGly KS9iaW4vZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCisJICAgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRiaW5kLWNyb3NzJChleGVleHQpICQoREVTVERJUikk KHRvb2xkaXIpL2Jpbi9nbmF0YmluZCQoZXhlZXh0KTsgXA0KICAgICAgICAg ICAgIGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikv Z25hdGJpbmQkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0YmluZCQoZXhlZXh0KSAkKGJpbmRpcikvZ25hdGJpbmQkKGV4ZWV4 dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25hdGJp bmQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 YmluZCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRiaW5kJChl eGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGduYXQx JChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGJs LWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0KTsg XA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRibC1jcm9zcyQoZXhl ZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0 KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVu IFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRibCQoZXhl ZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRibC1j cm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCk7 IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRibCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0YmwkKGV4ZWV4dCk7IFwNCisJICAg IGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4g XA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQodG9vbGRpcikvYmluL2du YXRibCQoZXhlZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRibC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdGJsJChleGVleHQpOyBcDQogICAgICAgICAgICAgZmk7IFwNCiAJ ICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4 dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwkKGV4ZWV4 dCkgJChiaW5kaXIpL2duYXRibCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkg JChERVNURElSKSQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwkKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS9nbmF0YmwkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJ ZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBc DQogCSAgaWYgWyAtZiBnbmF0Y2hvcC1jcm9zcyQoc2hleHQpIF0gOyBcDQog CSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRjaG9wJChzaGV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSAkKHNyY2RpcikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoc2hleHQpOyBcDQotCSAgICBp ZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAg cm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKHNoZXh0KTsgXA0KLQkg ICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRjaG9wJChzaGV4dCkgJCh0 b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0p ICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9w JChzaGV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2Rp cikvYWRhL2duYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdGNob3AkKHNoZXh0KTsgXA0KKwkgICAgaWYg WyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQor CSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNo b3AkKHNoZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXRjaG9wJChzaGV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRj aG9wJChleGVleHQpOyBcDQogICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNl IFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0Y2hvcCQoc2hleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL2FkYS9nbmF0 Y2hvcCQoc2hleHQpICQoYmluZGlyKS9nbmF0Y2hvcCQoc2hleHQpOyBcDQor CSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRjaG9wJChzaGV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvYWRh L2duYXRjaG9wJChzaGV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hv cCQoc2hleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBbIC1mIGdu YXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsgLWYgZ25h dGNob3AtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAg ICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKGV4 ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1j cm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRj aG9wJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmlu Ly4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4v Z25hdGNob3AkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jpbi9n bmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhl ZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0 b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERF U1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4dCk7IFwNCisJ ICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcC1jcm9zcyQoZXhl ZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4ZWV4 dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAg JChSTSkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQotCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChiaW5kaXIp L2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIp JChiaW5kaXIpL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdGNob3AkKGV4ZWV4dCkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0K IAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJ ICBpZiBbIC1mIGduYXQtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVu IFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXQt Y3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 JChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikvYmluLy4g XSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9iaW4vZ25h dCQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXQtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdCQoZXhlZXh0 KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXQtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsgXA0KKwkgICAgaWYg WyAtZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQor CSAgICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdCQo ZXhlZXh0KTsgXA0KKwkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXQt Y3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXQk KGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0K LQkgICAgJChSTSkgJChiaW5kaXIpL2duYXQkKGV4ZWV4dCk7IFwNCi0JICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0JChleGVleHQpICQoYmluZGlyKS9n bmF0JChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5k aXIpL2duYXQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdCQoZXhl ZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQo ZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRrci1j cm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0a3IkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4 dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0a3IkKGV4ZWV4dCk7 IFwNCi0JICAgIGlmIFsgLWQgJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBc DQotCSAgICAgICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0a3IkKGV4ZWV4 dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0a3ItY3Jv c3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVleHQpOyBc DQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2Fs aWFzKS1nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdGtyJChleGVleHQpOyBcDQorCSAgICBp ZiBbIC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwN CisJICAgICAgIHJtIC1mICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0 a3IkKGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0a3ItY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmlu L2duYXRrciQoZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAg ZWxzZSBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGtyJChleGVleHQp OyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGtyJChleGVleHQp ICQoYmluZGlyKS9nbmF0a3IkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQo REVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdGtyJChleGVleHQpICQoREVTVERJUikk KGJpbmRpcikvZ25hdGtyJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZp DQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0K IAkgIGlmIFsgLWYgZ25hdGxpbmstY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGxpbmskKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1k ICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYg JCh0b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwNCi0JICAgICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bGluay1jcm9zcyQoZXhlZXh0KSAk KHRvb2xkaXIpL2Jpbi9nbmF0bGluayQoZXhlZXh0KTsgXA0KKwkgICAgJChS TSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGxp bmskKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 bGluay1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0bGluayQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAt ZCAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAg ICAgICBybSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGxpbmsk KGV4ZWV4dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 bGluay1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdGxpbmskKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkg IGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRsaW5rJChleGVl eHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxpbmskKGV4 ZWV4dCkgJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQpOyBcDQorCSAgICAk KFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxpbmskKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS9nbmF0bGluayQoZXhlZXh0KTsgXA0KIAkg IGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsg XA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRscy1jcm9zcyQoZXhlZXh0 KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCk7IFwNCi0JICAgIGlm IFsgLWQgJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQotCSAgICAgICBy bSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCk7IFwNCi0JICAg ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkg JCh0b29sZGlyKS9iaW4vZ25hdGxzJChleGVleHQpOyBcDQorCSAgICAkKFJN KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMk KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMt Y3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGxzJChleGVleHQpOyBcDQorCSAgICBpZiBbIC1kICQoREVT VERJUikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCisJICAgICAgIHJt IC1mICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCk7 IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bHMtY3Jvc3Mk KGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRscyQoZXhl ZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQotCSAg ICAkKFJNKSAkKGJpbmRpcikvZ25hdGxzJChleGVleHQpOyBcDQotCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdGxzJChleGVleHQpICQoYmluZGlyKS9n bmF0bHMkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJp bmRpcikvZ25hdGxzJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdGxzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25h dGxzJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBbIC1m IGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsgLWYg Z25hdG1ha2UtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0J ICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1ha2Uk KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFr ZS1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXRtYWtlJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikv YmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9i aW4vZ25hdG1ha2UkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jp bi9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1ha2UkKGV4ZWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQo ZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIp JCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4ZWV4dCk7IFwN CisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWFrZS1jcm9zcyQo ZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4 ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkg ICAgJChSTSkgJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQpOyBcDQotCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UkKGV4ZWV4dCkgJChiaW5k aXIpL2duYXRtYWtlJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXRtYWtlJChleGVleHQpOyBcDQorCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdG1ha2UkKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlm aQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwN CiAJICBpZiBbIC1mIGduYXRtZW0tY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdG1lbSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRtZW0tY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0bWVtJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVl eHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1lbS1jcm9z cyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFz KS1nbmF0bWVtJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJN KSAkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNU QUxMX1BST0dSQU0pIGduYXRtZW0kKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRt ZW0kKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRp cikvZ25hdG1lbSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRtZW0kKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0 bWVtJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBbIC1m IGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsgLWYg Z25hdG5hbWUtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0J ICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG5hbWUk KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bmFt ZS1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXRuYW1lJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bmFtZSQoZXhlZXh0KTsgXA0K KwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRuYW1lLWNyb3NzJChleGVl eHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRu YW1lJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICAkKFJNKSAkKGJp bmRpcikvZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0bmFtZSQoZXhlZXh0KSAkKGJpbmRpcikvZ25hdG5hbWUk KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv Z25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0bmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRu YW1lJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBbIC1m IGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsgLWYg Z25hdHByZXAtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0J ICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAk KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJl cC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXRwcmVwJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9vbGRpcikv YmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29sZGlyKS9i aW4vZ25hdHByZXAkKGV4ZWV4dCk7IFwNCi0JICAgICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQoZXhlZXh0KSAkKHRvb2xkaXIpL2Jp bi9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4ZWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQo ZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIp JCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCk7IFwN CisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHJlcC1jcm9zcyQo ZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHByZXAkKGV4 ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkg ICAgJChSTSkgJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpOyBcDQotCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAkKGV4ZWV4dCkgJChiaW5k aXIpL2duYXRwcmVwJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXRwcmVwJChleGVleHQpOyBcDQorCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdHByZXAkKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlm aQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwN CiAJICBpZiBbIC1mIGduYXRwc3RhLWNyb3NzJChleGVleHQpIF0gOyBcDQog CSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRwc3RhJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFy Z2V0X2FsaWFzKS1nbmF0cHN0YSQoZXhlZXh0KTsgXA0KLQkgICAgaWYgWyAt ZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAgICAgIHJtIC1m ICQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpOyBcDQotCSAgICAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHBzdGEtY3Jvc3MkKGV4ZWV4dCkg JCh0b29sZGlyKS9iaW4vZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCisJICAgICQo Uk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRw c3RhJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCisJICAgIGlmIFsg LWQgJChERVNURElSKSQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkg ICAgICAgcm0gLWYgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRwc3Rh JChleGVleHQpOyBcDQorCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dHBzdGEtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmlu L2duYXRwc3RhJChleGVleHQpOyBcDQogICAgICAgICAgICAgZmk7IFwNCiAJ ICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0cHN0YSQoZXhl ZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRwc3RhJChl eGVleHQpICQoYmluZGlyKS9nbmF0cHN0YSQoZXhlZXh0KTsgXA0KKwkgICAg JChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0cHN0YSQoZXhlZXh0KTsg XA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRwc3RhJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCiAJ ICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7 IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0eHJlZi1jcm9zcyQoZXhl ZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0eHJlZiQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXR4cmVmLWNyb3NzJChleGVleHQpICQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHhyZWYkKGV4ZWV4dCk7IFwN CisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXR4cmVmJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJP R1JBTSkgZ25hdHhyZWYtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCiAJ ICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0eHJlZiQoZXhl ZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4cmVmJChl eGVleHQpICQoYmluZGlyKS9nbmF0eHJlZiQoZXhlZXh0KTsgXA0KKwkgICAg JChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0eHJlZiQoZXhlZXh0KTsg XA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4cmVmJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCiAJ ICBmaSA7IFwNCiAgICAgZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkg XSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0ZmluZC1jcm9zcyQo ZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0ZmluZCQoZXhlZXh0KTsgXA0KLQkg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRmaW5kLWNyb3NzJChleGVleHQp ICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGZpbmQkKGV4ZWV4dCk7 IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRmaW5kJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdGZpbmQtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGZpbmQkKGV4ZWV4dCk7IFwN CiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0ZmluZCQo ZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRmaW5k JChleGVleHQpICQoYmluZGlyKS9nbmF0ZmluZCQoZXhlZXh0KTsgXA0KKwkg ICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0ZmluZCQoZXhlZXh0 KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRmaW5kJChleGVl eHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGZpbmQkKGV4ZWV4dCk7IFwN CiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkg XSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0Y2hvcCQoZXhlZXh0 KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2du YXRjaG9wJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkg Z25hdGNob3AkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRjaG9wJChleGVleHQp OyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRjaG9w JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNo b3AkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhl ZXh0KTsgXA0KIAkgIGZpIDsgXA0KICMNCiAjIEduYXRsYnIgaXMgb25seSB1 c2VkIG9uIFZNUy4NCkBAIC02ODgsOCArNjg4LDggQEANCiAJdGhlbiBcDQog CSAgaWYgWyAtZiBnbmF0bGJyJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBc DQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KTsgXA0K LQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRsYnIkKGV4ZWV4dCkgJChi aW5kaXIpL2duYXRsYnIkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRsYnIkKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS9nbmF0bGJyJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZp DQogIw0KQEAgLTY5Nyw4ICs2OTcsOCBAQA0KICMNCiAJLWlmIFsgLWYgZ25h dDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQotCSAgICAkKFJNKSAkKGJp bmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRkbGwkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRkbGwkKGV4 ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ25h dGRsbCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXRkbGwkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0ZGxsJChl eGVleHQpOyBcDQogCWZpDQogIw0KICMgRmluYWxseSwgaW5zdGFsbCB0aGUg bGlicmFyeQ0KQEAgLTcxNSw0NiArNzE1LDQ2IEBADQogYWRhLmluc3RhbGwt bWFuOg0KIA0KIGFkYS51bmluc3RhbGw6DQotCS0kKFJNKSAkKGJpbmRpcikv Z25hdGJpbmQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0Ymwk KGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0 KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXQkKGV4ZWV4dCkNCi0JLSQoUk0p ICQoYmluZGlyKS9nbmF0ZGxsJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRp cikvZ25hdGtyJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGxp bmskKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0bHMkKGV4ZWV4 dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0bWFrZSQoZXhlZXh0KQ0KLQkt JChSTSkgJChiaW5kaXIpL2duYXRtZW0kKGV4ZWV4dCkNCi0JLSQoUk0pICQo YmluZGlyKS9nbmF0bmFtZSQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIp L2duYXRwcmVwJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdHBz dGEkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGJpbmQkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGJsJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChleGVleHQpDQotCS0kKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXQkKGV4ZWV4dCkNCi0J LSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGtyKGV4ZWV4 dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGxp bmskKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGxzJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRp cikvJCh0YXJnZXRfYWxpYXMpLWduYXRtZW0kKGV4ZWV4dCkNCi0JLSQoUk0p ICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG5hbWUkKGV4ZWV4dCkN Ci0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAk KGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdHBzdGEkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2du YXRiaW5kJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0 YmwkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2duYXRjaG9w JChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0JChleGVl eHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0ZGxsJChleGVleHQp DQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0a3IkKGV4ZWV4dCkNCi0J LSQoUk0pICQodG9vbGRpcikvYmluL2duYXRsaW5rJChleGVleHQpDQotCS0k KFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCkNCi0JLSQoUk0p ICQodG9vbGRpcikvYmluL2duYXRtYWtlJChleGVleHQpDQotCS0kKFJNKSAk KHRvb2xkaXIpL2Jpbi9nbmF0bWVtJChleGVleHQpDQotCS0kKFJNKSAkKHRv b2xkaXIpL2Jpbi9nbmF0bmFtZSQoZXhlZXh0KQ0KLQktJChSTSkgJCh0b29s ZGlyKS9iaW4vZ25hdHByZXAkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRp cikvYmluL2duYXRwc3RhJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIp JChiaW5kaXIpL2duYXRiaW5kJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXRibCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNU RElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0JChleGVleHQpDQorCS0kKFJNKSAkKERF U1RESVIpJChiaW5kaXIpL2duYXRkbGwkKGV4ZWV4dCkNCisJLSQoUk0pICQo REVTVERJUikkKGJpbmRpcikvZ25hdGtyJChleGVleHQpDQorCS0kKFJNKSAk KERFU1RESVIpJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRscyQoZXhlZXh0KQ0KKwktJChS TSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWFrZSQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bWVtJChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRuYW1lJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRwcmVwJChleGVl eHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRwc3RhJChl eGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0YmluZCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGJsJChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KQ0KKwktJChSTSkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGtyKGV4ZWV4 dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRsaW5rJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bHMkKGV4ZWV4dCkNCisJLSQo Uk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRt YWtlJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nbmF0bWVtJChleGVleHQpDQorCS0kKFJNKSAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bmFtZSQoZXhl ZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdHByZXAkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikk KGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwc3RhJChleGVleHQpDQor CS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4 ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0 YmwkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jp bi9nbmF0Y2hvcCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQodG9v bGRpcikvYmluL2duYXQkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikk KHRvb2xkaXIpL2Jpbi9nbmF0ZGxsJChleGVleHQpDQorCS0kKFJNKSAkKERF U1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGxpbmskKGV4ZWV4dCkN CisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4 ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0 bWFrZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQodG9vbGRpcikv YmluL2duYXRtZW0kKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRv b2xkaXIpL2Jpbi9nbmF0bmFtZSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNU RElSKSQodG9vbGRpcikvYmluL2duYXRwcmVwJChleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdHBzdGEkKGV4ZWV4dCkN CiAjIEduYXRsYnIgYW5kIEduYXRjaG9wIGFyZSBvbmx5IHVzZWQgb24gVk1T DQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGxiciQoZXhlZXh0KSAkKGJpbmRp cikvZ25hdGNob3AkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJp bmRpcikvZ25hdGxiciQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRjaG9wJChleGVleHQpDQogDQogIyBDbGVhbiBob29rczoNCiAjIEEgbG90 IG9mIHRoZSBhbmNpbGxhcnkgZmlsZXMgYXJlIGRlbGV0ZWQgYnkgdGhlIG1h aW4gbWFrZWZpbGUuDQpJbmRleDogZ2NjL2FkYS9NYWtlZmlsZS5pbg0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3Jj L2N2cy9nY2MtY3ZzL2djYy9nY2MvYWRhL01ha2VmaWxlLmluLHYNCnJldHJp ZXZpbmcgcmV2aXNpb24gMS4zNg0KZGlmZiAtdSAtcjEuMzYgTWFrZWZpbGUu aW4NCi0tLSBnY2MvYWRhL01ha2VmaWxlLmluCTI0IFNlcCAyMDAyIDAzOjQ0 OjMyIC0wMDAwCTEuMzYNCisrKyBnY2MvYWRhL01ha2VmaWxlLmluCTEgSmFu IDIwMDMgMTc6Mjc6MzMgLTAwMDANCkBAIC0xNzExLDM4ICsxNzExLDM4IEBA DQogIwlDcmVhdGUgdGhlIGRpcmVjdG9yeSBiZWZvcmUgZGVsZXRpbmcgaXQs IGluIGNhc2UgdGhlIGRpcmVjdG9yeSBpcw0KICMJYSBsaXN0IG9mIGRpcmVj dG9yaWVzIChhcyBpdCBtYXkgYmUgb24gVk1TKS4gVGhpcyBlbnN1cmVzIHdl IGFyZQ0KICMJZGVsZXRpbmcgdGhlIHJpZ2h0IG9uZS4NCi0JLSQoTUtESVIp ICQoQURBX1JUTF9PQkpfRElSKQ0KLQktJChNS0RJUikgJChBREFfSU5DTFVE RV9ESVIpDQotCSQoUk1ESVIpICQoQURBX1JUTF9PQkpfRElSKQ0KLQkkKFJN RElSKSAkKEFEQV9JTkNMVURFX0RJUikNCi0JLSQoTUtESVIpICQoQURBX1JU TF9PQkpfRElSKQ0KLQktJChNS0RJUikgJChBREFfSU5DTFVERV9ESVIpDQot CS0kKElOU1RBTExfREFUQSkgYWRhL3J0cy9NYWtlZmlsZS5hZGFsaWIgJChB REFfUlRMX09CSl9ESVIpDQorCS0kKE1LRElSKSAkKERFU1RESVIpJChBREFf UlRMX09CSl9ESVIpDQorCS0kKE1LRElSKSAkKERFU1RESVIpJChBREFfSU5D TFVERV9ESVIpDQorCSQoUk1ESVIpICQoREVTVERJUikkKEFEQV9SVExfT0JK X0RJUikNCisJJChSTURJUikgJChERVNURElSKSQoQURBX0lOQ0xVREVfRElS KQ0KKwktJChNS0RJUikgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKQ0K KwktJChNS0RJUikgJChERVNURElSKSQoQURBX0lOQ0xVREVfRElSKQ0KKwkt JChJTlNUQUxMX0RBVEEpIGFkYS9ydHMvTWFrZWZpbGUuYWRhbGliICQoREVT VERJUikkKEFEQV9SVExfT0JKX0RJUikNCiAJZm9yIGZpbGUgaW4gYWRhL3J0 cy8qLmFsaTsgZG8gXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAk KEFEQV9SVExfT0JKX0RJUik7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAk JGZpbGUgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKTsgXA0KIAlkb25l DQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzLyokKGFyZXh0KTtkbyBcDQotCSAg ICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9PQkpfRElSKTsg XA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChB REFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBpZmVxICgkKHN0cmlwICQo ZmlsdGVyLW91dCBhbHBoYSUgZGVjIHZtcyUgb3BlbnZtcyUgYWxwaGF2bXMl LCQodGFyZykpKSwpDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzL2xpYiokKHNv ZXh0KTtkbyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURB X1JUTF9PQkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmls ZSAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBl bHNlDQogCS1mb3IgZmlsZSBpbiBhZGEvcnRzL2xpYiotKiokKHNvZXh0KTtk byBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9P QkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERF U1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiBlbmRpZg0K LQktJChMTl9TKSAkKEFEQV9SVExfT0JKX0RJUikvbGliZ25hdC0qJChzb2V4 dCkgXA0KLQkgICAgICAgJChBREFfUlRMX09CSl9ESVIpL2xpYmduYXQkKHNv ZXh0KQ0KLQktJChMTl9TKSAkKEFEQV9SVExfT0JKX0RJUikvbGliZ25hcmwt KiQoc29leHQpIFwNCi0JICAgICAgICQoQURBX1JUTF9PQkpfRElSKS9saWJn bmFybCQoc29leHQpDQorCS0oIGNkICQoREVTVERJUikkKEFEQV9SVExfT0JK X0RJUikgJiYgXA0KKwkgICQoTE5fUykgbGliZ25hdC0qJChzb2V4dCkgbGli Z25hdCQoc29leHQpICkNCisJLSggY2QgJChERVNURElSKSQoQURBX1JUTF9P QkpfRElSKSAmJiBcDQorCSAgJChMTl9TKSBsaWJnbmFybC0qJChzb2V4dCkg bGliZ25hcmwkKHNvZXh0KSApDQogIyBUaGlzIGNvcHkgbXVzdCBiZSBkb25l IHByZXNlcnZpbmcgdGhlIGRhdGUgb24gdGhlIG9yaWdpbmFsIGZpbGUuDQog CWZvciBmaWxlIGluIGFkYS9ydHMvKi5hZGIgYWRhL3J0cy8qLmFkczsgZG8g XA0KLQkgICAgJChJTlNUQUxMX0RBVEFfREFURSkgJCRmaWxlICQoQURBX0lO Q0xVREVfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEFfREFURSkgJCRm aWxlICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJUik7IFwNCiAJZG9uZQ0K LQljZCAkKEFEQV9JTkNMVURFX0RJUik7ICQoQ0hNT0QpIGEtd3ggKi5hZGIN Ci0JY2QgJChBREFfSU5DTFVERV9ESVIpOyAkKENITU9EKSBhLXd4ICouYWRz DQorCWNkICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJUik7ICQoQ0hNT0Qp IGEtd3ggKi5hZGINCisJY2QgJChERVNURElSKSQoQURBX0lOQ0xVREVfRElS KTsgJChDSE1PRCkgYS13eCAqLmFkcw0KIA0KIC4uL3N0YW1wLWduYXRsaWIy Og0KIAkkKFJNKSBydHMvcy0qLmFsaQ0KQEAgLTE4NTQsNyArMTg1NCw3IEBA DQogICAgICAgICBlbmRpZg0KIA0KIGluc3RhbGwtcnRzOiBmb3JjZQ0KLQkk KENQKSAtciBydHMtJChSVFNfTkFNRSkgJChsaWJzdWJkaXIpLw0KKwkkKENQ KSAtciBydHMtJChSVFNfTkFNRSkgJChERVNURElSKSQobGlic3ViZGlyKS8N CiANCiBydHMtbm9uZTogZm9yY2UNCiAJJChNQUtFKSAkKEZMQUdTX1RPX1BB U1MpIHByZXBhcmUtcnRzIFwNCkluZGV4OiBnY2MvY29uZmlnL3Qtc2xpYmdj Yy1lbGYtdmVyDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9jb25maWcvdC1z bGliZ2NjLWVsZi12ZXIsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQNCmRp ZmYgLXUgLXIxLjQgdC1zbGliZ2NjLWVsZi12ZXINCi0tLSBnY2MvY29uZmln L3Qtc2xpYmdjYy1lbGYtdmVyCTkgTWF5IDIwMDIgMjE6MDE6NTMgLTAwMDAJ MS40DQorKysgZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxmLXZlcgkyOSBEZWMg MjAwMiAxNTo1Nzo0NiAtMDAwMA0KQEAgLTE5LDExICsxOSwxMSBAQA0KICMg JChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3QgaXQgZnJvbSBl eHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5tay4gIFdlIHdh bnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUuDQog U0hMSUJfSU5TVEFMTCA9IFwNCi0JJCQoU0hFTEwpICQkKHNyY2RpcikvbWtp bnN0YWxsZGlycyAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsg XA0KKwkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQkKERF U1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCk7IFwNCiAJ JChJTlNUQUxMX0RBVEEpICQoU0hMSUJfTkFNRSkgXA0KLQkgICQkKHNsaWJk aXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0K LQlybSAtZiAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNI TElCX1NPTElOSyk7IFwNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIpJChT SExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0KKwlybSAt ZiAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp LyQoU0hMSUJfU09MSU5LKTsgXA0KIAkkKExOX1MpICQoU0hMSUJfU09OQU1F KSBcDQotCSAgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChT SExJQl9TT0xJTkspDQorCSAgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hM SUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykNCiBTSExJQl9NS01B UCA9ICQoc3JjZGlyKS9ta21hcC1zeW12ZXIuYXdrDQogU0hMSUJfTUFQRklM RVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4OiBnY2MvY29u ZmlnL3Qtc2xpYmdjYy1zbGQNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2Nv bmZpZy90LXNsaWJnY2Mtc2xkLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4z DQpkaWZmIC11IC1yMS4zIHQtc2xpYmdjYy1zbGQNCi0tLSBnY2MvY29uZmln L3Qtc2xpYmdjYy1zbGQJOSBNYXkgMjAwMiAyMTowMTo1MyAtMDAwMAkxLjMN CisrKyBnY2MvY29uZmlnL3Qtc2xpYmdjYy1zbGQJMjkgRGVjIDIwMDIgMTU6 NTg6MzAgLTAwMDANCkBAIC0xNywxMSArMTcsMTEgQEANCiAjICQoc2xpYmRp cikgZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9u IHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMg ZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KIFNITElCX0lO U1RBTEwgPSBcDQotCSQkKFNIRUxMKSAkJChzcmNkaXIpL21raW5zdGFsbGRp cnMgJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCk7IFwNCisJJCQo U0hFTEwpICQkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkJChERVNURElSKSQk KHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpOyBcDQogCSQoSU5TVEFM TF9EQVRBKSAkKFNITElCX05BTUUpIFwNCi0JICAkJChzbGliZGlyKSQoU0hM SUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTkFNRSk7IFwNCi0Jcm0gLWYg JCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJ TkspOyBcDQorCSAgJCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJ QkRJUl9RVUFMKS8kKFNITElCX1NPTkFNRSk7IFwNCisJcm0gLWYgJCQoREVT VERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElC X1NPTElOSyk7IFwNCiAJJChMTl9TKSAkKFNITElCX1NPTkFNRSkgXA0KLQkg ICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09M SU5LKQ0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJE SVJfUVVBTCkvJChTSExJQl9TT0xJTkspDQogU0hMSUJfTUtNQVAgPSAkKHNy Y2RpcikvbWttYXAtc3ltdmVyLmF3aw0KIFNITElCX01BUEZJTEVTID0gJChz cmNkaXIpL2xpYmdjYy1zdGQudmVyDQpJbmRleDogZ2NjL2NvbmZpZy9hbHBo YS90LW9zZjQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv dXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9hbHBo YS90LW9zZjQsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUNCmRpZmYgLXUg LXIxLjUgdC1vc2Y0DQotLS0gZ2NjL2NvbmZpZy9hbHBoYS90LW9zZjQJMTMg SnVuIDIwMDEgMTQ6MjY6MDIgLTAwMDAJMS41DQorKysgZ2NjL2NvbmZpZy9h bHBoYS90LW9zZjQJMjkgRGVjIDIwMDIgMTU6Mjk6NTQgLTAwMDANCkBAIC0x Nyw2ICsxNyw2IEBADQogCSQoTE5fUykgJChTSExJQl9OQU1FKSAkKFNITElC X1NPTkFNRSkNCiAjICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0byBwcm90 ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQogIyBsaWJn Y2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1YWwgaW5z dGFsbCB0aW1lLg0KLVNITElCX0lOU1RBTEwgPSAkKElOU1RBTExfREFUQSkg JChTSExJQl9OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwN Ci0Jcm0gLWYgJCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsgXA0KLQkkKExO X1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX05BTUUp DQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAkKFNITElCX05B TUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9TT05BTUUpOyBc DQorCXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9OQU1F KTsgXA0KKwkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChERVNURElSKSQk KHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCkluZGV4OiBnY2MvY29uZmlnL2Fy Yy90LWFyYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91 c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL2FyYy90 LWFyYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEu NSB0LWFyYw0KLS0tIGdjYy9jb25maWcvYXJjL3QtYXJjCTMxIE1heSAyMDAy IDIwOjExOjQ5IC0wMDAwCTEuNQ0KKysrIGdjYy9jb25maWcvYXJjL3QtYXJj CTI5IERlYyAyMDAyIDE1OjMwOjQyIC0wMDAwDQpAQCAtNjIsMTAgKzYyLDEw IEBADQogaW5zdGFsbC1tdWx0aWxpYi1hcmM6IGluc3RhbGwtbXVsdGlsaWIN CiAJZm9yIGkgaW4gYCQoR0NDX0ZPUl9UQVJHRVQpIC0tcHJpbnQtbXVsdGkt bGliYDsgZG8gXA0KIAkgIGRpcj1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvOy4q JCQvLydgOyBcDQotCSAgcm0gLWYgJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0 aW5pdC5vOyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQke2Rpcn0vY3J0aW5p dC5vICQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0KLQkgIGNo bW9kIGEteCAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87IFwNCi0J ICBybSAtZiAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRmaW5pLm87IFwNCi0J ICAkKElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRmaW5pLm8gJChsaWJzdWJk aXIpLyQke2Rpcn0vY3J0ZmluaS5vOyBcDQotCSAgY2htb2QgYS14ICQobGli c3ViZGlyKS8kJHtkaXJ9L2NydGZpbmkubzsgXA0KKwkgIHJtIC1mICQoREVT VERJUikkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87IFwNCisJICAk KElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRpbml0Lm8gJChERVNURElSKSQo bGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0KKwkgIGNobW9kIGEt eCAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0aW5pdC5vOyBc DQorCSAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS8kJHtkaXJ9L2Ny dGZpbmkubzsgXA0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtkaXJ9L2NydGZp bmkubyAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0ZmluaS5v OyBcDQorCSAgY2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCR7 ZGlyfS9jcnRmaW5pLm87IFwNCiAJZG9uZQ0KSW5kZXg6IGdjYy9jb25maWcv YXJtL3QtbmV0YnNkDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9jb25maWcv YXJtL3QtbmV0YnNkLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41DQpkaWZm IC11IC1yMS41IHQtbmV0YnNkDQotLS0gZ2NjL2NvbmZpZy9hcm0vdC1uZXRi c2QJMTMgRGVjIDIwMDEgMTQ6MjQ6MDMgLTAwMDAJMS41DQorKysgZ2NjL2Nv bmZpZy9hcm0vdC1uZXRic2QJMjkgRGVjIDIwMDIgMTU6MzE6MzMgLTAwMDAN CkBAIC0xNiw5ICsxNiw5IEBADQogCSQoTE5fUykgJChTSExJQl9OQU1FKSAk KFNITElCX1NPTkFNRSkNCiAjICQoc2xpYmRpcikgZG91YmxlIHF1b3RlZCB0 byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxkaW5nDQog IyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1bnRpbCBhY3R1 YWwgaW5zdGFsbCB0aW1lLg0KLVNITElCX0lOU1RBTEwgPSAkKElOU1RBTExf REFUQSkgJChTSExJQl9OQU1FKSAkJChzbGliZGlyKS8kKFNITElCX1NPTkFN RSk7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikvJChTSExJQl9OQU1FKTsgXA0K LQkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChzbGliZGlyKS8kKFNITElC X05BTUUpDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAkKFNI TElCX05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9TT05B TUUpOyBcDQorCXJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJ Ql9OQU1FKTsgXA0KKwkkKExOX1MpICQoU0hMSUJfU09OQU1FKSAkJChERVNU RElSKSQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCiANCiAjIERvbid0IGJ1 aWxkIGVucXVpcmUNCiBFTlFVSVJFPQ0KSW5kZXg6IGdjYy9jb25maWcvaWE2 NC90LWhwdXgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv dXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9pYTY0 L3QtaHB1eCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAt cjEuNSB0LWhwdXgNCi0tLSBnY2MvY29uZmlnL2lhNjQvdC1ocHV4CTEzIFNl cCAyMDAyIDE2OjU4OjI3IC0wMDAwCTEuNQ0KKysrIGdjYy9jb25maWcvaWE2 NC90LWhwdXgJMSBKYW4gMjAwMyAxNzoyODo0NCAtMDAwMA0KQEAgLTQwLDkg KzQwLDkgQEANCiAJJChMTl9TKSBAc2hsaWJfYmFzZV9uYW1lQC5zbyBAc2hs aWJfYmFzZV9uYW1lQC5zby4wDQogIyAkKHNsaWJkaXIpIGRvdWJsZSBxdW90 ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBidWlsZGlu Zw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQgdW50aWwg YWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxMID0gJChJTlNU QUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALnNvICQkKHNsaWJkaXIpL0Bz aGxpYl9iYXNlX25hbWVALnNvLjA7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikv QHNobGliX2Jhc2VfbmFtZUAuc287IFwNCi0JJChMTl9TKSBAc2hsaWJfYmFz ZV9uYW1lQC5zby4wICQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNv OyBcDQotCWNobW9kICt4ICQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVA LnNvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJf YmFzZV9uYW1lQC5zbyAkJChERVNURElSKSQkKHNsaWJkaXIpL0BzaGxpYl9i YXNlX25hbWVALnNvLjA7IFwNCisJcm0gLWYgJCQoREVTVERJUikkJChzbGli ZGlyKS9Ac2hsaWJfYmFzZV9uYW1lQC5zbzsgXA0KKwkkKExOX1MpIEBzaGxp Yl9iYXNlX25hbWVALnNvLjAgJCQoREVTVERJUikkJChzbGliZGlyKS9Ac2hs aWJfYmFzZV9uYW1lQC5zbzsgXA0KKwljaG1vZCAreCAkJChERVNURElSKSQk KHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvDQogDQogU0hMSUJfTUtN QVAgPSAkKHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCkluZGV4OiBnY2MvY29u ZmlnL21pcHMvdC1pcmlzNS02DQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9j b25maWcvbWlwcy90LWlyaXM1LTYsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjINCmRpZmYgLXUgLXIxLjIgdC1pcmlzNS02DQotLS0gZ2NjL2NvbmZpZy9t aXBzL3QtaXJpczUtNgkyOSBKdWwgMjAwMiAyMjoyMTo0MSAtMDAwMAkxLjIN CisrKyBnY2MvY29uZmlnL21pcHMvdC1pcmlzNS02CTI5IERlYyAyMDAyIDE1 OjQwOjE3IC0wMDAwDQpAQCAtMjAsMTEgKzIwLDExIEBADQogIyAkKHNsaWJk aXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lv biB3aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlz IGRlbGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCiBTSExJQl9J TlNUQUxMID0gXA0KLQkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxk aXJzICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpOyBcDQorCSQk KFNIRUxMKSAkJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJCQoREVTVERJUikk JChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsgXA0KIAkkKElOU1RB TExfREFUQSkgJChTSExJQl9OQU1FKSBcDQotCSAgJCQoc2xpYmRpcikkKFNI TElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQotCXJtIC1m ICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09M SU5LKTsgXA0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NM SUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQorCXJtIC1mICQkKERF U1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJ Ql9TT0xJTkspOyBcDQogCSQoTE5fUykgJChTSExJQl9TT05BTUUpIFwNCi0J ICAkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NP TElOSykNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElC RElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKQ0KIFNITElCX01LTUFQID0gJChz cmNkaXIpL21rbWFwLWZsYXQuYXdrDQogU0hMSUJfTUFQRklMRVMgPSAkKHNy Y2RpcikvbGliZ2NjLXN0ZC52ZXINCkluZGV4OiBnY2MvY29uZmlnL3BhL3Qt aHB1eC1zaGxpYg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL3Bh L3QtaHB1eC1zaGxpYix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0KZGlm ZiAtdSAtcjEuMSB0LWhwdXgtc2hsaWINCi0tLSBnY2MvY29uZmlnL3BhL3Qt aHB1eC1zaGxpYgkxOSBEZWMgMjAwMSAxNzo1OTowNSAtMDAwMAkxLjENCisr KyBnY2MvY29uZmlnL3BhL3QtaHB1eC1zaGxpYgkyOSBEZWMgMjAwMiAxNTo1 MDoxNyAtMDAwMA0KQEAgLTEzLDcgKzEzLDcgQEANCiAjICQoc2xpYmRpcikg ZG91YmxlIHF1b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdo aWxlIGJ1aWxkaW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVs YXllZCB1bnRpbCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KIFNITElCX0lOU1RB TEwgPSAkKElOU1RBTExfREFUQSkgLW0gNTU1ICQoU0hMSUJfTkFNRSkgXA0K LQkkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCi0gICAgICAgIHJt IC1mICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSk7IFwNCi0gICAgICAgICQo TE5fUykgJChTSExJQl9TT05BTUUpICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFN RSkNCisJJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7 IFwNCisgICAgICAgIHJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChT SExJQl9OQU1FKTsgXA0KKyAgICAgICAgJChMTl9TKSAkKFNITElCX1NPTkFN RSkgJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElCX05BTUUpDQogDQpJ bmRleDogZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg0Mw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2Mt Y3ZzL2djYy9nY2MvY29uZmlnL3JzNjAwMC90LWFpeDQzLHYNCnJldHJpZXZp bmcgcmV2aXNpb24gMS4xOA0KZGlmZiAtdSAtcjEuMTggdC1haXg0Mw0KLS0t IGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NDMJMjAgSnVsIDIwMDIgMDI6MjA6 MTYgLTAwMDAJMS4xOA0KKysrIGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NDMJ MjkgRGVjIDIwMDIgMTU6NTE6MDkgLTAwMDANCkBAIC01NSw3ICs1NSw3IEBA DQogCXJtIC1mIEBtdWx0aWxpYl9kaXJAL3Noci5vDQogIyAkKHNsaWJkaXIp IGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3 aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRl bGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNU QUxMID0gJChJTlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALmEgJCQo c2xpYmRpcikvDQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBA c2hsaWJfYmFzZV9uYW1lQC5hICQkKERFU1RESVIpJCQoc2xpYmRpcikvDQog U0hMSUJfTElCUyA9IC1sYyBgY2FzZSBAc2hsaWJfYmFzZV9uYW1lQCBpbiAq cHRocmVhZCopIGVjaG8gLWxwdGhyZWFkIDs7IGVzYWNgDQogU0hMSUJfTUtN QVAgPSAkKHNyY2RpcikvbWttYXAtZmxhdC5hd2sNCiBTSExJQl9NQVBGSUxF UyA9ICQoc3JjZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5kZXg6IGdjYy9jb25m aWcvcnM2MDAwL3QtYWl4NTINCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2Nv bmZpZy9yczYwMDAvdC1haXg1Mix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu MQ0KZGlmZiAtdSAtcjEuMSB0LWFpeDUyDQotLS0gZ2NjL2NvbmZpZy9yczYw MDAvdC1haXg1MgkxMCBPY3QgMjAwMiAxODoyOTozMyAtMDAwMAkxLjENCisr KyBnY2MvY29uZmlnL3JzNjAwMC90LWFpeDUyCTEgSmFuIDIwMDMgMTc6Mjk6 MDAgLTAwMDANCkBAIC0zNiw3ICszNiw3IEBADQogCXJtIC1mIEBtdWx0aWxp Yl9kaXJAL3Noci5vDQogIyAkKHNsaWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8g cHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBidWlsZGluZw0KICMg bGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFs IGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxMID0gJChJTlNUQUxMX0RB VEEpIEBzaGxpYl9iYXNlX25hbWVALmEgJCQoc2xpYmRpcikvDQorU0hMSUJf SU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJfYmFzZV9uYW1lQC5h ICQkKERFU1RESVIpJCQoc2xpYmRpcikvDQogU0hMSUJfTElCUyA9IC1sYyBg Y2FzZSBAc2hsaWJfYmFzZV9uYW1lQCBpbiAqcHRocmVhZCopIGVjaG8gLWxw dGhyZWFkIDs7IGVzYWNgDQogU0hMSUJfTUtNQVAgPSAkKHNyY2RpcikvbWtt YXAtZmxhdC5hd2sNCiBTSExJQl9NQVBGSUxFUyA9ICQoc3JjZGlyKS9saWJn Y2Mtc3RkLnZlcg0KSW5kZXg6IGdjYy9jcC9NYWtlLWxhbmcuaW4NCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9j dnMvZ2NjLWN2cy9nY2MvZ2NjL2NwL01ha2UtbGFuZy5pbix2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMTI5DQpkaWZmIC11IC1yMS4xMjkgTWFrZS1sYW5n LmluDQotLS0gZ2NjL2NwL01ha2UtbGFuZy5pbgkzMCBEZWMgMjAwMiAxOTow MjowMyAtMDAwMAkxLjEyOQ0KKysrIGdjYy9jcC9NYWtlLWxhbmcuaW4JMSBK YW4gMjAwMyAxNzoyOToxMSAtMDAwMA0KQEAgLTEyOSwyNyArMTI5LDMyIEBA DQogYysrLmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0KIAktaWYgWyAt ZiBjYzFwbHVzJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBpZiBbIC1mIGcr Ky1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAkKGJp bmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnKystY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIp LyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBh K3ggJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQot CSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4 dCk7IFwNCi0JICAgICQoTE4pICQoYmluZGlyKS8kKEdYWF9DUk9TU19OQU1F KSQoZXhlZXh0KSAkKGJpbmRpcikvJChDWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4 dCk7IFwNCi0JICAgIGlmIFsgLWQgJChnY2NfdG9vbGRpcikvYmluLy4gXSA7 IHRoZW4gXA0KLQkgICAgICBybSAtZiAkKGdjY190b29sZGlyKS9iaW4vZysr JChleGVleHQpOyBcDQotCSAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnKyst Y3Jvc3MkKGV4ZWV4dCkgJChnY2NfdG9vbGRpcikvYmluL2crKyQoZXhlZXh0 KTsgXA0KLQkgICAgICBybSAtZiAkKGdjY190b29sZGlyKS9iaW4vYysrJChl eGVleHQpOyBcDQotCSAgICAgICQoTE4pICQoZ2NjX3Rvb2xkaXIpL2Jpbi9n KyskKGV4ZWV4dCkgJChnY2NfdG9vbGRpcikvYmluL2MrKyQoZXhlZXh0KTsg XA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IGcrKy1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQoR1hY X0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChE RVNURElSKSQoYmluZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsg XA0KKwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKENYWF9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgKCBjZCAkKERFU1RESVIpJChi aW5kaXIpICYmIFwNCisJICAgICAgJChMTikgJChHWFhfQ1JPU1NfTkFNRSkk KGV4ZWV4dCkgJChDWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkgKTsgXA0KKwkg ICAgaWYgWyAtZCAkKERFU1RESVIpJChnY2NfdG9vbGRpcikvYmluLy4gXSA7 IHRoZW4gXA0KKwkgICAgICBybSAtZiAkKERFU1RESVIpJChnY2NfdG9vbGRp cikvYmluL2crKyQoZXhlZXh0KTsgXA0KKwkgICAgICAkKElOU1RBTExfUFJP R1JBTSkgZysrLWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGdjY190b29s ZGlyKS9iaW4vZysrJChleGVleHQpOyBcDQorCSAgICAgIHJtIC1mICQoREVT VERJUikkKGdjY190b29sZGlyKS9iaW4vYysrJChleGVleHQpOyBcDQorCSAg ICAgICggY2QgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2JpbiAmJiBcDQor CSAgICAgICAgJChMTikgZysrJChleGVleHQpIGMrKyQoZXhlZXh0KSApOyBc DQogCSAgICBlbHNlIHRydWU7IGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICBy bSAtZiAkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsg XA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGcrKyQoZXhlZXh0KSAkKGJp bmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAg Y2htb2QgYSt4ICQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChMTikgJChiaW5kaXIpLyQoR1hY X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQoQ1hYX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJtIC1mICQoYmluZGlyKS8k KEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAg JChMTikgJChiaW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkg JChiaW5kaXIpLyQoR1hYX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQp OyBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChDWFhfVEFSR0VUX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoTE4pICQoYmluZGlyKS8k KENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQoYmluZGlyKS8kKENYWF9U QVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZysrJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJUikkKGJpbmRpcikv JChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgICAoIGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgXA0K KwkgICAgICAkKExOKSAkKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQo Q1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgKTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQoYmluZGlyKS8kKEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KKwkgICAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIp ICYmIFwNCisJICAgICAgJChMTikgJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KSAkKEdYWF9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KSApOyBc DQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1hYX1RBUkdF VF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICAoIGNkICQoREVT VERJUikkKGJpbmRpcikgJiYgXA0KKwkgICAgICAkKExOKSAkKENYWF9JTlNU QUxMX05BTUUpJChleGVleHQpICQoQ1hYX1RBUkdFVF9JTlNUQUxMX05BTUUp JChleGVleHQpICk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiANCkBAIC0xNTgs MjMgKzE2MywyMyBAQA0KIGMrKy5pbnN0YWxsLW1hbjogaW5zdGFsbGRpcnMg JChzcmNkaXIpL2NwL2crKy4xDQogCS1pZiBbIC1mIGNjMXBsdXMkKGV4ZWV4 dCkgXSA7IHRoZW4gXA0KIAkgIGlmIFsgLWYgZysrLWNyb3NzJChleGVleHQp IF0gOyB0aGVuIFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChHWFhfQ1JP U1NfTkFNRSkkKG1hbjFleHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkg JChzcmNkaXIpL2NwL2crKy4xICQobWFuMWRpcikvJChHWFhfQ1JPU1NfTkFN RSkkKG1hbjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8k KEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIHJtIC1mICQo REVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0NST1NTX05BTUUpJChtYW4xZXh0 KTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9jcC9nKysu MSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFu MWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGly KS8kKEdYWF9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBlbHNlIFwN Ci0JICAgIHJtIC1mICQobWFuMWRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQo bWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikv Y3AvZysrLjEgJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChtYW4x ZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRpcikvJChHWFhfSU5T VEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJ UikkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBc DQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2NwL2crKy4xICQo REVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFl eHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElSKSQobWFuMWRpcikv JChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBmaTsgXA0K IAllbHNlIHRydWU7IGZpDQogDQogYysrLnVuaW5zdGFsbDoNCi0JLXJtIC1y ZiAkKGJpbmRpcikvJChDWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQkt cm0gLXJmICQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KQ0K LQktcm0gLXJmICQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVl eHQpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChl eGVleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvJChHWFhfQ1JP U1NfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmlu ZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0 KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChHWFhfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRp cikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERF U1RESVIpJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChtYW4xZXh0 KQ0KKwktcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hYX0NST1NT X05BTUUpJChtYW4xZXh0KQ0KICMMDQogIyBDbGVhbiBob29rczoNCiAjIEEg bG90IG9mIHRoZSBhbmNpbGxhcnkgZmlsZXMgYXJlIGRlbGV0ZWQgYnkgdGhl IG1haW4gbWFrZWZpbGUuDQpJbmRleDogZ2NjL2YvTWFrZS1sYW5nLmluDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9z cmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9mL01ha2UtbGFuZy5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTE2DQpkaWZmIC11IC1yMS4xMTYgTWFrZS1s YW5nLmluDQotLS0gZ2NjL2YvTWFrZS1sYW5nLmluCTEgSmFuIDIwMDMgMTU6 MjY6MDcgLTAwMDAJMS4xMTYNCisrKyBnY2MvZi9NYWtlLWxhbmcuaW4JMSBK YW4gMjAwMyAxNzoyOToyMiAtMDAwMA0KQEAgLTI0NiwxMyArMjQ2LDEzIEBA DQogZjc3Lmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0KIAktaWYgWyAt ZiBmNzcxJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBpZiBbIC1mIGc3Ny1j cm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAkKGJpbmRp cikvJChHNzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnNzctY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQo Rzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBhK3gg JChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAg ICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUp JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZzc3LWNy b3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHNzdfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERFU1RESVIp JChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQogCSAg ZWxzZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGc3 NyQoZXhlZXh0KSAkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEc3N19JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIp JChiaW5kaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJ ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzckKGV4ZWV4dCkgJChERVNURElS KSQoYmluZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQor CSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEc3N19JTlNU QUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWVsc2UgdHJ1 ZTsgZmkNCiAJQGlmIFsgLWYgZjc3LWluc3RhbGwtb2sgLW8gLWYgJChzcmNk aXIpL2Y3Ny1pbnN0YWxsLW9rIF07IHRoZW4gXA0KQEAgLTI2OSw0MyArMjY5 LDQzIEBADQogIyB0byBkbyB0aGUgaW5zdGFsbC4gIFRoZSBzZWQgcnVsZSB3 YXMgY29waWVkIGZyb20gc3RtcC1pbnQtaGRycy4NCiBmNzcuaW5zdGFsbC1p bmZvOiBmNzcuaW5mbyBpbnN0YWxsZGlycw0KIAlpZiBbIC1mICQoc3JjZGly KS9mL2c3Ny5pbmZvIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKGluZm9kaXIp L2c3Ny5pbmZvKjsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGluZm9kaXIp L2c3Ny5pbmZvKjsgXA0KIAkgIGZvciBmIGluICQoc3JjZGlyKS9mL2c3Ny5p bmZvKjsgZG8gXA0KIAkgICAgICByZWFsZmlsZT1gZWNobyAkJGYgfCBzZWQg LWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0JICAgICAgJChJTlNU QUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwNCisJICAg ICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChpbmZvZGlyKS8k JHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KLQkgIGNobW9kIGEteCAkKGlu Zm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIp JChpbmZvZGlyKS9nNzcuaW5mbyo7IFwNCiAJZWxzZSB0cnVlOyBmaQ0KIAlA aWYgWyAtZiAkKHNyY2RpcikvZi9nNzcuaW5mbyBdIDsgdGhlbiBcDQogCSAg aWYgJChTSEVMTCkgLWMgJ2luc3RhbGwtaW5mbyAtLXZlcnNpb24gfCBzZWQg MXEgfCBmZ3JlcCAtcyAtdiAtaSBkZWJpYW4nID4vZGV2L251bGwgMj4mMTsg dGhlbiBcDQotCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9 JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIjsgXA0KLQkgICAgaW5z dGFsbC1pbmZvIC0taW5mby1kaXI9JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3 Ny5pbmZvIHx8IDogOyBcDQorCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0t aW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgJChERVNURElSKSQoaW5m b2RpcikvZzc3LmluZm8iOyBcDQorCSAgICBpbnN0YWxsLWluZm8gLS1pbmZv LWRpcj0kKERFU1RESVIpJChpbmZvZGlyKSAkKERFU1RESVIpJChpbmZvZGly KS9nNzcuaW5mbyB8fCA6IDsgXA0KIAkgIGVsc2UgOiA7IGZpOyBcDQogCWVs c2UgOiA7IGZpDQogDQogZjc3Lmluc3RhbGwtbWFuOiAkKEdFTkVSQVRFRF9N QU5QQUdFUykgaW5zdGFsbGRpcnMNCiAJLWlmIFsgLWYgZjc3MSQoZXhlZXh0 KSBdIDsgdGhlbiBcDQogCSAgaWYgWyAtZiBnNzctY3Jvc3MkKGV4ZWV4dCkg XSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEc3N19DUk9T U19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUp JChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRpcikvJChH NzdfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAk KERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4 dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8k KEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBlbHNlIFwNCi0J ICAgIHJtIC1mICQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFu MWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9n NzcuMSAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQp OyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEc3N19JTlNUQUxM X05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQo bWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJ ICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAkKERFU1RE SVIpJChtYW4xZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsg XA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3 X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAgZmk7IFwNCiAJZWxz ZSB0cnVlOyBmaQ0KIA0KIGY3Ny51bmluc3RhbGw6IGluc3RhbGxkaXJzDQog CWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12ZXJzaW9uIHwgc2Vk IDFxIHwgZmdyZXAgLXMgLXYgLWkgZGViaWFuJyA+L2Rldi9udWxsIDI+JjE7 IHRoZW4gXA0KLQkgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1kZWxldGUgLS1p bmZvLWRpcj0kKGluZm9kaXIpICQoaW5mb2RpcikvZzc3LmluZm8iOyBcDQot CSAgaW5zdGFsbC1pbmZvIC0tZGVsZXRlIC0taW5mby1kaXI9JChpbmZvZGly KSAkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAgZWNobyAiIGlu c3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVTVERJUikkKGlu Zm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZvIjsgXA0KKwkg IGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVTVERJUikk KGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDog OyBcDQogCWVsc2UgOiA7IGZpDQotCXJtIC1yZiAkKGJpbmRpcikvJChHNzdf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQlybSAtcmYgJChiaW5kaXIp LyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCXJtIC1yZiAkKG1h bjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQotCXJt IC1yZiAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUpJChtYW4xZXh0KTsg XA0KLQlybSAtcmYgJChpbmZvZGlyKS9nNzcuaW5mbyoNCisJcm0gLXJmICQo REVTVERJUikkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEc3N19DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQobWFu MWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJcm0g LXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUpJCht YW4xZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoaW5mb2RpcikvZzc3 LmluZm8qDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMgQSBsb3Qgb2YgdGhl IGFuY2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0aGUgbWFpbiBtYWtl ZmlsZS4NCkluZGV4OiBnY2MvamF2YS9NYWtlLWxhbmcuaW4NCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMv Z2NjLWN2cy9nY2MvZ2NjL2phdmEvTWFrZS1sYW5nLmluLHYNCnJldHJpZXZp bmcgcmV2aXNpb24gMS45NQ0KZGlmZiAtdSAtcjEuOTUgTWFrZS1sYW5nLmlu DQotLS0gZ2NjL2phdmEvTWFrZS1sYW5nLmluCTEgSmFuIDIwMDMgMTU6MTA6 MDAgLTAwMDAJMS45NQ0KKysrIGdjYy9qYXZhL01ha2UtbGFuZy5pbgkxIEph biAyMDAzIDE3OjI5OjMyIC0wMDAwDQpAQCAtMTcxLDUzICsxNzEsNTQgQEAN CiBqYXZhLmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0KIAktaWYgWyAt ZiAkKEdDSikkKGV4ZWV4dCkgXTsgdGhlbiBcDQogCSAgaWYgWyAtZiAkKEdD SiktY3Jvc3MkKGV4ZWV4dCkgXTsgdGhlbiBcDQotCSAgICBybSAtZiAkKGJp bmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAgICAk KElOU1RBTExfUFJPR1JBTSkgJChHQ0opLWNyb3NzJChleGVleHQpICQoYmlu ZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIGNo bW9kIGEreCAkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQp OyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9D Uk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dS QU0pICQoR0NKKS1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIp LyQoSkFWQV9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgY2htb2Qg YSt4ICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChl eGVleHQpOyBcDQogCSAgZWxzZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikv JChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSAkKEdDSikkKGV4ZWV4dCkgJChiaW5kaXIpLyQoSkFW QV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBhK3gg JChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQot CSAgICBybSAtZiAkKGJpbmRpcikvJChKQVZBX1RBUkdFVF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQotCSAgICAkKExOKSAkKGJpbmRpcikvJChKQVZB X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQoSkFWQV9UQVJH RVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYgJChE RVNURElSKSQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQoR0NKKSQoZXhlZXh0 KSAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGly KS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgcm0g LWYgJChERVNURElSKSQoYmluZGlyKS8kKEpBVkFfVEFSR0VUX0lOU1RBTExf TkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgICggY2QgJChERVNURElSKSQoYmlu ZGlyKSAmJiBcDQorCSAgICAgICQoTE4pICQoSkFWQV9JTlNUQUxMX05BTUUp JChleGVleHQpICQoSkFWQV9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KSApOyBcDQogCSAgZmkgOyBcDQogCWZpIDsgXA0KICAgICAgICAgZm9yIHRv b2wgaW4gJChKQVZBX1RBUkdFVF9JTkRFUEVOREVOVF9CSU5fVE9PTFMpOyBk byBcDQogCSAgdG9vbF90cmFuc2Zvcm1lZF9uYW1lPWBlY2hvICQkdG9vbHxz ZWQgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYDsgXA0KICAgICAgICAg ICBpZiBbIC1mICQkdG9vbCQoZXhlZXh0KSBdOyB0aGVuIFwNCi0JICAgIHJt IC1mICQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRfbmFtZSQoZXhlZXh0 KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkdG9vbCQoZXhlZXh0 KSAkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7 IFwNCi0JICAgIGNobW9kIGEreCAkKGJpbmRpcikvJCR0b29sX3RyYW5zZm9y bWVkX25hbWUkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVTVERJUikk KGJpbmRpcikvJCR0b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJHRvb2wkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRfbmFtZSQoZXhl ZXh0KTsgXA0KKwkgICAgY2htb2QgYSt4ICQoREVTVERJUikkKGJpbmRpcikv JCR0b29sX3RyYW5zZm9ybWVkX25hbWUkKGV4ZWV4dCk7IFwNCiAgICAgICAg ICAgZmkgOyBcDQogICAgICAgIGRvbmUNCiANCiBqYXZhLmluc3RhbGwtbWFu Og0KIA0KIGphdmEudW5pbnN0YWxsOg0KLQktcm0gLXJmICQoYmluZGlyKS8k KEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQktcm0gLXJmICQoYmlu ZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCi0JLXJtIC1yZiAk KG1hbjFkaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChtYW4xZXh0KQ0KLQkt cm0gLXJmICQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4xZXh0 KQ0KLQktcm0gLXJmICQobWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCi0JLXJt IC1yZiAkKG1hbjFkaXIpL2p2LXNjYW4kKG1hbjFleHQpDQotCS1ybSAtcmYg JChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1h bjFkaXIpL2dpaiQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpL2p2 LWNvbnZlcnQkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmlu ZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJm ICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVl eHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0lO U1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQo bWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4xZXh0KQ0KKwktcm0g LXJmICQoREVTVERJUikkKG1hbjFkaXIpL2djamgkKG1hbjFleHQpDQorCS1y bSAtcmYgJChERVNURElSKSQobWFuMWRpcikvanYtc2NhbiQobWFuMWV4dCkN CisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9qY2YtZHVtcCQobWFu MWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS9naWokKG1h bjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikvanYtY29u dmVydCQobWFuMWV4dCkNCiANCiBqYXZhLmluc3RhbGwtaW5mbzogaW5zdGFs bGRpcnMNCiAJaWYgWyAtZiBqYzEkKGV4ZWV4dCkgXSA7IHRoZW4gXA0KIAkg IGlmIFsgLWYgJChzcmNkaXIpL2phdmEvZ2NqLmluZm8gXTsgdGhlbiBcDQot CSAgICBybSAtZiAkKGluZm9kaXIpL2djai5pbmZvKjsgXA0KKwkgICAgcm0g LWYgJChERVNURElSKSQoaW5mb2RpcikvZ2NqLmluZm8qOyBcDQogCSAgICBm b3IgZiBpbiAkKHNyY2RpcikvamF2YS9nY2ouaW5mbyo7IGRvIFwNCiAJICAg ICAgcmVhbGZpbGU9YGVjaG8gJCRmIHwgc2VkIC1lICdzfC4qL1woW14vXSpc KSQkfFwxfCdgOyBcDQotCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChp bmZvZGlyKS8kJHJlYWxmaWxlOyBcDQorCSAgICAgICQoSU5TVEFMTF9EQVRB KSAkJGYgJChERVNURElSKSQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0KIAkg ICAgZG9uZTsgXA0KLQkgICAgY2htb2QgYS14ICQoaW5mb2RpcikvZ2NqLmlu Zm8qOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElSKSQoaW5mb2Rpcikv Z2NqLmluZm8qOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsgXA0KIAllbHNlIHRy dWU7IGZpDQotCS1pZiBbIC1mIGpjMSQoZXhlZXh0KSBdICYmIFsgLWYgJChp bmZvZGlyKS9nY2ouaW5mbyBdOyB0aGVuIFwNCisJLWlmIFsgLWYgamMxJChl eGVleHQpIF0gJiYgWyAtZiAkKERFU1RESVIpJChpbmZvZGlyKS9nY2ouaW5m byBdOyB0aGVuIFwNCiAJICBpZiAkKFNIRUxMKSAtYyAnaW5zdGFsbC1pbmZv IC0tdmVyc2lvbicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwNCi0JICAgIGlu c3RhbGwtaW5mbyAtLWRpci1maWxlPSQoaW5mb2RpcikvZGlyICQoaW5mb2Rp cikvZ2NqLmluZm87IFwNCisJICAgIGluc3RhbGwtaW5mbyAtLWRpci1maWxl PSQoREVTVERJUikkKGluZm9kaXIpL2RpciAkKERFU1RESVIpJChpbmZvZGly KS9nY2ouaW5mbzsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZWxzZSB0 cnVlOyBmaQ0KIA0KQEAgLTQxOSwzMyArNDIwLDMzIEBADQogamF2YS5pbnN0 YWxsLW1hbjogaW5zdGFsbGRpcnMgJChHRU5FUkFURURfSkFWQV9NQU5QQUdF UykNCiAJLWlmIFsgLWYgJChHQ0opJChleGVleHQpIF07IHRoZW4gXA0KIAkg IGlmIFsgLWYgJChHQ0opLWNyb3NzJChleGVleHQpIF07IHRoZW4gXA0KLQkg ICAgcm0gLWYgJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFl eHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEv Z2NqLjEgJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQp OyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1Nf TkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJCht YW4xZGlyKS8kKEpBVkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAg ICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvZ2NqLjEgJChERVNU RElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4xZXh0KTsg XA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoSkFW QV9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBlbHNlIFwNCi0JICAg IHJtIC1mICQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFl eHQpOyBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEv Z2NqLjEgJChtYW4xZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQobWFuMWV4 dCk7IFwNCi0JICAgIGNobW9kIGEteCAkKG1hbjFkaXIpLyQoSkFWQV9JTlNU QUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElS KSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBc DQorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvZ2NqLjEg JChERVNURElSKSQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1h bjFleHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChERVNURElSKSQobWFuMWRp cikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAgZmkg OyBcDQogCWZpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2djamgkKG1hbjFleHQp DQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvZ2NqaC4xICQo bWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFk aXIpL2djamgkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL2p2LXNj YW4kKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2ph dmEvanYtc2Nhbi4xICQobWFuMWRpcikvanYtc2NhbiQobWFuMWV4dCkNCi0J LWNobW9kIGEteCAkKG1hbjFkaXIpL2p2LXNjYW4kKG1hbjFleHQpDQotCS1y bSAtZiAkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0KLQktJChJTlNU QUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2pjZi1kdW1wLjEgJChtYW4xZGly KS9qY2YtZHVtcCQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIp L2pjZi1kdW1wJChtYW4xZXh0KQ0KLQktcm0gLWYgJChtYW4xZGlyKS9naWok KG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEv Z2lqLjEgJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQotCS1jaG1vZCBhLXgg JChtYW4xZGlyKS9naWokKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIp L2p2LWNvbnZlcnQkKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2phdmEvanYtY29udmVydC4xICQobWFuMWRpcikvanYtY29udmVy dCQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIpL2p2LWNvbnZl cnQkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL3JtaWMkKG1hbjFl eHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvcm1pYy4x ICQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1h bjFkaXIpL3JtaWMkKG1hbjFleHQpDQotCS1ybSAtZiAkKG1hbjFkaXIpL3Jt aXJlZ2lzdHJ5JChtYW4xZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEpICQoc3Jj ZGlyKS9qYXZhL3JtaXJlZ2lzdHJ5LjEgJChtYW4xZGlyKS9ybWlyZWdpc3Ry eSQobWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIpL3JtaXJlZ2lz dHJ5JChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv Z2NqaCQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikv amF2YS9nY2poLjEgJChERVNURElSKSQobWFuMWRpcikvZ2NqaCQobWFuMWV4 dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS9nY2poJCht YW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvanYtc2Nh biQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2 YS9qdi1zY2FuLjEgJChERVNURElSKSQobWFuMWRpcikvanYtc2NhbiQobWFu MWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS9qdi1z Y2FuJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv amNmLWR1bXAkKG1hbjFleHQpDQorCS0kKElOU1RBTExfREFUQSkgJChzcmNk aXIpL2phdmEvamNmLWR1bXAuMSAkKERFU1RESVIpJChtYW4xZGlyKS9qY2Yt ZHVtcCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW4x ZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJUikk KG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvamF2YS9naWouMSAkKERFU1RESVIpJChtYW4xZGlyKS9naWok KG1hbjFleHQpDQorCS1jaG1vZCBhLXggJChERVNURElSKSQobWFuMWRpcikv Z2lqJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikv anYtY29udmVydCQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKHNy Y2RpcikvamF2YS9qdi1jb252ZXJ0LjEgJChERVNURElSKSQobWFuMWRpcikv anYtY29udmVydCQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIp JChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KKwktcm0gLWYgJChE RVNURElSKSQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCisJLSQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9ybWljLjEgJChERVNURElSKSQobWFu MWRpcikvcm1pYyQobWFuMWV4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIp JChtYW4xZGlyKS9ybWljJChtYW4xZXh0KQ0KKwktcm0gLWYgJChERVNURElS KSQobWFuMWRpcikvcm1pcmVnaXN0cnkkKG1hbjFleHQpDQorCS0kKElOU1RB TExfREFUQSkgJChzcmNkaXIpL2phdmEvcm1pcmVnaXN0cnkuMSAkKERFU1RE SVIpJChtYW4xZGlyKS9ybWlyZWdpc3RyeSQobWFuMWV4dCkNCisJLWNobW9k IGEteCAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlyZWdpc3RyeSQobWFuMWV4 dCkNCkluZGV4OiBnY2MvdHJlZWxhbmcvTWFrZS1sYW5nLmluDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3Zz L2djYy1jdnMvZ2NjL2djYy90cmVlbGFuZy9NYWtlLWxhbmcuaW4sdg0KcmV0 cmlldmluZyByZXZpc2lvbiAxLjkNCmRpZmYgLXUgLXIxLjkgTWFrZS1sYW5n LmluDQotLS0gZ2NjL3RyZWVsYW5nL01ha2UtbGFuZy5pbgkyMyBEZWMgMjAw MiAxOToyNjo0OCAtMDAwMAkxLjkNCisrKyBnY2MvdHJlZWxhbmcvTWFrZS1s YW5nLmluCTEgSmFuIDIwMDMgMTc6MzE6NTEgLTAwMDANCkBAIC0xNjcsMTAg KzE2NywxMCBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYgJCRuYW1lIF0gOyB0 aGVuIFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2VuYW1lICQkbmFtZVxg IHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJyBgIjsgXA0K LQkgICAgcm0gLWYgJChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0J ICAgIGVjaG8gJChJTlNUQUxMX1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAk KGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxM X1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKGJpbmRpcikvJCRuYW1lMiQo ZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kJG5hbWUy JChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIp LyQkbmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgIGVjaG8gJChJTlNUQUxMX1BS T0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQk bmFtZTIkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAk JG5hbWUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kJG5hbWUyJChl eGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGly KS8kJG5hbWUyJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWRvbmUNCiAJ JChTVEFNUCkgdHJlZWxhbmcuaW5zdGFsbC5jb21tb24uZG9uZQ0KQEAgLTE4 MCw5ICsxODAsOSBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYgJCRuYW1lIF0g OyB0aGVuIFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2VuYW1lICQkbmFt ZVxgIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJyBgIjsg XA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5hbWUkKGV4ZWV4dCkg JChsaWJzdWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0JICAgIGNobW9k IGEreCAkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgICAg cm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS8kJG5hbWUyJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRuYW1lJChleGVleHQp ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0K KwkgICAgY2htb2QgYSt4ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRuYW1l MiQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlkb25lDQogDQpAQCAtMTk0 LDggKzE5NCw4IEBADQogCSAgZWNobyAkJG5hbWU7IFwNCiAJICBuYW1lMj0i YGVjaG8gJCRuYW1lIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25h bWUpJyBgIjsgXA0KIAkgIGVjaG8gYmVjb21lcyAkJG5hbWUyOyBcDQotCSAg ZWNobyAtcm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQot CSAgcm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQorCSAg ZWNobyAtcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJCRuYW1lMiQoZXhl ZXh0KTsgXA0KKwkgIHJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQkbmFt ZTIkKGV4ZWV4dCk7IFwNCiAJZG9uZQ0KIAktcm0gdHJlZWxhbmcuaW5zdGFs bC5jb21tb24uZG9uZQ0KIA0KSW5kZXg6IGxpYmYyYy9NYWtlZmlsZS5pbg0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwv c3JjL2N2cy9nY2MtY3ZzL2djYy9saWJmMmMvTWFrZWZpbGUuaW4sdg0KcmV0 cmlldmluZyByZXZpc2lvbiAxLjU0DQpkaWZmIC11IC1yMS41NCBNYWtlZmls ZS5pbg0KLS0tIGxpYmYyYy9NYWtlZmlsZS5pbgkyMyBTZXAgMjAwMiAwMzo1 Mjo1MCAtMDAwMAkxLjU0DQorKysgbGliZjJjL01ha2VmaWxlLmluCTEgSmFu IDIwMDMgMTc6MzE6NTMgLTAwMDANCkBAIC04MSw2ICs4MSw3IEBADQogCVdB Uk5fQ0ZMQUdTPSckKFdBUk5fQ0ZMQUdTKScgXA0KIAlDRkxBR1M9JyQoQ0ZM QUdTKScgXA0KIAlDUFBGTEFHUz0nJChDUFBGTEFHUyknIFwNCisJREVTVERJ Uj0nJChERVNURElSKScgXA0KIAlBUj0nJChBUiknIFwNCiAJUkFOTElCPSck KFJBTkxJQiknIFwNCiAJcHJlZml4PSckKHByZWZpeCknIFwNCkBAIC0yMTQs MjEgKzIxNSwyMSBAQA0KIAljZCBsaWJVNzc7ICQoTUFLRSkgRzc3RElSPS4u Ly4uLy4uL2djYy8gY2hlY2sNCiANCiBpbnN0YWxsOiBhbGwNCi0JJChTSEVM TCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChnbGliY3Bw X3Rvb2xleGVjbGliZGlyKQ0KLQkkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxs ICQoSU5TVEFMTCkgJChMSUJHMkMpICQoZ2xpYmNwcF90b29sZXhlY2xpYmRp cikNCi0JJChJTlNUQUxMX0RBVEEpIGxpYmZydGJlZ2luLmEgJChnbGliY3Bw X3Rvb2xleGVjbGliZGlyKQ0KLQkkKFJBTkxJQikgJChnbGliY3BwX3Rvb2xl eGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQotCSQoSU5TVEFMTF9EQVRBKSBn MmMuaCAkKGxpYnN1YmRpcikvaW5jbHVkZS9nMmMuaA0KKwkkKFNIRUxMKSAk KHRvcGxldmVsX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChn bGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwkkKExJQlRPT0wpIC0tbW9kZT1p bnN0YWxsICQoSU5TVEFMTCkgJChMSUJHMkMpICQoREVTVERJUikkKGdsaWJj cHBfdG9vbGV4ZWNsaWJkaXIpDQorCSQoSU5TVEFMTF9EQVRBKSBsaWJmcnRi ZWdpbi5hICQoREVTVERJUikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQor CSQoUkFOTElCKSAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGly KS9saWJmcnRiZWdpbi5hDQorCSQoSU5TVEFMTF9EQVRBKSBnMmMuaCAkKERF U1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUvZzJjLmgNCiAJJChNVUxUSURP KSAkKEZMQUdTX1RPX1BBU1MpIG11bHRpLWRvIERPPSIkQCINCi0JQC0kKExJ QlRPT0wpIC0tbW9kZT1maW5pc2ggJChnbGliY3BwX3Rvb2xleGVjbGliZGly KQ0KKwlALSQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKERFU1RESVIpJChn bGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KIA0KIGluc3RhbGwtc3RyaXA6DQog CSQoTUFLRSkgSU5TVEFMTF9QUk9HUkFNPSckKElOU1RBTExfUFJPR1JBTSkg LXMnIGluc3RhbGwNCiANCiB1bmluc3RhbGw6DQotCXJtIC1mICQobGlic3Vi ZGlyKS9pbmNsdWRlL2cyYy5oDQotCXJtIC1mICQoZ2xpYmNwcF90b29sZXhl Y2xpYmRpcikvbGliZnJ0YmVnaW4uYQ0KLQkkKExJQlRPT0wpIC0tbW9kZT11 bmluc3RhbGwgcm0gLWYgJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKSQoTElC RzJDX0JBU0UpLmxhDQorCXJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikv aW5jbHVkZS9nMmMuaA0KKwlybSAtZiAkKERFU1RESVIpJChnbGliY3BwX3Rv b2xleGVjbGliZGlyKS9saWJmcnRiZWdpbi5hDQorCSQoTElCVE9PTCkgLS1t b2RlPXVuaW5zdGFsbCBybSAtZiAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xl eGVjbGliZGlyKSQoTElCRzJDX0JBU0UpLmxhDQogCSQoTVVMVElETykgJChG TEFHU19UT19QQVNTKSBtdWx0aS1kbyBETz0iJEAiDQogDQogbW9zdGx5Y2xl YW46DQpJbmRleDogbGliaWJlcnR5L01ha2VmaWxlLmluDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2dj Yy1jdnMvZ2NjL2xpYmliZXJ0eS9NYWtlZmlsZS5pbix2DQpyZXRyaWV2aW5n IHJldmlzaW9uIDEuNzgNCmRpZmYgLXUgLXIxLjc4IE1ha2VmaWxlLmluDQot LS0gbGliaWJlcnR5L01ha2VmaWxlLmluCTIyIE5vdiAyMDAyIDIwOjAxOjA3 IC0wMDAwCTEuNzgNCisrKyBsaWJpYmVydHkvTWFrZWZpbGUuaW4JMSBKYW4g MjAwMyAxNzozMjowNSAtMDAwMA0KQEAgLTg0LDYgKzg0LDcgQEANCiAJIkFS X0ZMQUdTPSQoQVJfRkxBR1MpIiBcDQogCSJDQz0kKENDKSIgXA0KIAkiQ0ZM QUdTPSQoQ0ZMQUdTKSIgXA0KKwkiREVTVERJUj0kKERFU1RESVIpIiBcDQog CSJMSUJDRkxBR1M9JChMSUJDRkxBR1MpIiBcDQogCSJFWFRSQV9PRklMRVM9 JChFWFRSQV9PRklMRVMpIiBcDQogCSJIREVGSU5FUz0kKEhERUZJTkVTKSIg XA0KSW5kZXg6IGxpYm9iamMvTWFrZWZpbGUuaW4NCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2 cy9nY2MvbGlib2JqYy9NYWtlZmlsZS5pbix2DQpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMjINCmRpZmYgLXUgLXIxLjIyIE1ha2VmaWxlLmluDQotLS0gbGli b2JqYy9NYWtlZmlsZS5pbgkyMyBTZXAgMjAwMiAwMzo1Mjo1MyAtMDAwMAkx LjIyDQorKysgbGlib2JqYy9NYWtlZmlsZS5pbgkxIEphbiAyMDAzIDE3OjMz OjE1IC0wMDAwDQpAQCAtMTE4LDYgKzExOCw3IEBADQogCSJBUl9GTEFHUz0k KEFSX0ZMQUdTKSIgXA0KIAkiQ0M9JChDQykiIFwNCiAJIkNGTEFHUz0kKENG TEFHUykiIFwNCisJIkRFU1RESVI9JChERVNURElSKSIgXA0KIAkiTElCQ0ZM QUdTPSQoTElCQ0ZMQUdTKSIgXA0KIAkiRVhUUkFfT0ZJTEVTPSQoRVhUUkFf T0ZJTEVTKSIgXA0KIAkiSERFRklORVM9JChIREVGSU5FUykiIFwNCkBAIC0z MTgsMjEgKzMxOSwyMSBAQA0KIGluc3RhbGw6IGluc3RhbGwtbGlicyBpbnN0 YWxsLWhlYWRlcnMNCiANCiBpbnN0YWxsLWxpYnM6IGluc3RhbGxkaXJzDQot CSQoU0hFTEwpICQodG9wbGV2ZWxfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQo Z2xpYmNwcF90b29sZXhlY2xpYmRpcikNCi0JJChMSUJUT09MX0lOU1RBTEwp ICQoSU5TVEFMTCkgbGlib2JqYy5sYSAkKGdsaWJjcHBfdG9vbGV4ZWNsaWJk aXIpOw0KKwkkKFNIRUxMKSAkKHRvcGxldmVsX3NyY2RpcikvbWtpbnN0YWxs ZGlycyAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwkk KExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMKSBsaWJvYmpjLmxhICQoREVT VERJUikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpOw0KIAlpZiBbICIkKE9C SkNfQk9FSE1fR0MpIiBdOyB0aGVuIFwNCiAJICAkKExJQlRPT0xfSU5TVEFM TCkgJChJTlNUQUxMKSBsaWJvYmpjX2djLmxhIFwNCi0JCQkJJChnbGliY3Bw X3Rvb2xleGVjbGliZGlyKTtcDQorCQkJCSQoREVTVERJUikkKGdsaWJjcHBf dG9vbGV4ZWNsaWJkaXIpO1wNCiAJZmkNCiAJJChNVUxUSURPKSAkKEZMQUdT X1RPX1BBU1MpIG11bHRpLWRvIERPPSIkQCINCi0JQC0kKExJQlRPT0wpIC0t bW9kZT1maW5pc2ggJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwlALSQo TElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKERFU1RESVIpJChnbGliY3BwX3Rv b2xleGVjbGliZGlyKQ0KIA0KICMgQ29weSBPYmplY3RpdmUgQyBoZWFkZXJz IHRvIGluc3RhbGxhdGlvbiBpbmNsdWRlIGRpcmVjdG9yeS4NCiBpbnN0YWxs LWhlYWRlcnM6DQotCSQoU0hFTEwpICQodG9wbGV2ZWxfc3JjZGlyKS9ta2lu c3RhbGxkaXJzICQobGlic3ViZGlyKS9pbmNsdWRlL29iamMNCisJJChTSEVM TCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElS KSQobGlic3ViZGlyKS9pbmNsdWRlL29iamMNCiAJZm9yIGZpbGUgaW4gJChP QkpDX0gpOyBkbyBcDQogCSAgcmVhbGZpbGU9JChzcmNkaXIpL29iamMvJCR7 ZmlsZX07IFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7cmVhbGZpbGV9ICQo bGlic3ViZGlyKS9pbmNsdWRlL29iamM7IFwNCisJICAkKElOU1RBTExfREFU QSkgJCR7cmVhbGZpbGV9ICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVk ZS9vYmpjOyBcDQogCWRvbmUNCiANCiBjaGVjayB1bmluc3RhbGwgaW5zdGFs bC1zdHJpcCBkaXN0IGluc3RhbGxjaGVjayBpbnN0YWxsZGlyczoNCkluZGV4 OiBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5hbQ0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9n Y2MtY3ZzL2djYy9saWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5hbSx2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQNCmRpZmYgLXUgLXIxLjQ0IE1h a2VmaWxlLmFtDQotLS0gbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUu YW0JMTYgRGVjIDIwMDIgMTk6MDE6NTcgLTAwMDAJMS40NA0KKysrIGxpYnN0 ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtCTEgSmFuIDIwMDMgMTc6MzM6 NDEgLTAwMDANCkBAIC00NzAsMzIgKzQ3MCwzMiBAQA0KICMgdGhlIHJlc3Qg YXJlIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSB0cmVlLg0KIGd4 eF9pbmNsdWRlX2RpciA9IEBneHhfaW5jbHVkZV9kaXJADQogaW5zdGFsbC1k YXRhLWxvY2FsOg0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVf ZGlyfQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8k e2JpdHNfYnVpbGRkaXJ9DQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVT VERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfQ0KIAlm b3IgZmlsZSBpbiAke2JpdHNfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RB TExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19i dWlsZGRpcn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJzKSAke2d4eF9pbmNs dWRlX2Rpcn0vJHtiYWNrd2FyZF9idWlsZGRpcn0NCisJICAkKElOU1RBTExf REFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8k e2JpdHNfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGlycykgJChE RVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGly fQ0KIAlmb3IgZmlsZSBpbiAke2JhY2t3YXJkX2hlYWRlcnN9OyBkbyBcDQot CSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGly fS8ke2JhY2t3YXJkX2J1aWxkZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRp cnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRpcn0NCisJICAk KElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGlyfTsgZG9uZQ0KKwkkKG1raW5z dGFsbGRpcnMpICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtleHRf YnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7ZXh0X2hlYWRlcnN9OyBkbyBc DQotCSAgJChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVf ZGlyfS8ke2V4dF9idWlsZGRpcn07IGRvbmUNCi0JJChta2luc3RhbGxkaXJz KSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jhc2VfYnVpbGRkaXJ9DQorCSAg JChJTlNUQUxMX0RBVEEpICQke2ZpbGV9ICQoREVTVERJUikke2d4eF9pbmNs dWRlX2Rpcn0vJHtleHRfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxs ZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9i dWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4gJHtjX2Jhc2VfaGVhZGVyc19yZW5h bWV9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICR7Y19iYXNlX2J1aWxk ZGlyfS8kJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn07IGRvbmUNCisJICAk KElOU1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9LyQke2ZpbGV9ICQo REVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtjX2Jhc2VfYnVpbGRkaXJ9 OyBkb25lDQogCWNfYmFzZV9oZWFkZXJzX2V4dHJhX2luc3RhbGw9JyQoY19i YXNlX2hlYWRlcnNfZXh0cmEpJztcDQogCWZvciBmaWxlIGluICQkY19iYXNl X2hlYWRlcnNfZXh0cmFfaW5zdGFsbDsgZG8gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSAkJGZpbGUgJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19idWlsZGRp cn07IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJ Uikke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9uZQ0K IAljX2NvbXBhdGliaWxpdHlfaGVhZGVyc19pbnN0YWxsPSckKGNfY29tcGF0 aWJpbGl0eV9oZWFkZXJzX2V4dHJhKSc7XA0KIAlmb3IgZmlsZSBpbiAkJGNf Y29tcGF0aWJpbGl0eV9oZWFkZXJzX2luc3RhbGw7IGRvIFwNCi0JICAkKElO U1RBTExfREFUQSkgJCRmaWxlICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0K LQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke3N0ZF9i dWlsZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJ Uikke2d4eF9pbmNsdWRlX2Rpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJz KSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7c3RkX2J1aWxkZGly fQ0KIAlmb3IgZmlsZSBpbiAke3N0ZF9oZWFkZXJzX3JlbmFtZX07IGRvIFwN Ci0JICAkKElOU1RBTExfREFUQSkgJHtzdGRfYnVpbGRkaXJ9LyQke2ZpbGV9 ICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMp ICR7Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWlsZGRpcn0NCisJICAk KElOU1RBTExfREFUQSkgJHtzdGRfYnVpbGRkaXJ9LyQke2ZpbGV9ICQoREVT VERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9OyBkb25l DQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVf ZGlyfS8ke3RhcmdldF9idWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4gJHt0YXJn ZXRfaGVhZGVyc30gJHt0YXJnZXRfaGVhZGVyc19leHRyYX0gXA0KIAkgJHt0 aHJlYWRfdGFyZ2V0X2hlYWRlcnN9OyBkbyBcDQotCSAgJChJTlNUQUxMX0RB VEEpICQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWls ZGRpcn07IGRvbmUNCisJICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChE RVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke3RhcmdldF9idWlsZGRpcn07 IGRvbmUNCiANCiAjIEJ5IGFkZGluZyB0aGVzZSBmaWxlcyBoZXJlLCBhdXRv bWFrZSB3aWxsIHJlbW92ZSB0aGVtIGZvciAnbWFrZSBjbGVhbicNCiAjQ0xF QU5GSUxFUyA9ICR7YWxsc3RhbXBzfQ0K --8323584-1730069087-1041615568=:2540 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir4-doc.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4-doc.diff" SW5kZXg6IGdjYy9kb2MvaW5zdGFsbC50ZXhpDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMv Z2NjL2djYy9kb2MvaW5zdGFsbC50ZXhpLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4xNjANCmRpZmYgLXUgLXIxLjE2MCBpbnN0YWxsLnRleGkNCi0tLSBn Y2MvZG9jL2luc3RhbGwudGV4aQkzIEphbiAyMDAzIDEwOjE2OjMwIC0wMDAw CTEuMTYwDQorKysgZ2NjL2RvYy9pbnN0YWxsLnRleGkJMyBKYW4gMjAwMyAx Mjo1NzowMCAtMDAwMA0KQEAgLTEzOTEsNiArMTM5MSw0NSBAQA0KIHBhcnRz IG9mIHRoZSBjb21waWxlciBpbiBAZmlsZXtAdmFye2xpYmRpcn0vZ2NjLWxp Yn07IGRvY3VtZW50YXRpb24gaW4NCiBpbmZvIGZvcm1hdCBpbiBAZmlsZXtA dmFye2luZm9kaXJ9fSAobm9ybWFsbHkgQGZpbGV7QHZhcntwcmVmaXh9L2lu Zm99KS4NCiANCitJbiBvcmRlciB0byBzdXBwb3J0IG11bHRpLWFyY2hpdGVj dHVyYWwgc3lzdGVtcywgR0NDJ3MNCitleGVjdXRhYmxlcyBhcmUgbm90IG9u bHkgaW5zdGFsbGVkIGludG8gQGZpbGV7QHZhcntiaW5kaXJ9fSwNCit0aGF0 IGlzLCBAZmlsZXtAdmFye2V4ZWMtcHJlZml4fS9iaW59LCBidXQgYWRkaXRp b25hbGx5IGludG8NCitAZmlsZXtAdmFye2V4ZWMtcHJlZml4fS9AdmFye3Rh cmdldC1hbGlhc30vYmlufSwgaWYgdGhhdCBkaXJlY3RvcnkNCitleGlzdHMu ICBUeXBpY2FsbHksIHN1Y2ggQGRmbnt0b29sZGlyc30gaG9sZCB0YXJnZXQt c3BlY2lmaWMNCitiaW51dGlscywgaW5jbHVkaW5nIGFzc2VtYmxlciBhbmQg bGlua2VyLg0KKw0KK0luc3RhbGxhdGlvbiBpbnRvIGEgdGVtcG9yYXJ5IHN0 YWdpbmcgYXJlYSBvciBpbnRvIGEgY2hyb290IGphaWwgY2FuIGJlDQorYWNo aWV2ZWQgd2l0aCB0aGUgY29tbWFuZA0KK0BleGFtcGxlDQorbWFrZSBERVNU RElSPUB2YXJ7cGF0aC10by1yb290ZGlyfSBpbnN0YWxsDQorQGVuZCBleGFt cGxlDQorQG5vaW5kZW50IHdoZXJlIEB2YXJ7cGF0aC10by1yb290ZGlyfSBp cyB0aGUgYWJzb2x1dGUgcGF0aCBvZiBhIGRpcmVjdG9yeQ0KK3JlbGF0aXZl IHRvIHdoaWNoIGFsbCBpbnN0YWxsYXRpb24gcGF0aHMgd2lsbCBiZSBpbnRl cnByZXRlZC4NCisNCitVc2luZyBAY29kZXtERVNURElSfSBoYXMgc2V2ZXJh bCBhZHZhbnRhZ2VzIG92ZXIgdGVtcG9yYXJpbHkNCitjaGFuZ2luZyBAY29k ZXtwcmVmaXh9IGR1cmluZyBpbnN0YWxsYXRpb24uICBNb3N0IGltcG9ydGFu dCwgdGhlDQorc2V0dGluZyBvZiBAY29kZXtERVNURElSfSBpcyBuZXZlciBj b21waWxlZCBpbnRvIGJpbmFyaWVzLCBub3IgZG9lcw0KK2l0IGdldCBzdG9y ZWQgcGVybWFuZW50bHkgaW4gYW55IGNvbmZpZ3VyYXRpb24sIGl0IG9ubHkg YWZmZWN0cw0KK2luc3RhbGxhdGlvbiAoYW5kIHVuaW5zdGFsbGF0aW9uLCBv bmNlIHRoYXQgaXMgZnVsbHkgc3VwcG9ydGVkKQ0KK2FuZCBjYW4gYmUgY2hv c2VuIGFyYml0cmFyaWx5IGF0IGluc3RhbGxhdGlvbiB0aW1lLiAgTW9yZW92 ZXIsDQorc2V0dGluZyBAY29kZXtERVNURElSfSByZWxvY2F0ZXMgYWxsIGlu c3RhbGxhdGlvbiBkaXJlY3Rvcmllcw0KK2NvbnNpc3RlbnRseSwgZXZlbiB0 aG9zZSBzZXQgdG8gZml4ZWQgdmFsdWVzIGR1cmluZyBjb25maWd1cmF0aW9u Lg0KK0ZvciBleGFtcGxlLCBjb25maWd1cmluZyB3aXRoIEBzYW1wey0taW5m b2Rpcj0vdXNyL3NoYXJlL2luZm99IG1ha2VzDQorQGNvZGV7aW5mb2Rpcn0g aW5kZXBlbmRlbnQgb2YgQGNvZGV7cHJlZml4fSwgYnV0IGluc3RhbGxhdGlv biB3aXRoDQorQHNhbXB7REVTVERJUj1AdmFye3BhdGgtdG8tcm9vdGRpcn19 IHdvdWxkIGNvcnJlY3RseSBpbnN0YWxsIGluZm8NCitmaWxlcyBpbnRvIEBm aWxle0B2YXJ7cGF0aC10by1yb290ZGlyfS91c3Ivc2hhcmUvaW5mb30uICBO b3RlIHRoYXQNCit0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSBAY29kZXtE RVNURElSfSBuZWVkIG5vdCBleGlzdCB5ZXQ7DQoraXQgd2lsbCBiZSBjcmVh dGVkIGlmIG5lY2Vzc2FyeS4NCisNCitUaGVyZSBpcyBhIHN1YnRsZSBwb2lu dCB3aXRoIHRvb2xkaXJzIGFuZA0KK0Bjb2Rle0RFU1RESVJ9OiBJZiB5b3Ug cmVsb2NhdGUgdGhlIGluc3RhbGxhdGlvbiB0bw0KK2UuZy5AOiBAc2FtcHtE RVNURElSPUB2YXJ7cm9vdGRpcn19LCB0aGVuIHRoZSBkaXJlY3RvcnkNCitA ZmlsZXtAdmFye3Jvb3RkaXJ9L0B2YXJ7ZXhlYy1wcmVmaXh9L0B2YXJ7dGFy Z2V0LWFsaWFzfS9iaW59IHdpbGwNCitiZSBmaWxsZWQgd2l0aCBkdXBsaWNh dGVkIEdDQyBleGVjdXRhYmxlcyBvbmx5IGlmIGl0IGFscmVhZHkgZXhpc3Rz LA0KK2l0IHdpbGwgbm90IGJlIGNyZWF0ZWQgb3RoZXJ3aXNlLiAgVGhpcyBp cyByZWdhcmRlZCBhcyBhIGZlYXR1cmUsDQorbm90IGFzIGEgYnVnLCBiZWNh dXNlIGl0IGdpdmVzIHNsaWdodGx5IG1vcmUgY29udHJvbCB0byB0aGUgcGFj a2FnZXJzDQordXNpbmcgdGhlIEBjb2Rle0RFU1RESVJ9IGZlYXR1cmUuDQor DQogSWYgeW91IGJ1aWx0IGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBHQ0MgdXNp bmcgQHNhbXB7bWFrZSBib290c3RyYXB9IHRoZW4gcGxlYXNlDQogcXVpY2ts eSByZXZpZXcgdGhlIGJ1aWxkIHN0YXR1cyBwYWdlIGZvciB5b3VyIHJlbGVh c2UsIGF2YWlsYWJsZSBmcm9tDQogQHVyZWZ7aHR0cDovL2djYy5nbnUub3Jn L2J1aWxkc3RhdC5odG1sfS4NCg== --8323584-1730069087-1041615568=:2540 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir4-no-am.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4-no-am.diff" SW5kZXg6IGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmluDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMv Y3ZzL2djYy1jdnMvZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxl LmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41OA0KZGlmZiAtdSAtcjEu NTggTWFrZWZpbGUuaW4NCi0tLSBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtl ZmlsZS5pbgkxNiBEZWMgMjAwMiAxOTowMTo1OCAtMDAwMAkxLjU4DQorKysg bGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuaW4JMSBKYW4gMjAwMyAx NzozMzo0MSAtMDAwMA0KQEAgLTY4OCwzMiArNjg4LDMyIEBADQogCSAgICAt ZSAncyxeI2luY2x1ZGUgIlwoLipcKSIsI2luY2x1ZGUgPGJpdHMvXDE+LGcn IFwNCiAJICAgIDwgJHt0b3BsZXZlbF9zcmNkaXJ9L2djYy8ke2dsaWJjcHBf dGhyZWFkX2h9ID4gJEANCiBpbnN0YWxsLWRhdGEtbG9jYWw6DQotCSQobWtp bnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9DQotCSQobWtpbnN0YWxs ZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19idWlsZGRpcn0NCisJ JChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9 DQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVf ZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7Yml0c19o ZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAk e2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9uZQ0KLQkk KG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JhY2t3YXJk X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERF U1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19idWlsZGRpcn07IGRv bmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7 YmFja3dhcmRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkg JCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRk aXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9k aXJ9LyR7ZXh0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtm aWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRf YnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRpcn0NCiAJZm9yIGZp bGUgaW4gJHtleHRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFU QSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1aWxkZGly fTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGly fS8ke2NfYmFzZV9idWlsZGRpcn0NCisJICAkKElOU1RBTExfREFUQSkgJCR7 ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWls ZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtn eHhfaW5jbHVkZV9kaXJ9LyR7Y19iYXNlX2J1aWxkZGlyfQ0KIAlmb3IgZmls ZSBpbiAke2NfYmFzZV9oZWFkZXJzX3JlbmFtZX07IGRvIFwNCi0JICAkKElO U1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9LyQke2ZpbGV9ICR7Z3h4 X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAke2Nf YmFzZV9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn07IGRvbmUNCiAJY19iYXNlX2hl YWRlcnNfZXh0cmFfaW5zdGFsbD0nJChjX2Jhc2VfaGVhZGVyc19leHRyYSkn O1wNCiAJZm9yIGZpbGUgaW4gJCRjX2Jhc2VfaGVhZGVyc19leHRyYV9pbnN0 YWxsOyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAke2d4eF9p bmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9uZQ0KKwkgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQogCWNfY29tcGF0aWJpbGl0eV9o ZWFkZXJzX2luc3RhbGw9JyQoY19jb21wYXRpYmlsaXR5X2hlYWRlcnNfZXh0 cmEpJztcDQogCWZvciBmaWxlIGluICQkY19jb21wYXRpYmlsaXR5X2hlYWRl cnNfaW5zdGFsbDsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUg JHtneHhfaW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykg JHtneHhfaW5jbHVkZV9kaXJ9LyR7c3RkX2J1aWxkZGlyfQ0KKwkgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikke2d4eF9p bmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9DQogCWZvciBmaWxlIGluICR7 c3RkX2hlYWRlcnNfcmVuYW1lfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRB KSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9 OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9 LyR7dGFyZ2V0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAke3N0 ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVf ZGlyfS8ke3N0ZF9idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJz KSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxk ZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3RhcmdldF9oZWFkZXJzfSAke3Rhcmdl dF9oZWFkZXJzX2V4dHJhfSBcDQogCSAke3RocmVhZF90YXJnZXRfaGVhZGVy c307IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhf aW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsgZG9uZQ0KKwkgICQo SU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsgZG9uZQ0KIA0KICMgQnkgYWRk aW5nIHRoZXNlIGZpbGVzIGhlcmUsIGF1dG9tYWtlIHdpbGwgcmVtb3ZlIHRo ZW0gZm9yICdtYWtlIGNsZWFuJw0KICNDTEVBTkZJTEVTID0gJHthbGxzdGFt cHN9DQo= --8323584-1730069087-1041615568=:2540 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir4-no-ag.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4-no-ag.diff" SW5kZXg6IE1ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL01ha2Vm aWxlLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDMNCmRpZmYgLXUg LXIxLjE0MyBNYWtlZmlsZS5pbg0KLS0tIE1ha2VmaWxlLmluCTMxIERlYyAy MDAyIDIwOjEwOjUzIC0wMDAwCTEuMTQzDQorKysgTWFrZWZpbGUuaW4JMSBK YW4gMjAwMyAxOToyNzo1NyAtMDAwMA0KQEAgLTM4NSw2ICszODUsNyBAQA0K IAkiQ1hYRkxBR1M9JChDWFhGTEFHUykiIFwNCiAJIkNYWEZMQUdTX0ZPUl9U QVJHRVQ9JChDWFhGTEFHU19GT1JfVEFSR0VUKSIgXA0KIAkiQ1hYX0ZPUl9U QVJHRVQ9JChDWFhfRk9SX1RBUkdFVCkiIFwNCisJIkRFU1RESVI9JChERVNU RElSKSIgXA0KIAkiRExMVE9PTF9GT1JfVEFSR0VUPSQoRExMVE9PTF9GT1Jf VEFSR0VUKSIgXA0KIAkiSU5TVEFMTD0kKElOU1RBTEwpIiBcDQogCSJJTlNU QUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpIiBcDQpAQCAtMTA3Niw3ICsxMDc3 LDcgQEANCiBpbnN0YWxsLWluZm86IGRvLWluc3RhbGwtaW5mbyBkaXIuaW5m bw0KIAlzPWBjZCAkKHNyY2Rpcik7ICR7UFdEfWA7IGV4cG9ydCBzOyBcDQog CWlmIFsgLWYgZGlyLmluZm8gXSA7IHRoZW4gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSBkaXIuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvIDsgXA0KKwkgICQo SU5TVEFMTF9EQVRBKSBkaXIuaW5mbyAkKERFU1RESVIpJChpbmZvZGlyKS9k aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgZmkNCiANCiBsb2NhbC1jbGVh bjoNCkBAIC0xMjA3LDcgKzEyMDgsNyBAQA0KIA0KIGRpci5pbmZvOiBkby1p bnN0YWxsLWluZm8NCiAJaWYgWyAtZiAkKHNyY2RpcikvdGV4aW5mby9nZW4t aW5mby1kaXIgXSA7IHRoZW4gXA0KLQkgICQoc3JjZGlyKS90ZXhpbmZvL2dl bi1pbmZvLWRpciAkKGluZm9kaXIpICQoc3JjZGlyKS90ZXhpbmZvL2Rpci5p bmZvLXRlbXBsYXRlID4gZGlyLmluZm8ubmV3IDsgXA0KKwkgICQoc3JjZGly KS90ZXhpbmZvL2dlbi1pbmZvLWRpciAkKERFU1RESVIpJChpbmZvZGlyKSAk KHNyY2RpcikvdGV4aW5mby9kaXIuaW5mby10ZW1wbGF0ZSA+IGRpci5pbmZv Lm5ldyA7IFwNCiAJICBtdiAtZiBkaXIuaW5mby5uZXcgZGlyLmluZm8gOyBc DQogCWVsc2UgdHJ1ZSA7IFwNCiAJZmkNCg== --8323584-1730069087-1041615568=:2540-- From gcc-patches-return-74956-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:50:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14900 invoked by alias); 3 Jan 2003 17:50:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14890 invoked from network); 3 Jan 2003 17:50:40 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 3 Jan 2003 17:50:40 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h03Hk6s32664; Fri, 3 Jan 2003 09:46:07 -0800 Date: Fri, 03 Jan 2003 09:46:06 -0800 From: Mark Mitchell To: "lerdsuwa@users.sourceforge.net" , "gcc-patches@gcc.gnu.org" Subject: Re: [C++ PATCH] Fix name lookup inconsistency Message-ID: <158300000.1041615966@warlock.codesourcery.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Saturday, January 04, 2003 12:35:39 AM +0700 Kriang Lerdsuwanakij wrote: > Hi > > This following patch corrects an inconsistency in name lookup code. > When doing name lookup a class template preferring a type, > lookup_name returns a TEMPLATE_DECL for an ordinary class template > but returns a TYPE_DECL for a member class template. This patch is out-of-date; the new parser changed some of this code a bit. To me, the code in CVS looks correct. The way the new parser handles this problem is that if it does lookup for a class-name, and gets a TEMPLATE_DECL, it checks to see if it should use that as a class, instead. That's the right thing; name lookup should just look up the name without getting clever. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-74957-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:52:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15847 invoked by alias); 3 Jan 2003 17:52:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15834 invoked from network); 3 Jan 2003 17:52:48 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 3 Jan 2003 17:52:48 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 9276C14336; Fri, 3 Jan 2003 18:52:35 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18UVzm-0002nd-00; Fri, 03 Jan 2003 18:52:34 +0100 Mail-Copies-To: never To: Christian Cornelssen Cc: Subject: Re: [3.4] DESTDIR support completed References: From: Andreas Jaeger Date: Fri, 03 Jan 2003 18:52:34 +0100 In-Reply-To: (Christian Cornelssen's message of "Fri, 3 Jan 2003 18:43:27 +0100 (CET)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Christian Cornelssen writes: > Hello again, > > attached is a `destdir4-changelog.diff' in "cvs diff -U0" format > creating the desired ChangeLog entries for the DESTDIR patch. Thanks for the update. Just one note: ChangeLog entries should not be send as a patch but just as plain text - a ChangeLog always never applies correctly. Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-74958-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 18:14:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32517 invoked by alias); 3 Jan 2003 18:14:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32455 invoked from network); 3 Jan 2003 18:14:34 -0000 Received: from unknown (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by 209.249.29.67 with SMTP; 3 Jan 2003 18:14:34 -0000 Received: from hiauly1.hia.nrc.ca (localhost [127.0.0.1]) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) with ESMTP id h03IEMot013896; Fri, 3 Jan 2003 13:14:22 -0500 (EST) Received: (from dave@localhost) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) id h03IELoI013895; Fri, 3 Jan 2003 13:14:21 -0500 (EST) Message-Id: <200301031814.h03IELoI013895@hiauly1.hia.nrc.ca> Subject: Re: c++/2843: parser: __attribute__ on parameter declarations To: mark@codesourcery.com (Mark Mitchell) Date: Fri, 3 Jan 2003 13:14:21 -0500 (EST) From: "John David Anglin" Cc: neil@gcc.gnu.org, dave.anglin@nrc.ca, gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org In-Reply-To: <89020000.1041539255@warlock.codesourcery.com> from "Mark Mitchell" at Jan 2, 2003 03:27:35 pm MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit > > Mark, I would also appreciate somebody looking at the following report > > which appears to be related to the above problem: > > > > . > > I checked in this patch to fix the problem. I confirm that this fixes the hppa64-hp-hpux11 problem and v3 now builds successfully with the new parser. Thanks, Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) From gcc-patches-return-74959-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 18:52:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15006 invoked by alias); 3 Jan 2003 18:52:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14967 invoked from network); 3 Jan 2003 18:52:02 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 3 Jan 2003 18:52:02 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h03IpmI14842 for ; Fri, 3 Jan 2003 10:51:48 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Fri, 3 Jan 2003 10:51:47 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h03Iplf16478; Fri, 3 Jan 2003 10:51:47 -0800 (PST) Date: Fri, 3 Jan 2003 10:51:20 -0800 Subject: Patch (darwin specific) Content-Type: multipart/mixed; boundary=Apple-Mail-3-1035654396 Mime-Version: 1.0 (Apple Message framework v546) Cc: Dale Johannesen To: gcc-patches@gcc.gnu.org From: Dale Johannesen Message-Id: <58FBDEB6-1F4C-11D7-A38B-000393D76DAA@apple.com> --Apple-Mail-3-1035654396 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed This removes an unnecessary instruction from the ppc darwin "stubs" used for function calls, and moves them into a different section to prevent problems mixing old and new stubs. 2003-01-03 Dale Johannesen * config/darwin.h: Update copyright. (EXTRA_SECTIONS): Add machopic_symbol_stub1, machopic_picsymbol_stub1. (EXTRA_SECTION_FUNCTIONS): Ditto. * rs6000/rs6000.c: Update copyright. (machopic_output_stub): Use them. Remove an insn from stub code. --Apple-Mail-3-1035654396 Content-Disposition: attachment; filename=diffs2 Content-Transfer-Encoding: 7bit Content-Type: application/octet-stream; x-unix-mode=0644; name="diffs2" Index: darwin.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/darwin.h,v retrieving revision 1.45 diff -u -d -b -w -c -3 -p -r1.45 darwin.h *** darwin.h 19 Dec 2002 23:46:48 -0000 1.45 --- darwin.h 3 Jan 2003 18:49:47 -0000 *************** *** 1,5 **** /* Target definitions for Darwin (Mac OS X) systems. ! Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Apple Computer Inc. --- 1,5 ---- /* Target definitions for Darwin (Mac OS X) systems. ! Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Apple Computer Inc. *************** FUNCTION () \ *** 510,516 **** --- 510,518 ---- in_machopic_nl_symbol_ptr, \ in_machopic_lazy_symbol_ptr, \ in_machopic_symbol_stub, \ + in_machopic_symbol_stub1, \ in_machopic_picsymbol_stub, \ + in_machopic_picsymbol_stub1, \ in_darwin_exception, in_darwin_eh_frame, \ num_sections *************** SECTION_FUNCTION (machopic_nl_symbol_ptr *** 614,622 **** --- 616,630 ---- SECTION_FUNCTION (machopic_symbol_stub_section, \ in_machopic_symbol_stub, \ ".symbol_stub", 0) \ + SECTION_FUNCTION (machopic_symbol_stub1_section, \ + in_machopic_symbol_stub1, \ + ".section __TEXT,__symbol_stub1,symbol_stubs,pure_instructions,16", 0)\ SECTION_FUNCTION (machopic_picsymbol_stub_section, \ in_machopic_picsymbol_stub, \ ".picsymbol_stub", 0) \ + SECTION_FUNCTION (machopic_picsymbol_stub1_section, \ + in_machopic_picsymbol_stub1, \ + ".section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32", 0)\ SECTION_FUNCTION (darwin_exception_section, \ in_darwin_exception, \ ".section __DATA,__gcc_except_tab", 0) \ Index: rs6000/rs6000.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.405 diff -u -d -b -w -c -3 -p -r1.405 rs6000.c *** rs6000/rs6000.c 20 Dec 2002 04:30:54 -0000 1.405 --- rs6000/rs6000.c 3 Jan 2003 18:49:50 -0000 *************** *** 1,6 **** /* Subroutines used for code generation on IBM RS/6000. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GNU CC. --- 1,6 ---- /* Subroutines used for code generation on IBM RS/6000. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GNU CC. *************** machopic_output_stub (file, symb, stub) *** 12978,12986 **** GEN_LOCAL_LABEL_FOR_SYMBOL (local_label_0, symb, length, 0); if (flag_pic == 2) ! machopic_picsymbol_stub_section (); else ! machopic_symbol_stub_section (); fprintf (file, "%s:\n", stub); fprintf (file, "\t.indirect_symbol %s\n", symbol_name); --- 12978,12987 ---- GEN_LOCAL_LABEL_FOR_SYMBOL (local_label_0, symb, length, 0); if (flag_pic == 2) ! machopic_picsymbol_stub1_section (); else ! machopic_symbol_stub1_section (); ! fprintf (file, "\t.align 2\n"); fprintf (file, "%s:\n", stub); fprintf (file, "\t.indirect_symbol %s\n", symbol_name); *************** machopic_output_stub (file, symb, stub) *** 12993,13003 **** fprintf (file, "\taddis r11,r11,ha16(%s-%s)\n", lazy_ptr_name, local_label_0); fprintf (file, "\tmtlr r0\n"); ! fprintf (file, "\tlwz r12,lo16(%s-%s)(r11)\n", lazy_ptr_name, local_label_0); fprintf (file, "\tmtctr r12\n"); - fprintf (file, "\taddi r11,r11,lo16(%s-%s)\n", - lazy_ptr_name, local_label_0); fprintf (file, "\tbctr\n"); } else --- 12994,13002 ---- fprintf (file, "\taddis r11,r11,ha16(%s-%s)\n", lazy_ptr_name, local_label_0); fprintf (file, "\tmtlr r0\n"); ! fprintf (file, "\tlwzu r12,lo16(%s-%s)(r11)\n", lazy_ptr_name, local_label_0); fprintf (file, "\tmtctr r12\n"); fprintf (file, "\tbctr\n"); } else --Apple-Mail-3-1035654396 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed --Apple-Mail-3-1035654396-- From gcc-patches-return-74960-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:04:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21332 invoked by alias); 3 Jan 2003 19:04:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21322 invoked from network); 3 Jan 2003 19:04:36 -0000 Received: from unknown (HELO mail.cdt.org) (206.112.85.61) by 209.249.29.67 with SMTP; 3 Jan 2003 19:04:36 -0000 Received: from dberlin.org (h-69-3-5-6.mclnva23.covad.net [69.3.5.6]) by mail.cdt.org (Postfix) with ESMTP id 5BDEA490156 for ; Fri, 3 Jan 2003 14:00:11 -0500 (EST) Received: from [192.168.1.102] (account dberlin HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.0.3) with ESMTP-TLS id 2083658 for gcc-patches@gcc.gnu.org; Fri, 03 Jan 2003 14:04:24 -0500 Date: Fri, 3 Jan 2003 14:04:22 -0500 Mime-Version: 1.0 (Apple Message framework v551) Content-Type: text/plain; charset=US-ASCII; format=flowed Subject: Ping! [PATCH]: Pool allocate et_forest structures From: Daniel Berlin To: gcc-patches@gcc.gnu.org Content-Transfer-Encoding: 7bit Message-Id: <2B1A587F-1F4E-11D7-9FD2-000393575BCC@dberlin.org> Been a few weeks. Just to note, this patch was bootstrapped on i686-pc-linux-gnu and powerpc-apple-darwin6.3, and as noted in a different message, improves overall compile times on some testcases i have with large numbers of BB's by 10-20%. Begin forwarded message: > From: Daniel Berlin > Date: Thu Dec 19, 2002 10:56:38 AM US/Eastern > To: gcc-patches@gcc.gnu.org > Subject: [PATCH]: Pool allocate et_forest structures > > 2002-12-19 Daniel Berlin > > * et-forest.c: Include alloc-pool.h. > (struct et_forest): Add node_pool and occur_pool. > (et_forest_create): Create the new pools. > (et_forest_delete): Delete them. > (et_forest_add_node): Allocate and free using pools. > (et_forest_add_edge): Ditto. > (et_forest_remove_node): Ditto. > (et_forest_remove_edge): Ditto. > > * Makefile.in (et-forest.o): Add alloc_pool.h dependency. > > Index: et-forest.c > =================================================================== > RCS file: /cvs/gcc/gcc/gcc/et-forest.c,v > retrieving revision 1.3 > diff -u -3 -p -r1.3 et-forest.c > --- et-forest.c 16 Dec 2002 18:19:24 -0000 1.3 > +++ et-forest.c 19 Dec 2002 15:53:54 -0000 > @@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. > #include "coretypes.h" > #include "tm.h" > #include "et-forest.h" > +#include "alloc-pool.h" > > struct et_forest_occurrence; > typedef struct et_forest_occurrence* et_forest_occurrence_t; > @@ -37,6 +38,8 @@ struct et_forest > { > /* Linked list of nodes is used to destroy the structure. */ > int nnodes; > + alloc_pool node_pool; > + alloc_pool occur_pool; > }; > > /* Single occurrence of node in ET-forest. > @@ -73,7 +76,7 @@ struct et_forest_node > > > static et_forest_occurrence_t splay PARAMS ((et_forest_occurrence_t)); > -static void remove_all_occurrences PARAMS ((et_forest_node_t)); > +static void remove_all_occurrences PARAMS ((et_forest_t, > et_forest_node_t)); > static inline et_forest_occurrence_t find_leftmost_node > PARAMS ((et_forest_occurrence_t)); > static inline et_forest_occurrence_t find_rightmost_node > @@ -336,7 +339,8 @@ splay (node) > > /* Remove all occurences of the given node before destroying the > node. */ > static void > -remove_all_occurrences (forest_node) > +remove_all_occurrences (forest, forest_node) > + et_forest_t forest; > et_forest_node_t forest_node; > { > et_forest_occurrence_t first = forest_node->first; > @@ -381,7 +385,7 @@ remove_all_occurrences (forest_node) > if (prev_node->node->last == next_node) > prev_node->node->last = prev_node; > > - free (next_node); > + pool_free (forest->occur_pool, next_node); > } > > if (first != last) > @@ -400,14 +404,14 @@ remove_all_occurrences (forest_node) > node->right->parent = 0; > > next_node = node->next; > - free (node); > + pool_free (forest->occur_pool, node); > node = next_node; > } > } > > - free (first); > + pool_free (forest->occur_pool, first); > if (first != last) > - free (last); > + pool_free (forest->occur_pool, last); > } > > /* Calculate ET value of the given node. */ > @@ -439,6 +443,8 @@ et_forest_create () > et_forest_t forest = xmalloc (sizeof (struct et_forest)); > > forest->nnodes = 0; > + forest->occur_pool = create_alloc_pool ("et_forest_occurrence > pool", sizeof (struct et_forest_occurrence), 300); > + forest->node_pool = create_alloc_pool ("et_forest_node pool", > sizeof (struct et_forest_node), 300); > return forest; > } > > @@ -451,7 +457,8 @@ et_forest_delete (forest) > { > if (forest->nnodes) > abort (); > - > + free_alloc_pool (forest->occur_pool); > + free_alloc_pool (forest->node_pool); > free (forest); > } > > @@ -466,8 +473,8 @@ et_forest_add_node (forest, value) > et_forest_node_t node; > et_forest_occurrence_t occ; > > - node = xmalloc (sizeof (struct et_forest_node)); > - occ = xmalloc (sizeof (struct et_forest_occurrence)); > + node = pool_alloc (forest->node_pool); > + occ = pool_alloc (forest->occur_pool); > > node->first = node->last = occ; > node->value = value; > @@ -505,7 +512,7 @@ et_forest_add_edge (forest, parent_node, > if (child_occ->left) > abort (); /* child must be root of its containing tree. */ > > - new_occ = xmalloc (sizeof (struct et_forest_occurrence)); > + new_occ = pool_alloc (forest->occur_pool); > > new_occ->node = parent_node; > new_occ->left = child_occ; > @@ -532,10 +539,10 @@ et_forest_remove_node (forest, node) > et_forest_t forest; > et_forest_node_t node; > { > - remove_all_occurrences (node); > + remove_all_occurrences (forest, node); > forest->nnodes--; > > - free (node); > + pool_free (forest->node_pool, node); > } > > /* Remove edge from the tree, return 1 if sucesfull, > @@ -575,7 +582,7 @@ et_forest_remove_edge (forest, parent_no > if (parent_post_occ == parent_node->last) > parent_node->last = parent_pre_occ; > > - free (parent_post_occ); > + pool_free (forest->occur_pool, parent_post_occ); > return 1; > } > From gcc-patches-return-74961-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:23:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28803 invoked by alias); 3 Jan 2003 19:23:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28742 invoked from network); 3 Jan 2003 19:23:37 -0000 Received: from unknown (HELO localhost.redhat.com) (66.30.197.194) by 209.249.29.67 with SMTP; 3 Jan 2003 19:23:37 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 27DD33DC3; Fri, 3 Jan 2003 14:23:25 -0500 (EST) Message-ID: <3E15E32C.2050405@redhat.com> Date: Fri, 03 Jan 2003 14:23:24 -0500 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.1) Gecko/20021211 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Cc: insight@sources.redhat.com, gdb-patches@sources.redhat.com Subject: [rfa/toplevel] Conditionalize GDB_TK Content-Type: multipart/mixed; boundary="------------080906070809080702090603" This is a multi-part message in MIME format. --------------080906070809080702090603 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hello, The attatched only adds the tk directories to the gdb dependency list when the corresponding tk files are present. That way `all-gdb' doesn't build tk files (except when needed). ok? Andrew PS: Disclaimer, I cut/paste the configure changes. Perhaphs someone able to regenerate configure should commit this? --------------080906070809080702090603 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" 2003-01-03 Andrew Cagney * configure.in (GDB_TK): Add tcl directories conditional on gdb/gdbtk directory being present. * configure: Regenerate. Index: configure =================================================================== RCS file: /cvs/src/src/configure,v retrieving revision 1.40 diff -u -r1.40 configure --- configure 31 Dec 2002 18:00:11 -0000 1.40 +++ configure 3 Jan 2003 17:48:45 -0000 @@ -2334,11 +2334,23 @@ # so we should be able to put the 'maybe's in unconditionally and # leave out the maybe dependencies when enable_gdbtk is false. I'm not # 100% sure that that's safe though. + +gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" case "$enable_gdbtk" in no) GDB_TK="" ;; + yes) + GDB_TK="${gdb_tk}" ;; *) - GDB_TK="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" ;; + # Only add the dependency on gdbtk when GDBtk is part of the gdb + # distro. Eventually someone will fix this and move Insight, nee + # gdbtk to a separate directory. + if test -d ${srcdir}/gdb/gdbtk ; then + GDB_TK="${gdb_tk}" + else + GDB_TK="" + fi + ;; esac # Create the 'maybe dependencies'. This uses a temporary file. Index: configure.in =================================================================== RCS file: /cvs/src/src/configure.in,v retrieving revision 1.137 diff -u -r1.137 configure.in --- configure.in 31 Dec 2002 18:00:11 -0000 1.137 +++ configure.in 3 Jan 2003 17:48:45 -0000 @@ -1677,11 +1677,23 @@ # so we should be able to put the 'maybe's in unconditionally and # leave out the maybe dependencies when enable_gdbtk is false. I'm not # 100% sure that that's safe though. + +gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" case "$enable_gdbtk" in no) GDB_TK="" ;; + yes) + GDB_TK="${gdb_tk}" ;; *) - GDB_TK="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" ;; + # Only add the dependency on gdbtk when GDBtk is part of the gdb + # distro. Eventually someone will fix this and move Insight, nee + # gdbtk to a separate directory. + if test -d ${srcdir}/gdb/gdbtk ; then + GDB_TK="${gdb_tk}" + else + GDB_TK="" + fi + ;; esac # Create the 'maybe dependencies'. This uses a temporary file. --------------080906070809080702090603-- From gcc-patches-return-74962-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:25:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30754 invoked by alias); 3 Jan 2003 19:25:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30720 invoked from network); 3 Jan 2003 19:25:42 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 3 Jan 2003 19:25:42 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h03JKq119546; Fri, 3 Jan 2003 14:20:52 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03JPSn20578; Fri, 3 Jan 2003 14:25:28 -0500 Received: from dhcp-172-16-25-234.sfbay.redhat.com (dhcp-172-16-25-234.sfbay.redhat.com [172.16.25.234]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h03JPRn08814; Fri, 3 Jan 2003 11:25:27 -0800 Subject: Re: [libffi] closures for sparc From: Anthony Green To: Jeff Sturm Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 03 Jan 2003 11:27:39 -0800 Message-Id: <1041622060.1560.34.camel@escape> Mime-Version: 1.0 On Sat, 2002-12-28 at 09:13, Jeff Sturm wrote: > This is a repost from July, cleaned up and retested on mainline. It > enables closures for sparc and sparc64, to prepare for enabling the > libjava bytecode interpreter. I saw your interpreter test results. Looks good to me. Thanks, AG From gcc-patches-return-74963-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:28:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 428 invoked by alias); 3 Jan 2003 19:28:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 399 invoked from network); 3 Jan 2003 19:28:21 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 3 Jan 2003 19:28:21 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 1F884ABAF8 for ; Fri, 3 Jan 2003 19:28:09 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id A7451F7F9F; Fri, 3 Jan 2003 19:28:02 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: PATCH to __FUNCTION__ et al decl handling From: Jason Merrill Date: Fri, 03 Jan 2003 14:28:02 -0500 Message-ID: Lines: 112 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= This patch cleans up the tree structure for __FUNCTION__ and its friends a bit by pushing the decls into the outermost block for the function and moving the DECL_STMTs inside the appropriate SCOPE_STMT. The former is needed for tree-ssa; the latter is just being tidy. Booted and tested i686-pc-linux-gnu, applied to trunk. 2003-01-02 Jason Merrill * c-common.c (finish_fname_decls): Put the DECL_STMTs inside the outermost scope. * c-decl.c (c_make_fname_decl): Push the decls there, too. cp/ * decl.c (cp_make_fname_decl): Push the decls inside the outermost scope. --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** ./gcc/c-common.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/c-common.c Fri Jan 3 14:15:33 2003 *************** finish_fname_decls () *** 1050,1062 **** if (body) { ! /* They were called into existence, so add to statement tree. */ ! body = chainon (body, ! TREE_CHAIN (DECL_SAVED_TREE (current_function_decl))); ! body = build_stmt (COMPOUND_STMT, body); ! ! COMPOUND_STMT_NO_SCOPE (body) = 1; ! TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body; } for (ix = 0; fname_vars[ix].decl; ix++) --- 1050,1067 ---- if (body) { ! /* They were called into existence, so add to statement tree. Add ! the DECL_STMTs inside the outermost scope. */ ! tree *p = &DECL_SAVED_TREE (current_function_decl); ! /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK. */ ! while (TREE_CODE (*p) != COMPOUND_STMT) ! p = &TREE_CHAIN (*p); ! p = &COMPOUND_BODY (*p); ! if (TREE_CODE (*p) == SCOPE_STMT) ! p = &TREE_CHAIN (*p); ! ! body = chainon (body, *p); ! *p = body; } for (ix = 0; fname_vars[ix].decl; ix++) *** ./gcc/c-decl.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/c-decl.c Fri Jan 3 14:15:33 2003 *************** c_make_fname_decl (id, type_dep) *** 2545,2550 **** --- 2545,2562 ---- DECL_INITIAL (decl) = init; TREE_USED (decl) = 1; + + if (current_function_decl) + { + /* Add the decls to the outermost block. */ + struct binding_level *b = current_binding_level; + struct binding_level *old = b; + while (b->level_chain->parm_flag == 0) + b = b->level_chain; + current_binding_level = b; + pushdecl (decl); + current_binding_level = old; + } finish_decl (decl, init, NULL_TREE); *** ./gcc/cp/decl.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/decl.c Fri Jan 3 14:15:33 2003 *************** cp_make_fname_decl (id, type_dep) *** 6656,6662 **** tree init = cp_fname_init (name); tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init)); ! /* As we don't push the decl here, we must set the context. */ DECL_CONTEXT (decl) = current_function_decl; DECL_PRETTY_FUNCTION_P (decl) = type_dep; --- 6656,6662 ---- tree init = cp_fname_init (name); tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init)); ! /* As we're using pushdecl_with_scope, we must set the context. */ DECL_CONTEXT (decl) = current_function_decl; DECL_PRETTY_FUNCTION_P (decl) = type_dep; *************** cp_make_fname_decl (id, type_dep) *** 6667,6672 **** --- 6667,6680 ---- TREE_USED (decl) = 1; + if (current_function_decl) + { + struct cp_binding_level *b = current_binding_level; + while (b->level_chain->parm_flag == 0) + b = b->level_chain; + pushdecl_with_scope (decl, b); + } + cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING); return decl; --=-=-=-- From gcc-patches-return-74964-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:44:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11988 invoked by alias); 3 Jan 2003 19:44:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11956 invoked from network); 3 Jan 2003 19:44:02 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 3 Jan 2003 19:44:02 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h03JdB120051; Fri, 3 Jan 2003 14:39:11 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03Jhln21143; Fri, 3 Jan 2003 14:43:48 -0500 Received: from dhcp-172-16-25-153.sfbay.redhat.com (dhcp-172-16-25-153.sfbay.redhat.com [172.16.25.153]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h03Jhkn10176; Fri, 3 Jan 2003 11:43:46 -0800 Subject: Re: [3.3 branch] Ada bootstrap failure on mipsel-linux From: Eric Christopher To: Matthias Klose Cc: gcc-patches@gcc.gnu.org In-Reply-To: <15889.30529.580382.309916@gargle.gargle.HOWL> References: <15887.485.807305.5559@gargle.gargle.HOWL> <1041281045.13998.6.camel@ghostwheel.ges.redhat.com> <15889.30529.580382.309916@gargle.gargle.HOWL> Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 03 Jan 2003 11:29:34 -0800 Message-Id: <1041622174.13269.0.camel@ghostwheel.ges.redhat.com> Mime-Version: 1.0 On Tue, 2002-12-31 at 02:53, Matthias Klose wrote: > Eric Christopher writes: > > Just so people know, I've got a patch for this (it was checked into the > > rewrite branch quite some time ago...) and will check it into 3_3 branch > > and mainline shortly. > I've now checked in this patch. > thanks. please close the bug report (9092) I opened in gnats for this. I'll close this after you give me confirmation that it actually fixed it please :) I don't have a mips-linux box to do bootstraps on at the moment... Thanks. -eric -- Yeah, I used to play basketball... From gcc-patches-return-74965-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:46:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14457 invoked by alias); 3 Jan 2003 19:46:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14433 invoked from network); 3 Jan 2003 19:46:34 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 3 Jan 2003 19:46:34 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h03JJ2B02553 for ; Fri, 3 Jan 2003 14:19:02 -0500 Received: from post-office.corp.redhat.com (post-office.corp.redhat.com [172.16.52.227]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03JkLa32315; Fri, 3 Jan 2003 14:46:21 -0500 Received: from greed.delorie.com (dj.cipe.redhat.com [10.0.0.222]) by post-office.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03JkKK15147; Fri, 3 Jan 2003 14:46:21 -0500 Received: (from dj@localhost) by greed.delorie.com (8.11.6/8.11.6) id h03JkKe06892; Fri, 3 Jan 2003 14:46:20 -0500 Date: Fri, 3 Jan 2003 14:46:20 -0500 Message-Id: <200301031946.h03JkKe06892@greed.delorie.com> From: DJ Delorie To: ac131313@redhat.com CC: gcc-patches@gcc.gnu.org, insight@sources.redhat.com, gdb-patches@sources.redhat.com In-reply-to: <3E15E32C.2050405@redhat.com> (message from Andrew Cagney on Fri, 03 Jan 2003 14:23:24 -0500) Subject: Re: [rfa/toplevel] Conditionalize GDB_TK References: <3E15E32C.2050405@redhat.com> > The attached only adds the tk directories to the gdb dependency list > when the corresponding tk files are present. That way `all-gdb' > doesn't build tk files (except when needed). > > ok? Ok. > PS: Disclaimer, I cut/paste the configure changes. Perhaps someone > able to regenerate configure should commit this? You don't have autoconf 2.13? From gcc-patches-return-74966-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:51:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17450 invoked by alias); 3 Jan 2003 19:51:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17443 invoked from network); 3 Jan 2003 19:51:19 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 3 Jan 2003 19:51:19 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id B7340ABAF8 for ; Fri, 3 Jan 2003 19:51:06 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 909A4F7F9F; Fri, 3 Jan 2003 19:50:53 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: C++ lvalue correctness PATCH From: Jason Merrill Date: Fri, 03 Jan 2003 14:50:53 -0500 Message-ID: Lines: 222 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= This patch fixes up some of the cases of sloppy NOP_EXPRs around lvalues. For similar reasons, it also avoids having SAVE_EXPRs and MUST_NOT_THROW_EXPRs of class type; in general, only (pseudo-)lvalues should have class type, and those should be some sort of reference. The build_conditional_expr hunk fixes g++.oliva/ext1.C. Booted and tested i686-pc-linux-gnu. 2003-01-02 Jason Merrill * fold-const.c (fold) [COND_EXPR]: Avoid NOP_EXPRs better. cp/ * call.c (build_conditional_expr): Stabilize lvalues properly. * cvt.c (ocp_convert): Don't build NOP_EXPRs of class type. * tree.c (lvalue_p_1): Don't allow sloppy NOP_EXPRs as lvalues. Don't allow CALL_EXPR or VA_ARG_EXPR, either. * except.c (wrap_cleanups_r, build_throw): Make MUST_NOT_THROW_EXPRs void. * init.c (expand_default_init): Update to handle MUST_NOT_THROW_EXPR. --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** ./gcc/fold-const.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/fold-const.c Fri Jan 3 14:15:33 2003 *************** fold (expr) *** 7002,7008 **** /* Avoid adding NOP_EXPRs in case this is an lvalue. */ if (TYPE_MAIN_VARIANT (comp_type) == TYPE_MAIN_VARIANT (type)) ! comp_type = type; switch (comp_code) { --- 7002,7012 ---- /* Avoid adding NOP_EXPRs in case this is an lvalue. */ if (TYPE_MAIN_VARIANT (comp_type) == TYPE_MAIN_VARIANT (type)) ! { ! comp_type = type; ! comp_op0 = arg1; ! comp_op1 = arg2; ! } switch (comp_code) { *** ./gcc/cp/call.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/call.c Fri Jan 3 14:15:33 2003 *************** build_conditional_expr (tree arg1, tree *** 2977,2983 **** { if (pedantic) pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression"); ! arg1 = arg2 = save_expr (arg1); } /* [expr.cond] --- 2977,2988 ---- { if (pedantic) pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression"); ! ! /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */ ! if (real_lvalue_p (arg1)) ! arg2 = arg1 = stabilize_reference (arg1); ! else ! arg2 = arg1 = save_expr (arg1); } /* [expr.cond] *** ./gcc/cp/cvt.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/cvt.c Fri Jan 3 14:15:33 2003 *************** ocp_convert (tree type, tree expr, int c *** 654,659 **** --- 655,673 ---- conversion. */ else if (TREE_CODE (type) == COMPLEX_TYPE) return fold (convert_to_complex (type, e)); + else if (TREE_CODE (e) == TARGET_EXPR) + { + /* Don't build a NOP_EXPR of class type. Instead, change the + type of the temporary. Only allow this for cv-qual changes, + though. */ + if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (e)), + TYPE_MAIN_VARIANT (type))) + abort (); + TREE_TYPE (e) = TREE_TYPE (TARGET_EXPR_SLOT (e)) = type; + return e; + } + else if (CLASS_TYPE_P (type)) + abort (); else return fold (build1 (NOP_EXPR, type, e)); } *** ./gcc/cp/except.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/except.c Fri Jan 3 14:15:33 2003 *************** wrap_cleanups_r (tp, walk_subtrees, data *** 561,567 **** cleanup = TARGET_EXPR_CLEANUP (exp); if (cleanup) { ! cleanup = build1 (MUST_NOT_THROW_EXPR, TREE_TYPE (cleanup), cleanup); TARGET_EXPR_CLEANUP (exp) = cleanup; } --- 561,567 ---- cleanup = TARGET_EXPR_CLEANUP (exp); if (cleanup) { ! cleanup = build1 (MUST_NOT_THROW_EXPR, void_type_node, cleanup); TARGET_EXPR_CLEANUP (exp) = cleanup; } *************** build_throw (exp) *** 733,739 **** return error_mark_node; } ! exp = build1 (MUST_NOT_THROW_EXPR, TREE_TYPE (exp), exp); /* Prepend the allocation. */ exp = build (COMPOUND_EXPR, TREE_TYPE (exp), allocate_expr, exp); if (temp_expr != void_zero_node) --- 733,739 ---- return error_mark_node; } ! exp = build1 (MUST_NOT_THROW_EXPR, void_type_node, exp); /* Prepend the allocation. */ exp = build (COMPOUND_EXPR, TREE_TYPE (exp), allocate_expr, exp); if (temp_expr != void_zero_node) *** ./gcc/cp/init.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/init.c Fri Jan 3 14:15:33 2003 *************** expand_default_init (binfo, true_exp, ex *** 1206,1218 **** else init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); ! if (TREE_CODE (init) == TRY_CATCH_EXPR) ! /* We need to protect the initialization of a catch parm ! with a call to terminate(), which shows up as a TRY_CATCH_EXPR around the TARGET_EXPR for the copy constructor. See ! expand_start_catch_block. */ ! TREE_OPERAND (init, 0) = build (INIT_EXPR, TREE_TYPE (exp), exp, ! TREE_OPERAND (init, 0)); else init = build (INIT_EXPR, TREE_TYPE (exp), exp, init); TREE_SIDE_EFFECTS (init) = 1; --- 1206,1221 ---- else init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); ! if (TREE_CODE (init) == MUST_NOT_THROW_EXPR) ! /* We need to protect the initialization of a catch parm with a ! call to terminate(), which shows up as a MUST_NOT_THROW_EXPR around the TARGET_EXPR for the copy constructor. See ! initialize_handler_parm. */ ! { ! TREE_OPERAND (init, 0) = build (INIT_EXPR, TREE_TYPE (exp), exp, ! TREE_OPERAND (init, 0)); ! TREE_TYPE (init) = void_type_node; ! } else init = build (INIT_EXPR, TREE_TYPE (exp), exp, init); TREE_SIDE_EFFECTS (init) = 1; *** ./gcc/cp/tree.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/tree.c Fri Jan 3 14:15:33 2003 *************** lvalue_p_1 (ref, treat_class_rvalues_as_ *** 93,105 **** allow_cast_as_lvalue); case NOP_EXPR: ! /* If expression doesn't change the type, we consider it as an ! lvalue even when cast_as_lvalue extension isn't selected. ! That's because parts of the compiler are alleged to be sloppy ! about sticking in NOP_EXPR node for no good reason. */ ! if (allow_cast_as_lvalue || ! same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ref)), ! TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (ref, 0))))) return lvalue_p_1 (TREE_OPERAND (ref, 0), treat_class_rvalues_as_lvalues, allow_cast_as_lvalue); --- 93,99 ---- allow_cast_as_lvalue); case NOP_EXPR: ! if (allow_cast_as_lvalue) return lvalue_p_1 (TREE_OPERAND (ref, 0), treat_class_rvalues_as_lvalues, allow_cast_as_lvalue); *************** lvalue_p_1 (ref, treat_class_rvalues_as_ *** 179,187 **** case CALL_EXPR: case VA_ARG_EXPR: ! return ((treat_class_rvalues_as_lvalues ! && IS_AGGR_TYPE (TREE_TYPE (ref))) ! ? clk_class : clk_none); case FUNCTION_DECL: /* All functions (except non-static-member functions) are --- 173,180 ---- case CALL_EXPR: case VA_ARG_EXPR: ! /* Any class-valued call would be wrapped in a TARGET_EXPR. */ ! return clk_none; case FUNCTION_DECL: /* All functions (except non-static-member functions) are *** ./gcc/testsuite/g++.old-deja/g++.oliva/ext1.C.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/testsuite/g++.old-deja/g++.oliva/ext1.C Fri Jan 3 14:15:33 2003 *************** *** 4,10 **** // simplified from bug report by Michael Rosenbruch // Special g++ Options: - // execution test - XFAIL *-*-* extern "C" void abort(); --- 4,9 ---- --=-=-=-- From gcc-patches-return-74967-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 20:03:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26579 invoked by alias); 3 Jan 2003 20:03:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26571 invoked from network); 3 Jan 2003 20:03:12 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 3 Jan 2003 20:03:12 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 26975ABB05 for ; Fri, 3 Jan 2003 20:03:00 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 4AC8CF7F9F; Fri, 3 Jan 2003 20:02:48 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: Several small PATCHes From: Jason Merrill Date: Fri, 03 Jan 2003 15:02:48 -0500 Message-ID: Lines: 215 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= 2003-01-02 Jason Merrill * integrate.c (copy_decl_for_inlining): Don't clear the rtl for static/external decls. There's no need; the RTL is the same for all versions of such a decl. cp/ * call.c (convert_like_real): Call decl_constant_value for an IDENTITY_CONV even if there are no more conversions. In cases where a constant decl was an exact match, we were failing to call decl_constant_value because we only saw an IDENTITY_CONV. This broke tree-ssa, which doesn't know what to do with a CONST_DECL. I expect that it also caused missed optimizations in the trunk. * cvt.c (build_up_reference): Don't push unnamed temps. For consistency with handling of other unnamed temps. * decl2.c (do_namespace_alias): Namespace aliases are DECL_EXTERNAL. So the tree-ssa branch doesn't try to assign them rtl. * dump.c (cp_dump_tree): Don't try to dump class-specific fields for a backend struct. * init.c (build_vec_delete_1): Pre-evaluate the base address. So that the possibly complex expression for the address is not first evaluated inside the BIND_EXPR. * init.c (get_temp_regvar): Simplify logic. * tree.c (cp_copy_res_decl_for_inlining): Only do debug tweaks if our replacement is a decl. As now it can be an INDIRECT_REF. Booted and tested i686-pc-linux-gnu, applied to trunk. --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** ./gcc/integrate.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/integrate.c Fri Jan 3 14:15:33 2003 *************** copy_decl_for_inlining (decl, from_fn, t *** 394,400 **** DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl); /* The new variable/label has no RTL, yet. */ ! SET_DECL_RTL (copy, NULL_RTX); /* These args would always appear unused, if not for this. */ TREE_USED (copy) = 1; --- 394,401 ---- DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl); /* The new variable/label has no RTL, yet. */ ! if (!TREE_STATIC (copy) && !DECL_EXTERNAL (copy)) ! SET_DECL_RTL (copy, NULL_RTX); /* These args would always appear unused, if not for this. */ TREE_USED (copy) = 1; *** ./gcc/cp/call.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/call.c Fri Jan 3 14:15:33 2003 *************** convert_like_real (tree convs, tree expr *** 3964,3969 **** --- 3969,3980 ---- case IDENTITY_CONV: if (type_unknown_p (expr)) expr = instantiate_type (totype, expr, tf_error | tf_warning); + /* Convert a non-array constant variable to its underlying value, unless we + are about to bind it to a reference, in which case we need to + leave it as an lvalue. */ + if (inner >= 0 + && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE) + expr = decl_constant_value (expr); return expr; case AMBIG_CONV: /* Call build_user_type_conversion again for the error. */ *************** convert_like_real (tree convs, tree expr *** 3979,3991 **** if (expr == error_mark_node) return error_mark_node; - /* Convert a non-array constant variable to its underlying value, unless we - are about to bind it to a reference, in which case we need to - leave it as an lvalue. */ - if (TREE_CODE (convs) != REF_BIND - && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE) - expr = decl_constant_value (expr); - switch (TREE_CODE (convs)) { case RVALUE_CONV: --- 3990,3995 ---- *** ./gcc/cp/cvt.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/cvt.c Fri Jan 3 14:15:33 2003 *************** build_up_reference (tree type, tree arg, *** 381,387 **** { /* Automatic; make sure we handle the cleanup properly. */ maybe_push_cleanup_level (argtype); ! arg = pushdecl (arg); } /* Process the initializer for the declaration. */ --- 381,388 ---- { /* Automatic; make sure we handle the cleanup properly. */ maybe_push_cleanup_level (argtype); ! /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */ ! DECL_CONTEXT (arg) = current_function_decl; } /* Process the initializer for the declaration. */ *** ./gcc/cp/decl2.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/decl2.c Fri Jan 3 14:15:33 2003 *************** do_namespace_alias (tree alias, tree nam *** 4257,4262 **** --- 4257,4263 ---- /* Build the alias. */ alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node); DECL_NAMESPACE_ALIAS (alias) = namespace; + DECL_EXTERNAL (alias) = 1; pushdecl (alias); } *** ./gcc/cp/dump.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/dump.c Fri Jan 3 14:15:33 2003 *************** cp_dump_tree (dump_info, t) *** 273,278 **** --- 273,281 ---- return 1; } + if (! IS_AGGR_TYPE (t)) + break; + dump_child ("vfld", TYPE_VFIELD (t)); if (CLASSTYPE_TEMPLATE_SPECIALIZATION(t)) dump_string(di, "spec"); *** ./gcc/cp/init.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/init.c Fri Jan 3 14:15:33 2003 *************** build_vec_delete_1 (base, maxindex, type *** 2652,2661 **** if (controller) { TREE_OPERAND (controller, 1) = body; ! return controller; } ! else ! return cp_convert (void_type_node, body); } /* Create an unnamed variable of the indicated TYPE. */ --- 2655,2668 ---- if (controller) { TREE_OPERAND (controller, 1) = body; ! body = controller; } ! ! if (TREE_CODE (base) == SAVE_EXPR) ! /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */ ! body = build (COMPOUND_EXPR, void_type_node, base, body); ! ! return cp_convert (void_type_node, body); } /* Create an unnamed variable of the indicated TYPE. */ *************** get_temp_regvar (type, init) *** 2693,2699 **** decl = create_temporary_var (type); if (building_stmt_tree ()) add_decl_stmt (decl); ! if (!building_stmt_tree ()) SET_DECL_RTL (decl, assign_temp (type, 2, 0, 1)); finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init)); --- 2700,2706 ---- decl = create_temporary_var (type); if (building_stmt_tree ()) add_decl_stmt (decl); ! else SET_DECL_RTL (decl, assign_temp (type, 2, 0, 1)); finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init)); *** ./gcc/cp/tree.c.~1~ Fri Jan 3 11:47:14 2003 --- ./gcc/cp/tree.c Fri Jan 3 14:15:33 2003 *************** cp_copy_res_decl_for_inlining (result, f *** 2351,2363 **** /* We have a named return value; copy the name and source position so we can get reasonable debugging information, and register the return variable as its equivalent. */ ! DECL_NAME (var) = DECL_NAME (nrv); ! DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv); ! DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv); ! /* Don't lose initialization info. */ ! DECL_INITIAL (var) = DECL_INITIAL (nrv); ! /* Don't forget that it needs to go in the stack. */ ! TREE_ADDRESSABLE (var) = TREE_ADDRESSABLE (nrv); splay_tree_insert (decl_map, (splay_tree_key) nrv, --- 2344,2359 ---- /* We have a named return value; copy the name and source position so we can get reasonable debugging information, and register the return variable as its equivalent. */ ! if (TREE_CODE (var) == VAR_DECL) ! { ! DECL_NAME (var) = DECL_NAME (nrv); ! DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv); ! DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv); ! /* Don't lose initialization info. */ ! DECL_INITIAL (var) = DECL_INITIAL (nrv); ! /* Don't forget that it needs to go in the stack. */ ! TREE_ADDRESSABLE (var) = TREE_ADDRESSABLE (nrv); ! } splay_tree_insert (decl_map, (splay_tree_key) nrv, --=-=-=-- From gcc-patches-return-74968-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 20:04:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27022 invoked by alias); 3 Jan 2003 20:04:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27015 invoked from network); 3 Jan 2003 20:04:02 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 3 Jan 2003 20:04:02 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h03K3oI05901 for ; Fri, 3 Jan 2003 12:03:50 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Fri, 3 Jan 2003 12:03:44 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h03K3if27926; Fri, 3 Jan 2003 12:03:44 -0800 (PST) Date: Fri, 3 Jan 2003 12:03:17 -0800 Subject: Re: Patch: fix regression in PPC sibcalls Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v546) Cc: Dale Johannesen , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com To: Franz Sirl From: Dale Johannesen In-Reply-To: <200212271749.30611@enzo.bigblue.local> Message-Id: <66234F4D-1F56-11D7-A38B-000393D76DAA@apple.com> Content-Transfer-Encoding: 7bit On Friday, December 27, 2002, at 08:49 AM, Franz Sirl wrote: > On Saturday 21 December 2002 20:21, Dale Johannesen wrote: >> This patch breaks ppc (also sparc and probably others, I think) >> sibcalls: >> >> Wed Apr 24 21:58:09 2002 J"orn Rennecke >> * calls.c (expand_call): Take >> current_function_pretend_args_size >> into account when setting argblock for sibcalls. >> >> It is not right to do the adjustment in that patch when the caller has >> already allocated >> the stack space for partially-in-regs params, that is, when >> REG_PARM_STACK_SPACE is defined. >> Bootstrapped and tested on darwin. >> >> 2002-12-21 Dale Johannesen >> >> * calls.c (expand_call): Fix sibcalls on >> REG_PARM_STACK_SPACE >> machines. > > Does this cover the REG_PARM_STACK_SPACE defined to 0 case as well? After staring at this a while longer, I think the answer is no (which means the doc for REG_PARM_STACK_SPACE does not match the actual usage). I've redone the patch to check for only the nonzero case, which I'm sure is correct: Index: calls.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/calls.c,v retrieving revision 1.247 diff -u -d -b -w -r1.247 calls.c --- calls.c 18 Dec 2002 05:57:43 -0000 1.247 +++ calls.c 3 Jan 2003 19:54:11 -0000 @@ -2699,12 +2716,15 @@ if (pass == 0) { argblock = virtual_incoming_args_rtx; +#if !defined (REG_PARM_STACK_SPACE) || \ + REG_PARM_STACK_SPACE (current_function_fndecl) == 0 argblock #ifdef STACK_GROWS_DOWNWARD = plus_constant (argblock, current_function_pretend_args_size); #else = plus_constant (argblock, -current_function_pretend_args_size); #endif +#endif stored_args_map = sbitmap_alloc (args_size.constant); sbitmap_zero (stored_args_map); } I'm not convinced the code above is correct for all targets, but I am not really equipped to test elsewhere, and the above should not break anything. Perhaps I should just request that J"orn Rennecke's patch above be reverted; it clearly breaks ppc (darwin and AIX). If this doesn't get approved I'll do that, I guess. From gcc-patches-return-74969-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 20:05:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27657 invoked by alias); 3 Jan 2003 20:05:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27646 invoked from network); 3 Jan 2003 20:05:09 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 3 Jan 2003 20:05:09 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h03K4uw04633 for ; Fri, 3 Jan 2003 12:04:57 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Fri, 3 Jan 2003 12:04:28 -0800 Received: from apple.com (vpn-scv-x2-138.apple.com [17.219.193.138]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h03K4uf28696; Fri, 3 Jan 2003 12:04:56 -0800 (PST) Date: Fri, 3 Jan 2003 12:05:34 -0800 Subject: Re: Patch not applied (was: PATCH to generate error for address of cast) Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Jason Merrill , Nathan Sidwell , gcc-patches@gcc.gnu.org To: Matthias Klose From: Matt Austern In-Reply-To: <15887.4481.672107.512962@gargle.gargle.HOWL> Message-Id: Content-Transfer-Encoding: 7bit On Sunday, December 29, 2002, at 07:15 AM, Matthias Klose wrote: > The patch mentioned in > > http://gcc.gnu.org/ml/gcc-patches/2002-08/msg01270.html > > wasn't applied, although it seemed to be accepted? > > Thanks to Martin v. Loewis for pointing this out. > http://bugs.debian.org/79225 is a related issue. Eh? Looks to me like it's applied. Doing a simple test with mainline: bash-2.05$ cat foo.cc void foo() { int x; long* p = &((long) x); } bash-2.05$ ~/root/bin/g++ -c foo.cc foo.cc: In function `void foo()': foo.cc:4: error: non-lvalue in unary `&' bash-2.05$ --Matt From gcc-patches-return-74970-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 20:26:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1099 invoked by alias); 3 Jan 2003 20:26:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1080 invoked from network); 3 Jan 2003 20:26:31 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by 209.249.29.67 with SMTP; 3 Jan 2003 20:26:31 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18UaH4-0002xa-00; Fri, 03 Jan 2003 16:26:42 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18UYOV-0006Xw-00; Fri, 03 Jan 2003 15:26:15 -0500 Date: Fri, 3 Jan 2003 15:26:15 -0500 From: Daniel Jacobowitz To: Dale Johannesen Cc: Franz Sirl , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com Subject: Re: Patch: fix regression in PPC sibcalls Message-ID: <20030103202615.GA25037@nevyn.them.org> Mail-Followup-To: Dale Johannesen , Franz Sirl , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com References: <200212271749.30611@enzo.bigblue.local> <66234F4D-1F56-11D7-A38B-000393D76DAA@apple.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <66234F4D-1F56-11D7-A38B-000393D76DAA@apple.com> User-Agent: Mutt/1.5.1i On Fri, Jan 03, 2003 at 12:03:17PM -0800, Dale Johannesen wrote: > > On Friday, December 27, 2002, at 08:49 AM, Franz Sirl wrote: > >On Saturday 21 December 2002 20:21, Dale Johannesen wrote: > >>This patch breaks ppc (also sparc and probably others, I think) > >>sibcalls: > >> > >>Wed Apr 24 21:58:09 2002 J"orn Rennecke > >> * calls.c (expand_call): Take > >>current_function_pretend_args_size > >> into account when setting argblock for sibcalls. > >> > >>It is not right to do the adjustment in that patch when the caller has > >>already allocated > >>the stack space for partially-in-regs params, that is, when > >>REG_PARM_STACK_SPACE is defined. > >>Bootstrapped and tested on darwin. > >> > >>2002-12-21 Dale Johannesen > >> > >> * calls.c (expand_call): Fix sibcalls on > >>REG_PARM_STACK_SPACE > >>machines. > > > >Does this cover the REG_PARM_STACK_SPACE defined to 0 case as well? > > After staring at this a while longer, I think the answer is no (which > means > the doc for REG_PARM_STACK_SPACE does not match the actual usage). I've > redone the patch to check for only the nonzero case, which I'm sure is > correct: > > Index: calls.c > =================================================================== > RCS file: /cvs/gcc/gcc/gcc/calls.c,v > retrieving revision 1.247 > diff -u -d -b -w -r1.247 calls.c > --- calls.c 18 Dec 2002 05:57:43 -0000 1.247 > +++ calls.c 3 Jan 2003 19:54:11 -0000 > @@ -2699,12 +2716,15 @@ > if (pass == 0) > { > argblock = virtual_incoming_args_rtx; > +#if !defined (REG_PARM_STACK_SPACE) || \ > + REG_PARM_STACK_SPACE (current_function_fndecl) == 0 That doesn't do what you want; you can't check an arbitrary C expression in #if. See for instance v850.h. > argblock > #ifdef STACK_GROWS_DOWNWARD > = plus_constant (argblock, > current_function_pretend_args_size); > #else > = plus_constant (argblock, > -current_function_pretend_args_size); > #endif > +#endif > stored_args_map = sbitmap_alloc (args_size.constant); > sbitmap_zero (stored_args_map); > } > > I'm not convinced the code above is correct for all targets, but I am > not really > equipped to test elsewhere, and the above should not break anything. > Perhaps I > should just request that J"orn Rennecke's patch above be reverted; it > clearly > breaks ppc (darwin and AIX). If this doesn't get approved I'll do > that, I guess. No. As I understand it, it breaks sibcalls on PowerPC, which were added after the patch itself by several months. Reverting it will definitely break sibcalls on SH, which were there beforehand. Reverting it isn't the answer. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer From gcc-patches-return-74971-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 20:49:41 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9950 invoked by alias); 3 Jan 2003 20:49:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9942 invoked from network); 3 Jan 2003 20:49:40 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 3 Jan 2003 20:49:40 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h03KnSI13818 for ; Fri, 3 Jan 2003 12:49:28 -0800 (PST) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Fri, 3 Jan 2003 12:49:20 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id h03KnKQ07108; Fri, 3 Jan 2003 12:49:20 -0800 (PST) Date: Fri, 3 Jan 2003 12:48:46 -0800 Subject: Re: Patch: fix regression in PPC sibcalls Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen , Franz Sirl , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com To: Daniel Jacobowitz From: Dale Johannesen In-Reply-To: <20030103202615.GA25037@nevyn.them.org> Message-Id: Content-Transfer-Encoding: 7bit On Friday, January 3, 2003, at 12:26 PM, Daniel Jacobowitz wrote: >> argblock = virtual_incoming_args_rtx; >> +#if !defined (REG_PARM_STACK_SPACE) || \ >> + REG_PARM_STACK_SPACE (current_function_fndecl) == 0 > > That doesn't do what you want; you can't check an arbitrary C > expression in #if. See for instance v850.h. Duh. Still on vacation, sorry. > No. As I understand it, it breaks sibcalls on PowerPC, which were > added after the patch itself by several months. Reverting it will > definitely break sibcalls on SH, which were there beforehand. > Reverting it isn't the answer. Good point, but I believe it also breaks sibcalls on Sparc, which precede the patch, and on other targets which can split parameters between regs and memory but for which REG_PARM_STACK_SPACE is >0, if there are any. This isn't a ppc-specific thing. (I haven't proved that yet, granted. Hopefully that won't be necessary.) From gcc-patches-return-74972-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 20:59:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17756 invoked by alias); 3 Jan 2003 20:59:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17749 invoked from network); 3 Jan 2003 20:59:37 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 3 Jan 2003 20:59:37 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h03KxMc21863; Fri, 3 Jan 2003 12:59:22 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Dale Johannesen CC: gcc-patches@gcc.gnu.org Subject: Re: Patch (darwin specific) References: <58FBDEB6-1F4C-11D7-A38B-000393D76DAA@apple.com> From: Geoff Keating Date: 03 Jan 2003 12:59:22 -0800 In-Reply-To: <58FBDEB6-1F4C-11D7-A38B-000393D76DAA@apple.com> Message-ID: Lines: 24 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Dale Johannesen writes: > This removes an unnecessary instruction from the ppc darwin "stubs" > used for function calls, > and moves them into a different section to prevent problems mixing old > and new stubs. This is OK. > 2003-01-03 Dale Johannesen > > * config/darwin.h: Update copyright. > (EXTRA_SECTIONS): Add machopic_symbol_stub1, > machopic_picsymbol_stub1. > (EXTRA_SECTION_FUNCTIONS): Ditto. > * rs6000/rs6000.c: Update copyright. > (machopic_output_stub): Use them. Remove an insn from > stub code. > > > -- - Geoffrey Keating From gcc-patches-return-74973-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 21:34:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23518 invoked by alias); 3 Jan 2003 21:34:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23505 invoked from network); 3 Jan 2003 21:34:01 -0000 Received: from unknown (HELO vortex.ticam.utexas.edu) (128.83.68.102) by 209.249.29.67 with SMTP; 3 Jan 2003 21:34:01 -0000 Received: from gandalf.ticam.utexas.edu (IDENT:LGDRZSdMqUZ7Ru9VGeqqqX8uyilSequb@gandalf.ticam.utexas.edu [128.83.68.35]) by vortex.ticam.utexas.edu (8.12.6/8.12.6) with ESMTP id h03LXnG6024707; Fri, 3 Jan 2003 15:33:49 -0600 Date: Fri, 3 Jan 2003 15:33:49 -0600 (CST) From: Wolfgang Bangerth To: gcc-patches@gcc.gnu.org cc: lerdsuwa@users.sourceforge.net Subject: Unreviewed patch for regression c++/9030 Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Kriang has a patch for regression c++/9030 http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01228.html but it has not been reviewed in the last 10 days. Would anybody mind to look at it? I'd like to have this in soon if possible, since I got several ICEs with the new parser, but can't see anything in my log files as they are cluttered with 100s of instances of messages for PR 9030... I'll start tracking down the new ICEs as soon as the fix above is in. Thanks Wolfgang ------------------------------------------------------------------------- Wolfgang Bangerth email: bangerth@ticam.utexas.edu www: http://www.ticam.utexas.edu/~bangerth From gcc-patches-return-74974-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 22:07:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7219 invoked by alias); 3 Jan 2003 22:07:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7210 invoked from network); 3 Jan 2003 22:07:36 -0000 Received: from unknown (HELO book.moene.indiv.nluug.nl) (195.109.255.217) by 209.249.29.67 with SMTP; 3 Jan 2003 22:07:36 -0000 Received: from local ([127.0.0.1] helo=moene.indiv.nluug.nl) by book.moene.indiv.nluug.nl with esmtp (Exim 3.36 #1 (Debian)) id 18Ua4i-00036p-00; Fri, 03 Jan 2003 23:13:56 +0100 Message-ID: <3E160B0A.9030906@moene.indiv.nluug.nl> Date: Fri, 03 Jan 2003 23:13:30 +0100 From: Toon Moene Organization: Moene Computational Physics, Maartensdijk, The Netherlands User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020622 Debian/1.0.0-0.woody.1 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org CC: bdavis11@directvinternet.com Subject: [Trunk, Fortran, committed] Patch to enable use of any kind integer in case statements. Content-Type: multipart/mixed; boundary="------------030306000907020806010507" This is a multi-part message in MIME format. --------------030306000907020806010507 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit L.S., I committed the attached patch after bootstrap, check (C and Fortran only) on powerpc-unknown-linux-gnu (Debian testing as of three weeks ago). It allows use of INTEGER*{1,2,8} in CASE statements and issues a warning when the case labels exceed the range of the KIND. Cheers, and thanks go to Bud Davis for thinking this up ! -- Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290 Saturnushof 14, 3738 XG Maartensdijk, The Netherlands Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction) --------------030306000907020806010507 Content-Type: text/plain; name="case-star-1.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="case-star-1.patch" 2003-01-03 Bud Davis * stc.c (ffestc_R810): Allow any kind integer in case statements. * ste.c (ffeste_R810): Give error message when case selector exceeds its valid values. *** stc.c.orig Thu Sep 13 16:37:23 2001 --- stc.c Fri Jan 3 20:12:05 2003 *************** *** 1,4 **** /* stc.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by James Craig Burley. --- 1,4 ---- /* stc.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc. Contributed by James Craig Burley. *************** ffestc_R810 (ffesttCaseList cases, ffele *** 9196,9211 **** continue; } - if (((caseobj->expr1 != NULL) && ((ffeinfo_basictype (ffebld_info (caseobj->expr1)) ! != s->type) ! || (ffeinfo_kindtype (ffebld_info (caseobj->expr1)) ! != s->kindtype))) || ((caseobj->range) && (caseobj->expr2 != NULL) && ((ffeinfo_basictype (ffebld_info (caseobj->expr2)) ! != s->type) ! || (ffeinfo_kindtype (ffebld_info (caseobj->expr2)) ! != s->kindtype)))) { ffebad_start (FFEBAD_CASE_TYPE_DISAGREE); --- 9196,9206 ---- continue; } if (((caseobj->expr1 != NULL) && ((ffeinfo_basictype (ffebld_info (caseobj->expr1)) ! != s->type))) || ((caseobj->range) && (caseobj->expr2 != NULL) && ((ffeinfo_basictype (ffebld_info (caseobj->expr2)) ! != s->type)))) { ffebad_start (FFEBAD_CASE_TYPE_DISAGREE); *** ste.c.orig Tue Jun 4 09:10:37 2002 --- ste.c Fri Jan 3 20:12:24 2003 *************** *** 1,4 **** /* ste.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 2000, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. --- 1,4 ---- /* ste.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 2000, 2002, 2003 Free Software Foundation, Inc. Contributed by James Craig Burley. *************** ffeste_R810 (ffestw block, unsigned long *** 2726,2730 **** else pushok = pushcase (texprlow, convert, tlabel, &duplicate); ! assert (pushok == 0); c = c->next_stmt; /* Unlink prev. */ --- 2726,2738 ---- else pushok = pushcase (texprlow, convert, tlabel, &duplicate); ! assert((pushok !=2) || (pushok !=0)); ! if (pushok==2) ! { ! ffebad_start_msg ("SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)", ! FFEBAD_severityFATAL); ! ffebad_here (0, ffestw_line (block), ffestw_col (block)); ! ffebad_finish (); ! ffestw_set_select_texpr (block, error_mark_node); ! } c = c->next_stmt; /* Unlink prev. */ --------------030306000907020806010507-- From gcc-patches-return-74975-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 22:15:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9918 invoked by alias); 3 Jan 2003 22:15:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9891 invoked from network); 3 Jan 2003 22:15:34 -0000 Received: from unknown (HELO atrey.karlin.mff.cuni.cz) (195.113.31.123) by 209.249.29.67 with SMTP; 3 Jan 2003 22:15:34 -0000 Received: by atrey.karlin.mff.cuni.cz (Postfix, from userid 4018) id 622654F8E5; Fri, 3 Jan 2003 23:15:22 +0100 (CET) Date: Fri, 3 Jan 2003 23:15:22 +0100 From: Jan Hubicka To: Daniel Berlin Cc: gcc-patches@gcc.gnu.org Subject: Re: Ping! [PATCH]: Pool allocate et_forest structures Message-ID: <20030103221522.GA23413@atrey.karlin.mff.cuni.cz> References: <2B1A587F-1F4E-11D7-9FD2-000393575BCC@dberlin.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2B1A587F-1F4E-11D7-9FD2-000393575BCC@dberlin.org> User-Agent: Mutt/1.3.28i > Been a few weeks. > > Just to note, this patch was bootstrapped on i686-pc-linux-gnu and > powerpc-apple-darwin6.3, and as noted in a different message, improves > overall compile times on some testcases i have with large numbers of > BB's by 10-20%. Where the speedup comes from? I understand that the use obstacks is dirtier than using specialized allocator, but the result should be about the same, as the obstack is essentially used to manage such a pool... Honza From gcc-patches-return-74976-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 22:48:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20633 invoked by alias); 3 Jan 2003 22:48:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20622 invoked from network); 3 Jan 2003 22:48:23 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 22:48:23 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA15834; Fri, 3 Jan 2003 15:48:11 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6BBD24F8073; Fri, 3 Jan 2003 15:51:02 -0700 (MST) To: Subject: Re: [3.4] DESTDIR support completed References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I left my WALLET in the BATHROOM!! Date: 03 Jan 2003 15:51:02 -0700 In-Reply-To: Message-ID: <87bs2xn8yx.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Jaeger writes: Andreas> Thanks for the update. Just one note: ChangeLog entries Andreas> should not be send as a patch but just as plain text - a Andreas> ChangeLog always never applies correctly. FYI: I recommend the cvs-utils package by Alexandre Oliva. It includes the useful "clcleanup" and "cl2patch" programs. The former turns a ChangeLog-diff into a (dateless) ChangeLog entry; the latter turns a dateless ChangeLog entry into a patch relative to the appropriate ChangeLog file in the current tree. Now my only concern is getting a ChangeLog entry in the first place. This package has some other useful programs too. I use both it and Pavel Roskin's similarly-named cvsutils package every day. They are "must-haves", imho. HTH, Tom From gcc-patches-return-74977-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 22:55:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27396 invoked by alias); 3 Jan 2003 22:55:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27352 invoked from network); 3 Jan 2003 22:55:29 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 3 Jan 2003 22:55:29 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03MtGk19192 for ; Fri, 3 Jan 2003 17:55:16 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UahM-0008SS-00 for ; Fri, 03 Jan 2003 17:53:52 -0500 Date: Fri, 3 Jan 2003 17:53:52 -0500 To: gcc-patches@gcc.gnu.org Subject: (web pages) Delete bogus project Message-ID: <20030103225352.GA32420@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode In keeping with the discussion in the thread "Generated unique labels", I've committed this. Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/projects/index.html,v retrieving revision 1.33 diff -u -r1.33 index.html --- index.html 24 Apr 2002 08:22:07 -0000 1.33 +++ index.html 3 Jan 2003 22:54:19 -0000 @@ -797,10 +797,6 @@

    More extensions

      -
    • Generated unique labels. Have some way of generating distinct -labels for use in extended asm statements. I don't know what a good -syntax would be.
    • -
    • A way of defining a structure containing a union, in which the choice of union alternative is controlled by a previous structure component.
    • From gcc-patches-return-74978-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:01:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30347 invoked by alias); 3 Jan 2003 23:00:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30336 invoked from network); 3 Jan 2003 23:00:38 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 3 Jan 2003 23:00:38 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h03N0QI07571 for ; Fri, 3 Jan 2003 15:00:26 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Fri, 3 Jan 2003 14:59:58 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h03N0Qf27208; Fri, 3 Jan 2003 15:00:26 -0800 (PST) Date: Fri, 3 Jan 2003 14:59:52 -0800 Subject: Patch: fix regression in PPC sibcalls (redone) Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Franz Sirl , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com To: Dale Johannesen From: Dale Johannesen In-Reply-To: <66234F4D-1F56-11D7-A38B-000393D76DAA@apple.com> Message-Id: <118E9E49-1F6F-11D7-B860-000393D76DAA@apple.com> Content-Transfer-Encoding: 7bit OK, let's try this again. I've done this so the behavior is changed only in the case I know is broken: REG_PARM_STACK_SPACE>0, MAYBE_REG_PARM_STACK_SPACE undefined. Daniel Jacobowitz is correct that the patch below precedes ppc sibcalls in the FSF sources; still, it doesn't do the right thing for ppc (sparc, etc.) so a reference is useful: Wed Apr 24 21:58:09 2002 J"orn Rennecke * calls.c (expand_call): Take current_function_pretend_args_size into account when setting argblock for sibcalls. It is not right to do the adjustment in that patch when the caller has already allocated the stack space for partially-in-regs params. Bootstrapped and tested on darwin. 2003-01-03 Dale Johannesen * calls.c (expand_call): Fix sibcalls on REG_PARM_STACK_SPACE machines. Index: calls.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/calls.c,v retrieving revision 1.247 diff -u -d -b -w -r1.247 calls.c --- calls.c 18 Dec 2002 05:57:43 -0000 1.247 +++ calls.c 3 Jan 2003 19:54:11 -0000 @@ -2699,6 +2716,11 @@ if (pass == 0) { argblock = virtual_incoming_args_rtx; +#ifdef REG_PARM_STACK_SPACE +#ifndef MAYBE_REG_PARM_STACK_SPACE + if (REG_PARM_STACK_SPACE (current_function_fndecl) == 0) +#endif +#endif argblock #ifdef STACK_GROWS_DOWNWARD = plus_constant (argblock, current_function_pretend_args_size); struct S { int a; int b;}; int foo(int, int, int, int, int, int, struct S, int, int); int foo(int r3, int r4, int r5, int r6, int r7, int r8, struct S s, int mem1, int mem2) { if ( mem1!=12 || mem2!=13 ) abort(); return 0; } int bar(int r3, int r4, int r5, int r6, int r7, int r8, int r9, struct S s, int mem1, int mem2, int mem3) { return foo(3,4,5,6,7,8,s,12,13); } int main() { struct S s = {10, 11}; return bar(3,4,5,6,7,8,9,s,12,13,14); } From gcc-patches-return-74979-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:11:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4610 invoked by alias); 3 Jan 2003 23:11:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4600 invoked from network); 3 Jan 2003 23:11:00 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 3 Jan 2003 23:11:00 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03NAmk11265 for ; Fri, 3 Jan 2003 18:10:48 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UawO-0003Jn-00 for ; Fri, 03 Jan 2003 18:09:24 -0500 Date: Fri, 3 Jan 2003 18:09:23 -0500 To: gcc-patches@gcc.gnu.org Subject: (applied) comment fixes in cp/ Message-ID: <20030103230923.GA8362@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Applied as obvious. * cvt.c, decl.c, decl2.c: This is the C++ front end, not the C front end. Index: cvt.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/cvt.c,v retrieving revision 1.131 diff -u -r1.131 cvt.c --- cvt.c 3 Jan 2003 20:04:37 -0000 1.131 +++ cvt.c 3 Jan 2003 23:09:07 -0000 @@ -1,6 +1,6 @@ /* Language-level data type conversion for GNU C++. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GCC. @@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA. */ -/* This file contains the functions for converting C expressions +/* This file contains the functions for converting C++ expressions to different data types. The only entry point is `convert'. Every language front end must have a `convert' function but what kind of conversions it does will depend on the language. */ Index: decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v retrieving revision 1.980 diff -u -r1.980 decl.c --- decl.c 3 Jan 2003 19:48:53 -0000 1.980 +++ decl.c 3 Jan 2003 23:09:24 -0000 @@ -1,6 +1,6 @@ -/* Process declarations and variables for C compiler. +/* Process declarations and variables for C++ compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002 Free Software Foundation, Inc. + 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GCC. Index: decl2.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl2.c,v retrieving revision 1.589 diff -u -r1.589 decl2.c --- decl2.c 3 Jan 2003 20:04:37 -0000 1.589 +++ decl2.c 3 Jan 2003 23:09:29 -0000 @@ -1,4 +1,4 @@ -/* Process declarations and variables for C compiler. +/* Process declarations and variables for C++ compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) From gcc-patches-return-74980-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:11:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5147 invoked by alias); 3 Jan 2003 23:11:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5140 invoked from network); 3 Jan 2003 23:11:51 -0000 Received: from unknown (HELO mail.cdt.org) (206.112.85.61) by 209.249.29.67 with SMTP; 3 Jan 2003 23:11:51 -0000 Received: from dberlin.org (h-69-3-5-6.MCLNVA23.covad.net [69.3.5.6]) by mail.cdt.org (Postfix) with ESMTP id 7ED594900D5; Fri, 3 Jan 2003 18:07:24 -0500 (EST) Received: from [192.168.1.102] (account dberlin HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.0.3) with ESMTP-TLS id 2084362; Fri, 03 Jan 2003 18:11:37 -0500 Date: Fri, 3 Jan 2003 18:11:36 -0500 Subject: Re: Ping! [PATCH]: Pool allocate et_forest structures Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: gcc-patches@gcc.gnu.org To: Jan Hubicka From: Daniel Berlin In-Reply-To: <20030103221522.GA23413@atrey.karlin.mff.cuni.cz> Message-Id: Content-Transfer-Encoding: 7bit On Friday, January 3, 2003, at 05:15 PM, Jan Hubicka wrote: >> Been a few weeks. >> >> Just to note, this patch was bootstrapped on i686-pc-linux-gnu and >> powerpc-apple-darwin6.3, and as noted in a different message, improves >> overall compile times on some testcases i have with large numbers of >> BB's by 10-20%. > Where the speedup comes from? I understand that the use obstacks is > dirtier than using specialized allocator, but the result should be > about > the same, as the obstack is essentially used to manage such a pool... > et_forest nodes and occurrences are not obstack allocated, it's malloc'd. I'll just quote an earlier message as to why *this* patch does well: " VTune tells me that on a bunch of my test cases, calculate_value is responsible for the most cache misses (both in 2nd and 1st level misses in total number, and in loads retired which missed 1st and 2nd level cache). This patch improves the speed not by changing how calculate_value work, but instead by improving et-forest cache locality ... It works, too, and cuts 10% off the runtime of gcc on one of my test cases, shaving 10 seconds off branch prediction. VTune tells me all it does is halve the number of 2nd level cache read misses that occur in calculate_value. " That's why *this* patch is a good idea. As for why not using the flow obstack for bb's and edge's does a ton better, on test cases i have, the top cache missers (besides calculate_value) are: /gccbuild/pch-branch/gcc/build/gcc/../../gcc/flow.c:4278 (count_or_remove_death_notes, the sbitmap test of block->index) /gccbuild/pch-branch/gcc/build/gcc/../../gcc/ifcvt.c:2311 (find_if_edge, the for (cur_edge = else_bb->pred)) /gccbuild/pch-branch/gcc/build/gcc/../../gcc/flow.c:4274 (count_or_remove_death_notes, the FOR_EACH_BB_REVERSE) /gccbuild/pch-branch/gcc/build/gcc/../../gcc/reload.c:6407 (find_equiv_reg, the GET_CODE (p) == INSN) This gave me the idea that not all of our bb's and edges are even close to on the same page. So how do pools do better? With the pool, we guarantee at least x objects are contiguous, where x is set by whoever creates the pool (you can choose the number of objects it allocates at a time). This is because we allocate x of them at a time. We don't do this on the obstack, so whether we get contiguous objects depends on allocation order and how many we end up freeing/needing, *plus*, in the case of bb's and edges, whether anything else got allocated on the flow_obstack in the meantime. It's essentially pot luck, and it doesn't turn out good as you get large numbers of bb's. The things we don't want to cache miss on are RTL, trees, bb's, and edges. We are always manipulating these things. You could of course, make the allocations contiguous by dedicating it's own obstack to bb's, allocating a bunch of bb's at a time, and just throwing the rest on the free list. However, you could just instead reuse the code i've written that nicely does this, all abstracted and easily usable. Otherwise, you'd have to do the same thing for edges, et_forest things, bb's, etc. As for performance, the numbers don't lie. VTune tells me the basic block/edge pool allocation patch knocks the FOR_BB_REVERSE and the "(find_if_edge, the for (cur_edge = else_bb->pred))" out of the top of cache misses, and improves runtime on large numbers of bb's. > Honza From gcc-patches-return-74981-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:20:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9330 invoked by alias); 3 Jan 2003 23:20:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9316 invoked from network); 3 Jan 2003 23:20:34 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 3 Jan 2003 23:20:34 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h03NKOL17921; Fri, 3 Jan 2003 18:20:24 -0500 Date: Fri, 3 Jan 2003 18:20:24 -0500 (EST) From: Jeff Sturm To: Anthony Green cc: gcc-patches@gcc.gnu.org, Subject: Re: [libffi] closures for sparc In-Reply-To: <1041622060.1560.34.camel@escape> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 3 Jan 2003, Anthony Green wrote: > On Sat, 2002-12-28 at 09:13, Jeff Sturm wrote: > > This is a repost from July, cleaned up and retested on mainline. It > > enables closures for sparc and sparc64, to prepare for enabling the > > libjava bytecode interpreter. > > I saw your interpreter test results. Looks good to me. Applied. Thanks. Jeff From gcc-patches-return-74982-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:47:57 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19159 invoked by alias); 3 Jan 2003 23:47:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19147 invoked from network); 3 Jan 2003 23:47:51 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 3 Jan 2003 23:47:51 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h03NlcF12777 for ; Fri, 3 Jan 2003 18:47:38 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18UbVx-0004kH-00 for ; Fri, 03 Jan 2003 18:46:09 -0500 Date: Fri, 3 Jan 2003 18:46:09 -0500 To: gcc-patches@gcc.gnu.org Subject: PATCH: delete gcc.hlp Message-ID: <20030103234609.GA17949@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode This is a leftover from VAX/VMS support, I believe. * gcc.hlp: Delete. Index: gcc.hlp =================================================================== RCS file: gcc.hlp diff -N gcc.hlp --- gcc.hlp 22 Aug 2001 14:35:15 -0000 1.5 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,403 +0,0 @@ -1 GCC - - The GCC command invokes the GNU C compiler. - - GCC file-spec - -2 Parameters - - file-spec - - A C source file. If no input file extension is specified, GNU C - assumes .C as the default extension unless the /PLUS qualifier is - given, in which case .CC is assumed as the default extension. - - If an extension of .CPP is given, then the source file is assumed to - be the output of the preprocessor, and thus the preprocessor is not - executed. - - If an extension of .S is given, then the source file is assumed to be - the assembly code output of the compiler, and only the assembler is - called to generate an object file. - -2 Qualifiers - - GNU C command qualifiers modify the way the compiler handles the - compilation. - - The following is the list of available qualifiers for GNU C: - - /CASE_HACK - /CC1_OPTIONS=(option [,option...]]) - /DEBUG - /DEFINE=(identifier[=definition][,...]) - /G_FLOAT - /INCLUDE_DIRECTORY=(path [,path...]]) - /LIST[=filename] - /MACHINE_CODE - /OBJECT[=filename] - /OPTIMIZE - /PLUS - /PROFILE[=identifier] - /SCAN=(file[,file...]) - /SHOW[=option] - /UNDEFINE=(identifier[,identifier,...]) - /VERBOSE - /VERSION - /WARNING - -2 Linking - - When linking programs compiled with GNU C, you should include the GNU - C library before the VAX C library. For example, - - LINK object-file,GNU_CC:[000000]GCCLIB/LIB,SYS$LIBRARY:VAXCRTL/LIB - - You can also link your program with the shared VAX C library. This - can reduce the size of the .EXE file, as well as make it smaller when - it's running. For example, - - $ LINK object-file, GNU_CC:[000000]GCCLIB/LIB,SYS$INPUT/OPT - SYS$SHARE:VAXCRTL/SHARE - - (If you use the second example and type it in by hand, be sure to - type ^Z after the last carriage return). A simpler alternative would - be to place the single line: - - SYS$SHARE:VAXCRTL/SHARE - - into a file called VAXCRTL.OPT, and then use the link command: - - $ LINK object-file, GNU_CC:[000000]GCCLIB/LIB,VAXCRTL.OPT/OPT - - If a program has been compiled with /G_FLOAT, then the linking - instructions are slightly different. If you are linking with the - non-shared library, then the command that you should use would be: - - LINK object-file,GNU_CC:[000000]GCCLIB/LIB,SYS$LIBRARY:VAXCRTLG/LIB - - ,SYS$LIBRARY:VAXCRTL/LIB - - Note that both VAXCRTL and VAXCRTLG must be linked to. If you are - using the shared VAX C library, then you should use a command like: - - $ LINK object-file, GNU_CC:[000000]GCCLIB/LIB,SYS$INPUT:/OPTIONS - SYS$SHARE:VAXCRTLG/SHARE - - In the case of the sharable library, only one library needs to be - linked to. - -2 /CASE_HACK - - /[NO]CASE_HACK D=/CASE_HACK - - Since the VMS Linker and Librarian are not case sensitive with - respect to symbol names, a "case-hack" is appended to a symbol name - when the symbol contains upper case characters. - - There are cases where this is undesirable, (mainly when using certain - applications where modules have been precompiled, perhaps in another - language) and we want to compile without case hacking. In these - cases the /NOCASE_HACK switch disables case hacking. - -2 /CC1_OPTIONS - - This specifies additional switches to the compiler itself which - cannot be set by means of the compiler driver. - -2 /DEBUG - - /DEBUG includes additional information in the object file output so - that the program can be debugged with the VAX Symbolic Debugger. - - To use the debugger it is also necessary to link the debugger to your - program, which is done by specifying the /DEBUG qualifier to the link - command. With the debugger it is possible to set breakpoints, - examine variables, and set variables to new values. See the VAX - Symbolic Debugger manual for more information, or type "HELP" from - the debugger prompt. - -2 /DEFINE - - /DEFINE=(identifier[=definition][,...]) - - /DEFINE defines a string or macro ('definition') to be substituted - for every occurrence of a given string ('identifier') in a program. - It is equivalent to the #define preprocessor directive. - - All definitions and identifiers are converted to uppercase unless - they are in quotation marks. - - The simple form of the /DEFINE qualifier: - - /DEFINE=vms - - results in a definition equivalent to the preprocessor directive: - - #define VMS 1 - - You must enclose macro definitions in quotation marks, as in this - example: - - /DEFINE="C(x)=((x) & 0xff)" - - This definition is the same as the preprocessor definition: - - #define C(x) ((x) & 0xff) - - If more than one /DEFINE is present on the GCC command line, only the - last /DEFINE is used. - - If both /DEFINE and /UNDEFINE are present on a command line, /DEFINE - is evaluated before /UNDEFINE. - -2 /G_FLOAT - - Instructs the compiler to use "G" floating point arithmetic instead - of "D". The difference is that double precision has a range of - approximately +/-0.56e-308 to +/-0.9 e+308, with approximately 15 - decimal digits precision. - - "D" floating point has the same range as single precision floating - point, with approximately 17 decimal digits precision. - - If you use the /G_FLOAT qualifier, the linking instructions are - different. See "Linking" for further details. - -2 /LIST - - /LIST[=list_file_name] - - This does not generate a listing file in the usual sense, however it - does direct the compiler to save the preprocessor output. If a file - is not specified, then this output is written into a file with the - same name as the source file and an extension of .CPP. - -2 /INCLUDE_DIRECTORY - - /INCLUDE_DIRECTORY=(path [,path...]) - - The /INCLUDE_DIRECTORY qualifier provides additional directories to - search for user-defined include files. 'path' can be either a - logical name or a directory specification. - - There are two forms for specifying include files - #include - "file-spec" and #include . For the #include "file-spec" - form, the search order is: - - 1. The directory containing the source file. - - 2. The directories in the /INCLUDE qualifier (if any). - - 3. The directory (or directories) specified in the logical name - GNU_CC_INCLUDE. - - 4. The directory (or directories) specified in the logical name - SYS$LIBRARY. - - For the #include form, the search order is: - - 1. The directories specified in the /INCLUDE qualifier (if any). - - 2. The directory (or directories) specified in the logical name - GNU_CC_INCLUDE. - - 3. The directory (or directories) specified in the logical name - SYS$LIBRARY. - -2 /MACHINE_CODE - - Tells GNU C to output the machine code generated by the compiler. - The machine code is output to a file with the same name as the input - file, with the extension .S. An object file is still generated, - unless /NOOBJ is also specified. - -2 /OBJECT - - /OBJECT[=filename] - /NOOBJECT - - Controls whether or not an object file is generated by the - compiler. - -2 /OPTIMIZE - - /[NO]OPTIMIZE - - Controls whether optimization is performed by the compiler. By - default, optimization is on. /NOOPTIMIZE turns optimization off. - -2 /PLUS - - Instructs the compiler driver to use the GNU-C++ compiler instead of - the GNU-C compiler. Note that the default extension of source files - is .CC when this qualifier is in effect. - -2 /PROFILE - - /PROFILE[=identifier] - - Instructs the compiler to generate function profiling code. You must - link your program to the profiler when you use this options. The - profile statistics are automatically printed out on the terminal - during image exit. (i.e. no modifications to your source file are - required in order to use the profiler). - - There are three identifiers that can be used with the /PROFILE - switch. These are ALL, FUNCTION, and BLOCK. If /PROFILE is given - without an identifier, then FUNCTION is assumed. - -3 Block_Profiler - - The block profiler counts how many times control of the program - passes certain points in your program. This is useful in determining - which portions of a program would benefit from recoding for - optimization. - - The report for the block profiler contains the function name, file - name, PC, and the source file line number as well as the count of how - many times control has passed through the specified source line. - -3 Function_Profiler - - The function profiler counts how many times each function is entered, - and keeps track of how much CPU time is used within each function. - - You should be careful about interpreting the results of profiles - where there are inline functions. When a function is included as - inline, then there is no call to the internal data collection routine - used by the profiler, and thus there will be no record of this - function being called. The compiler does generate a callable version - of each inline function, and if this called version is used, then the - profiler's data collection routine will be called. - -2 /SCAN - - /SCAN=(file[,file...]) - - This qualifier supplies a list of files that will be read as input, - and the output will be discarded before processing the regular input - file. Because the output generated from the files is discarded, the - only effect of this qualifier is to make the macros defined in the - files available for use in the main input. - -2 /SHOW - - /SHOW[=option] - - This causes the preprocessor to generate information other than the - preprocessed input file. When this qualifier is used, no assembly - code and no object file is generated. - - The output of the preprocessor is placed in the file specified by the - /LIST qualifier, if present. If the /LIST qualifier is not present, - then the output is placed in a file with the same name as the input - file with an extension that depends upon which option that is - selected. - -3 DEFINITIONS - - This option causes the preprocessor to dump a list of all of the - definitions to the output file. This is useful for debugging - purposes, since it lets you determine whether or not everything has - been defined properly. - - If the default file name is used for the output, the extension will - be .DEF. - -3 RULES - - This option causes the preprocessor to output a rule suitable for - MAKE, describing the dependencies of the main source file. The - preprocessor outputs one MAKE rule containing the object file name - for that source file, a colon, and the names of all the concluded - files. If there are many included files then the rule is split into - several lines using the '\'-newline. - - When using this option, only files included with the "#include "file" - directive are mentioned. - - If the default file name is used for the output, a null extension - will be used. - -3 ALL - - This option is similar to RULES, except that it also mentions files - included with the "#include " directive. - - If the default file name is used for the output, a null extension - will be used. - -2 /UNDEFINE - - /UNDEFINE cancels a macro definition. Thus, it is the same as the - #undef preprocessor directive. - - If more than one /UNDEFINE is present on the GCC command line, only - the last /UNDEFINE is used. - - If both /DEFINE and /UNDEFINE are present on a command line, /DEFINE - is evaluated before /UNDEFINE. - -2 /VERBOSE - - Controls whether the user sees the invocation command strings for the - preprocessor, compiler, and assembler. The compiler also outputs - some statistics on time spent in its various phases. - -2 /VERSION - - Causes the preprocessor and the compiler to identify themselves by - their version numbers, and in the case of the compiler, the version - number of the compiler that built it. - -2 /WARNING - - When this qualifier is present, warnings about usage that should be - avoided are given by the compiler. For more information, see "Using - and Porting the GNU Compiler Collection (GCC)", in the section on - command line options, under "-Wall". - - Warnings are also generated by the preprocessor when this qualifier - is given. - -2 Known_Incompatibilities_with_VAX-C - - There are several known incompatibilities between GNU-C and VAX-C. - Some common ones will be briefly described here. A complete - description can be found in "Using and Porting the GNU Compiler - Collection (GCC)" in the chapter entitled "Using GCC on VMS". - - GNU-C provides case hacking as a means of giving case sensitivity - to symbol names. The case hack is a hexadecimal number appended to - the symbol name, with a bit being set for each upper case letter. - Symbols with all lower case, or symbols that have a dollar sign ("$") - are not case hacked. There are times that this is undesirable, - namely when you wish to link your program against a precompiled - library which was compiled with a non-GNU-C compiler. X-windows (or - DECWindows) is an example of this. In these instances, the - /NOCASE_HACK switch should be used. - - If you require case hacking in some cases, but not in others (i.e. - Libg++ with DECWindows), then it is recommended that you develop a - header file which will define all mixed case functions that should - not have a case hack as the lower case equivalents. - - GNU-C does not provide the globaldef and globalref mechanism - which is used by VAX-C to coerce the VMS linker to include certain - object modules from a library. There are assembler hacks, which are - available to the user through the macros defined in gnu_hacks.h, - which effectively give you the ability to perform these functions. - While not syntactically identical, they do provide most of the - functionality. - - Note that globaldefs of enums is not supported in the way that it is - under VAX-C. This can be easily simulated, however, by globaldefing - an integer variable, and then globalvaluing all of the enumerated - states. - - Furthermore, the way that globalvalue is currently implemented, the - data type of the globalvalue variable is seen to the compiler to be a - pointer to the data type that you specify. This is necessary in - order to make the compiler correctly address the globalvalue - variables. - From gcc-patches-return-74983-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 00:24:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5801 invoked by alias); 4 Jan 2003 00:24:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5790 invoked from network); 4 Jan 2003 00:23:59 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 4 Jan 2003 00:23:59 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id 803684DE70; Sat, 4 Jan 2003 01:23:49 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Sat, 4 Jan 2003 01:23:49 +0100 Date: Sat, 4 Jan 2003 01:23:49 +0100 From: Jan Hubicka To: Daniel Berlin Cc: Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Ping! [PATCH]: Pool allocate et_forest structures Message-ID: <20030104002349.GI3573@kam.mff.cuni.cz> References: <20030103221522.GA23413@atrey.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i > With the pool, we guarantee at least x objects are contiguous, where x > is set by whoever creates the pool (you can choose the number of > objects it allocates at a time). This is because we allocate x of them > at a time. We don't do this on the obstack, so whether we get > contiguous objects depends on allocation order and how many we end up > freeing/needing, *plus*, in the case of bb's and edges, whether > anything else got allocated on the flow_obstack in the meantime. It's I tought there is nothing else on flow_obstack, but I guess regsets and similar stuff is there too, that may be the main reason. Beside that you do different management of the free entries in the pool (so they are gain allocated in linear order and not in the order they were freed)? > essentially pot luck, and it doesn't turn out good as you get large > numbers of bb's. > The things we don't want to cache miss on are RTL, trees, bb's, and > edges. We are always manipulating these things. > > You could of course, make the allocations contiguous by dedicating it's > own obstack to bb's, allocating a bunch of bb's at a time, and just > throwing the rest on the free list. However, you could just instead > reuse the code i've written that nicely does this, all abstracted and > easily usable. Otherwise, you'd have to do the same thing for edges, I am not saying that the patch is bad idea (I like it just because it makes things cleaner), but I was just surprised to see the improvement, as I originally tought the algorithm behaves basically equally to flow_obstack scheme... Honza > et_forest things, bb's, etc. > > As for performance, the numbers don't lie. > VTune tells me the basic block/edge pool allocation patch knocks the > FOR_BB_REVERSE and the "(find_if_edge, the for (cur_edge = > else_bb->pred))" out of the top of cache misses, and improves runtime > on large numbers of bb's. > > > > >Honza From gcc-patches-return-74984-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 00:45:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13225 invoked by alias); 4 Jan 2003 00:45:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13212 invoked from network); 4 Jan 2003 00:45:30 -0000 Received: from unknown (HELO disaster.jaj.com) (66.93.21.106) by 209.249.29.67 with SMTP; 4 Jan 2003 00:45:30 -0000 Received: (from phil@localhost) by disaster.jaj.com (8.11.4/8.11.4) id h040jEa13372; Fri, 3 Jan 2003 19:45:14 -0500 Date: Fri, 3 Jan 2003 19:45:14 -0500 From: Phil Edwards To: Gabriel Dos Reis Cc: Mark Mitchell , Benjamin Kosnik , "gcc-patches@gcc.gnu.org" , "libstdc++@gcc.gnu.org" Subject: Re: V3 PATCH: Various pedantic fixes Message-ID: <20030103194514.A13368@disaster.jaj.com> References: <20030102143813.34974847.bkoz@redhat.com> <90720000.1041544393@warlock.codesourcery.com> <20030102194021.A2277@disaster.jaj.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: ; from gdr@integrable-solutions.net on Fri, Jan 03, 2003 at 11:23:45AM +0100 On Fri, Jan 03, 2003 at 11:23:45AM +0100, Gabriel Dos Reis wrote: > Phil Edwards writes: > | I've always had a current "wouldn't it be cool if..." hack project going on, > | but never one realted to GCC. Now I do: with this parser, I can start > | playing with N1345[*], > > I hope you won't duplicate work... So do I. > At the last Santa Cruz meeting, Someday I will be able to go to those meetings... > Now that we have the new parser, I'm looking for the mainline tree to > stabilize a bit (I believe two weeks should be sufficient) before > creating an official branch for putting some support of compile time > reflection in the C++ front-end. I wouldn't think we would need a new branch, but I wouldn't fight against one, either. Phil -- I would therefore like to posit that computing's central challenge, viz. "How not to make a mess of it," has /not/ been met. - Edsger Dijkstra, 1930-2002 From gcc-patches-return-74985-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 00:45:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13759 invoked by alias); 4 Jan 2003 00:45:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13580 invoked from network); 4 Jan 2003 00:45:38 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 4 Jan 2003 00:45:38 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h040en126730 for ; Fri, 3 Jan 2003 19:40:49 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h040jPn29388; Fri, 3 Jan 2003 19:45:25 -0500 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h040jPn04750; Fri, 3 Jan 2003 16:45:25 -0800 Message-ID: <3E162EA5.B754488E@redhat.com> Date: Fri, 03 Jan 2003 16:45:25 -0800 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Andrew Cagney CC: gcc-patches@gcc.gnu.org, insight@sources.redhat.com, gdb-patches@sources.redhat.com Subject: Re: [rfa/toplevel] Conditionalize GDB_TK References: <3E15E32C.2050405@redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Andrew Cagney wrote: > > Hello, > > The attatched only adds the tk directories to the gdb dependency list > when the corresponding tk files are present. That way `all-gdb' doesn't > build tk files (except when needed). Thank you! > ok? > Andrew > > PS: Disclaimer, I cut/paste the configure changes. Perhaphs someone > able to regenerate configure should commit this? > > ------------------------------------------------------------------------------- > 2003-01-03 Andrew Cagney > > * configure.in (GDB_TK): Add tcl directories conditional on > gdb/gdbtk directory being present. > * configure: Regenerate. > > Index: configure > =================================================================== > RCS file: /cvs/src/src/configure,v > retrieving revision 1.40 > diff -u -r1.40 configure > --- configure 31 Dec 2002 18:00:11 -0000 1.40 > +++ configure 3 Jan 2003 17:48:45 -0000 > @@ -2334,11 +2334,23 @@ > # so we should be able to put the 'maybe's in unconditionally and > # leave out the maybe dependencies when enable_gdbtk is false. I'm not > # 100% sure that that's safe though. > + > +gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" > case "$enable_gdbtk" in > no) > GDB_TK="" ;; > + yes) > + GDB_TK="${gdb_tk}" ;; > *) > - GDB_TK="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" ;; > + # Only add the dependency on gdbtk when GDBtk is part of the gdb > + # distro. Eventually someone will fix this and move Insight, nee > + # gdbtk to a separate directory. > + if test -d ${srcdir}/gdb/gdbtk ; then > + GDB_TK="${gdb_tk}" > + else > + GDB_TK="" > + fi > + ;; > esac > > # Create the 'maybe dependencies'. This uses a temporary file. > Index: configure.in > =================================================================== > RCS file: /cvs/src/src/configure.in,v > retrieving revision 1.137 > diff -u -r1.137 configure.in > --- configure.in 31 Dec 2002 18:00:11 -0000 1.137 > +++ configure.in 3 Jan 2003 17:48:45 -0000 > @@ -1677,11 +1677,23 @@ > # so we should be able to put the 'maybe's in unconditionally and > # leave out the maybe dependencies when enable_gdbtk is false. I'm not > # 100% sure that that's safe though. > + > +gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" > case "$enable_gdbtk" in > no) > GDB_TK="" ;; > + yes) > + GDB_TK="${gdb_tk}" ;; > *) > - GDB_TK="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui" ;; > + # Only add the dependency on gdbtk when GDBtk is part of the gdb > + # distro. Eventually someone will fix this and move Insight, nee > + # gdbtk to a separate directory. > + if test -d ${srcdir}/gdb/gdbtk ; then > + GDB_TK="${gdb_tk}" > + else > + GDB_TK="" > + fi > + ;; > esac > > # Create the 'maybe dependencies'. This uses a temporary file. From gcc-patches-return-74986-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 00:55:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19754 invoked by alias); 4 Jan 2003 00:55:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19741 invoked from network); 4 Jan 2003 00:55:17 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 4 Jan 2003 00:55:17 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h040rp1F012660; Sat, 4 Jan 2003 01:53:51 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h040roiB012659; Sat, 4 Jan 2003 01:53:50 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Phil Edwards Cc: Mark Mitchell , Benjamin Kosnik , "gcc-patches@gcc.gnu.org" , "libstdc++@gcc.gnu.org" Subject: Re: V3 PATCH: Various pedantic fixes References: <20030102143813.34974847.bkoz@redhat.com> <90720000.1041544393@warlock.codesourcery.com> <20030102194021.A2277@disaster.jaj.com> <20030103194514.A13368@disaster.jaj.com> From: Gabriel Dos Reis In-Reply-To: <20030103194514.A13368@disaster.jaj.com> Organization: Integrable Solutions Date: 04 Jan 2003 01:53:50 +0100 Message-ID: Lines: 26 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Phil Edwards writes: [...] | > Now that we have the new parser, I'm looking for the mainline tree to | > stabilize a bit (I believe two weeks should be sufficient) before | > creating an official branch for putting some support of compile time | > reflection in the C++ front-end. | | I wouldn't think we would need a new branch, but I wouldn't fight against | one, either. I believe that path to cause less resistance. People will not probably consider the issues if they don't have a good picture of what is going on, which means a complete patch, which in turn is not of small size. Now large patches tend not to capture much attention... However having a branch around which you can test on real codes is a different thing and more impressive :-). We've just got a new parser (great jobs were done by Mark), and I'm not sure Mark would like to see all sorts of extensions go in without seeing the thingies in action and a thorough discussion. Well, if enough people believe that a branch is not necessary I'm happier with it. -- Gaby From gcc-patches-return-74987-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 01:14:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26343 invoked by alias); 4 Jan 2003 01:14:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26336 invoked from network); 4 Jan 2003 01:14:20 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 4 Jan 2003 01:14:20 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h041E6329482; Fri, 3 Jan 2003 20:14:06 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h041E6T40030; Fri, 3 Jan 2003 20:14:06 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id UAA23808; Fri, 3 Jan 2003 20:14:06 -0500 Message-Id: <200301040114.UAA23808@makai.watson.ibm.com> To: Daniel Jacobowitz cc: gcc-patches@gcc.gnu.org, Dale Johannesen Subject: Re: Patch: fix regression in PPC sibcalls References: <20030103202615.GA25037@nevyn.them.org> Date: Fri, 03 Jan 2003 20:14:06 -0500 From: David Edelsohn Dale> Perhaps I should just request that J"orn Rennecke's patch above be Dale> reverted. If this doesn't get approved I'll do that, I guess. Daniel> No. As I understand it, it breaks sibcalls on PowerPC, which were Daniel> added after the patch itself by several months. Reverting it will Daniel> definitely break sibcalls on SH, which were there beforehand. If J"orn's patch was flawed, then it was flawed, regardless that it fixes sibcalls on SH. A broken patch does not need to be retained because it fixes a bug incorrectly or incompletely. This should be fixed correctly on all targets, but *neither* target has a preferred position to trump the other. David From gcc-patches-return-74988-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 01:20:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27416 invoked by alias); 4 Jan 2003 01:20:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27409 invoked from network); 4 Jan 2003 01:20:21 -0000 Received: from unknown (HELO piper.synopsys.com) (146.225.1.217) by 209.249.29.67 with SMTP; 4 Jan 2003 01:20:21 -0000 Received: (from jbuck@localhost) by piper.synopsys.com (8.11.6/8.11.6) id h041JUR20330; Fri, 3 Jan 2003 17:19:30 -0800 Date: Fri, 3 Jan 2003 17:19:30 -0800 From: jbuck@synopsys.com To: "Naveen Sharma, Noida" Cc: gcc-patches@gcc.gnu.org, Zack Weinberg , Jan Hubicka , Joern Rennecke , Alexandre Oliva , Gary Funck Subject: Re: Stack Reorganization Patch Message-ID: <20030103171930.A13420@synopsys.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: ; from naveens@noida.hcltech.com on Wed, Jan 01, 2003 at 08:08:51PM +0530 On Wed, Jan 01, 2003 at 08:08:51PM +0530, Naveen Sharma, Noida wrote: > Some time back we had a discussion on layout of locals > on stack at (http://gcc.gnu.org/ml/gcc/2002-05/threads.html#02838). > With that in mind, here is a patch which delays assignment of hard > stack slots till after register allocation. It works as follows. > > A call to assign_stack_local_1 is intercepted and we return a rtx > of the form (mem:mode reg/f/c:Pmode regno) for each requested stack slot > instead of normal form (mem:mode (plus:Pmode fp const_int offset)). > Note that the special flag /c is used to tell that this is > stack address pseudo. The register allocator should not try to > allocate any hard reg for this because it is already a known > stack slot.After register allocation, we sort the allocated stack > slots by size and number of references and convert it to normal > "fp + offset" form. We also have to mark them live at end of > each basic block. The concept sounds promising, though you get into areas of the compiler I don't know that well. How does this affect the allocation for structs? It seems that, unless you also want to rewrite the debugger information, and also ensure that the address of a struct doesn't reach other functions, the stack slots for fields in structs have to follow their original alignment. Right? Of course dead stores can still go away. > I get some improvements in some benchmarks (5-6%) > (but unfortunately some regressions too)with this patch > and would like that people have a look at it and It would > be great if it makes a useful feature. My quick-and-dirty attempt to apply your patch failed to boot; I probably messed something up, but I won't get around to trying again for a while. In the meantime, I suggest looking at PR 8967 and seeing how you do on that case (it's a case where we generate really bad code, worse in every release). From gcc-patches-return-74989-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 01:59:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25643 invoked by alias); 4 Jan 2003 01:59:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25627 invoked from network); 4 Jan 2003 01:59:11 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 4 Jan 2003 01:59:11 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h041woV22283; Fri, 3 Jan 2003 17:58:50 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Dale Johannesen Cc: Franz Sirl , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com Subject: Re: Patch: fix regression in PPC sibcalls (redone) References: <66234F4D-1F56-11D7-A38B-000393D76DAA@apple.com> <118E9E49-1F6F-11D7-B860-000393D76DAA@apple.com> From: Geoff Keating Date: 03 Jan 2003 17:58:50 -0800 In-Reply-To: <118E9E49-1F6F-11D7-B860-000393D76DAA@apple.com> Message-ID: Lines: 58 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Dale Johannesen writes: > OK, let's try this again. I've done this so the behavior is changed > only in > the case I know is broken: REG_PARM_STACK_SPACE>0, > MAYBE_REG_PARM_STACK_SPACE undefined. > Daniel Jacobowitz is correct that the patch below precedes ppc > sibcalls in the FSF sources; > still, it doesn't do the right thing for ppc (sparc, etc.) so a > reference is useful: > > Wed Apr 24 21:58:09 2002 J"orn Rennecke > * calls.c (expand_call): Take current_function_pretend_args_size > into account when setting argblock for sibcalls. > > It is not right to do the adjustment in that patch when the caller has > already allocated > the stack space for partially-in-regs params. Bootstrapped and tested > on darwin. I'm looking at this patch and Jorn's patch trying to work out what is correct. pretend_args_size is defined as this: /* # bytes the prologue should push and pretend that the caller pushed them. The prologue must do this, but only if parms can be passed in registers. */ So it seems to me that Jorn's patch ought to be correct. If the prologue does this, then the epilogue will need to undo it, and so any outgoing arguments should start after the extra space. In the original mail, Dale said: > It is not right to do the adjustment in that patch when the caller > has already allocated the stack space for partially-in-regs params but in that case (when OUTGOING_REG_PARM_STACK_SPACE is set and REG_PARM_STACK_SPACE is nonzero), pretend_args_size should be zero, since if the caller has already allocated the space then the prologue shouldn't. So I think the real problem is that in assign_parms in function.c, current_function_pretend_args_size is set unconditionally, but it shouldn't be set in this case. The problem wouldn't have been noticed on powerpc before, because the powerpc prologue/epilogue generation never actually looks at current_function_pretend_args_size. The only place it's used is when it is set in setup_incoming_varargs, and I think that is also incorrect ---the comment above it is "??? Does ABI_V4 need this at all?", and as far as I can tell it has no effect other than on sibcall processing. > 2003-01-03 Dale Johannesen > > * calls.c (expand_call): Fix sibcalls on > REG_PARM_STACK_SPACE machines. -- - Geoffrey Keating From gcc-patches-return-74990-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 01:59:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26054 invoked by alias); 4 Jan 2003 01:59:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26046 invoked from network); 4 Jan 2003 01:59:38 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 4 Jan 2003 01:59:38 -0000 Received: from koffie.nl (i2067.vwr.wanadoo.nl [194.134.216.28]) by smtp1.euronet.nl (Postfix) with ESMTP id 6742D67151; Sat, 4 Jan 2003 02:59:21 +0100 (MET) Message-ID: <3E163021.F7F45B29@koffie.nl> Date: Sat, 04 Jan 2003 01:51:45 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Geoff Keating Cc: gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <3E111A25.816F2D1E@koffie.nl> <200212310451.XAA23960@makai.watson.ibm.com> <3E138D45.7F5A0EC0@koffie.nl> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Geoff Keating wrote: > > What you usually do in this case is create a combination insn+splitter > to give combine an appropriate intermediate result. > > If you could provide testcases/code samples for the cases you mention, > it would be easier to see precisely what's going on. Often several > iterations and many eyes are necessary to get the proper fix. Here are some of the cases that happen most on PowerPC: -- comparing an SI to a "big" constant. (set (reg2) (big_constant)) (set:CC (compare:CC (reg1) (reg2))) becomes (set (reg1) (xor (reg1) (hi_constant))) (set:CC (compare:CC (reg1) (lo_constant))) There is a define_split to handle this; it splits two rtl insns into two different rtl insns. In actual machine insns this is an improvement, though (either less insns, or less register pressure if lo == 0). So you're saying there should be a define_insn for this too, so combine would think this is just one insn? -- sign extend of xor (twice) => xor (twice) of sign extend. Swapping an xor with a sign extend doesn't help per se, but it does in cases like this. combine can't help it: it would need to look at 4 insns. > It is also possible that some rearchitecting of combine might be > necessary, but that's something that would require careful > consideration and an examination of all the possible alternatives, > not an ad-hoc patch to solve a specific problem. Small progress is progress too. Of course there's more to be gained by writing a new'n'improved combine pass, or a new separate pass, but that's not a reason to not accept other improvements. All IMHO of course, and assuming it is actually an improvement :) Segher From gcc-patches-return-74991-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 01:59:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26417 invoked by alias); 4 Jan 2003 01:59:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26389 invoked from network); 4 Jan 2003 01:59:48 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 4 Jan 2003 01:59:48 -0000 Received: from koffie.nl (i2067.vwr.wanadoo.nl [194.134.216.28]) by smtp1.euronet.nl (Postfix) with ESMTP id AF0C6671B9; Sat, 4 Jan 2003 02:59:32 +0100 (MET) Message-ID: <3E163ECF.EA04D0C1@koffie.nl> Date: Sat, 04 Jan 2003 02:54:23 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Richard Kenner Cc: gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <10301020141.AA00392@vlsi1.ultra.nyu.edu> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Richard Kenner wrote: > > Yes, but sometimes doing a 2->2 simplification will allow it to do a > 2->1 simplification, or two 2->2 simplifications will allow a 3->2, or > maybe some even longer chain. > > But that should get done when combining 3 insns, for example. But that won't work if 3 insns don't reduce to 2, but with one more, it _does_ reduce to 3 insns, for example: (set (t1) (op1 (reg0) (const X1))) (set (reg1) (op2 (t1))) (set (t2) (op1 (reg0) (const X2))) (set (reg2) (op2 (t2))) where op1 and op2 can be swapped (like, op1 is xor and op2 is extend), so we get (set (t1) (op2 (reg0))) (set (reg1) (op1 (t1) (xonst X1))) (set (t2) (op2 (reg0))) (set (reg2) (op1 (t2) (xonst X2))) where the sets of t1 and t2 can be merged. Without always canonicalizing all rtl, you miss some simplifications. But canonicalizing won't always help, either; sometimes the non-canonical pattern will simplify better. It may very well be too slow to try all possible transformations, however. Always doing the canonicalizations was a win on almost all the code I inspected (gcc itself, some codecs, a forth vm); I saw worse code only two or three times (and those were all non-eliminated dead code). Some more to try (these use mfcr while better and/or shorter patterns are possible): int xx1(int a, int b) { return a == 0 && b == 0; } int xx2(int a, int b) { a &= 1; b &= 1; return a == 0 && b == 0; } Another nice one: int xx3(int a, int b) { return ~a ^ b ^ a ^ ~b; } Segher From gcc-patches-return-74992-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 02:03:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28040 invoked by alias); 4 Jan 2003 02:03:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28033 invoked from network); 4 Jan 2003 02:03:13 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by 209.249.29.67 with SMTP; 4 Jan 2003 02:03:13 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18UfX5-0003XR-00; Fri, 03 Jan 2003 22:03:35 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18UdeW-0000jk-00; Fri, 03 Jan 2003 21:03:08 -0500 Date: Fri, 3 Jan 2003 21:03:08 -0500 From: Daniel Jacobowitz To: David Edelsohn Cc: gcc-patches@gcc.gnu.org, Dale Johannesen Subject: Re: Patch: fix regression in PPC sibcalls Message-ID: <20030104020308.GA24112@nevyn.them.org> Mail-Followup-To: David Edelsohn , gcc-patches@gcc.gnu.org, Dale Johannesen References: <20030103202615.GA25037@nevyn.them.org> <200301040114.UAA23808@makai.watson.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200301040114.UAA23808@makai.watson.ibm.com> User-Agent: Mutt/1.5.1i On Fri, Jan 03, 2003 at 08:14:06PM -0500, David Edelsohn wrote: > Dale> Perhaps I should just request that J"orn Rennecke's patch above be > Dale> reverted. If this doesn't get approved I'll do that, I guess. > > Daniel> No. As I understand it, it breaks sibcalls on PowerPC, which were > Daniel> added after the patch itself by several months. Reverting it will > Daniel> definitely break sibcalls on SH, which were there beforehand. > > If J"orn's patch was flawed, then it was flawed, regardless that > it fixes sibcalls on SH. A broken patch does not need to be retained > because it fixes a bug incorrectly or incompletely. This should be fixed > correctly on all targets, but *neither* target has a preferred position to > trump the other. I'm not arguing that his patch was perfect; but neither does that give you any reasonable position from which to revert it and break SH again. Obviously, it should be fixed. I was just reacting to te "revert" comment. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer From gcc-patches-return-74993-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 02:17:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19870 invoked by alias); 4 Jan 2003 02:17:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19863 invoked from network); 4 Jan 2003 02:17:49 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 4 Jan 2003 02:17:49 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h042HcI04998 for ; Fri, 3 Jan 2003 18:17:38 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Fri, 3 Jan 2003 18:17:14 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h042HEf07050; Fri, 3 Jan 2003 18:17:14 -0800 (PST) Date: Fri, 3 Jan 2003 18:16:41 -0800 Subject: Re: Patch: fix regression in PPC sibcalls (redone) Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen , Franz Sirl , gcc-patches@gcc.gnu.org, joern.rennecke@superh.com To: Geoff Keating From: Dale Johannesen In-Reply-To: Message-Id: <8FF97302-1F8A-11D7-B860-000393D76DAA@apple.com> Content-Transfer-Encoding: 7bit On Friday, January 3, 2003, at 05:58 PM, Geoff Keating wrote: > > I'm looking at this patch and Jorn's patch trying to work out what is > correct. pretend_args_size is defined as this: > > /* # bytes the prologue should push and pretend that the caller > pushed them. > The prologue must do this, but only if parms can be passed in > registers. */ > > So it seems to me that Jorn's patch ought to be correct. If the > prologue does this, then the epilogue will need to undo it, and so any > outgoing arguments should start after the extra space. > > In the original mail, Dale said: > >> It is not right to do the adjustment in that patch when the caller >> has already allocated the stack space for partially-in-regs params > > but in that case (when OUTGOING_REG_PARM_STACK_SPACE is set and > REG_PARM_STACK_SPACE is nonzero), pretend_args_size should be zero, > since if the caller has already allocated the space then the prologue > shouldn't. So I think the real problem is that in assign_parms > in function.c, current_function_pretend_args_size is set > unconditionally, but it shouldn't be set in this case. So this is a lurker that's been in there a while. OK, I'll try a fix along these lines. Thanks for looking at it. From gcc-patches-return-74994-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 02:51:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16782 invoked by alias); 4 Jan 2003 02:51:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16775 invoked from network); 4 Jan 2003 02:51:01 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 4 Jan 2003 02:51:01 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h042ol326666; Fri, 3 Jan 2003 21:50:48 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h042olT36886; Fri, 3 Jan 2003 21:50:47 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id VAA24686; Fri, 3 Jan 2003 21:50:47 -0500 Message-Id: <200301040250.VAA24686@makai.watson.ibm.com> To: Daniel Jacobowitz cc: gcc-patches@gcc.gnu.org, Dale Johannesen Subject: Re: Patch: fix regression in PPC sibcalls In-Reply-To: Message from Daniel Jacobowitz of "Fri, 03 Jan 2003 21:03:08 EST." <20030104020308.GA24112@nevyn.them.org> Date: Fri, 03 Jan 2003 21:50:47 -0500 From: David Edelsohn >>>>> Daniel Jacobowitz writes: Daniel> I'm not arguing that his patch was perfect; but neither does that give Daniel> you any reasonable position from which to revert it and break SH again. Daniel> Obviously, it should be fixed. I was just reacting to te "revert" Daniel> comment. The GCC Maintainers, Release Manager, and Steering Committee require all available instruments with which to manage the development of GCC. If Dale asks for J"orn's patch to be reverted, his request will be considered, along with other options to address this bug. All opinions and comments, including yours, will be considered, but you should not preempt Dale's right to make a request nor appear to limit the flexibility of GCC's leaders to act. Reverting patches is a big hammer and should be used sparingly, however that and the threat of reverting patches are important, necessary tools accompanying the responsibility of maintaining GCC. I don't like seeing those few powers chipped away; managing the development of GCC is hard enough already. David From gcc-patches-return-74995-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 03:00:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22424 invoked by alias); 4 Jan 2003 03:00:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22415 invoked from network); 4 Jan 2003 03:00:05 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by 209.249.29.67 with SMTP; 4 Jan 2003 03:00:05 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18UgQ8-0003bb-00; Fri, 03 Jan 2003 23:00:28 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18UeXb-0005sW-00; Fri, 03 Jan 2003 22:00:03 -0500 Date: Fri, 3 Jan 2003 22:00:03 -0500 From: Daniel Jacobowitz To: David Edelsohn Cc: gcc-patches@gcc.gnu.org, Dale Johannesen Subject: Re: Patch: fix regression in PPC sibcalls Message-ID: <20030104030003.GA22501@nevyn.them.org> Mail-Followup-To: David Edelsohn , gcc-patches@gcc.gnu.org, Dale Johannesen References: <20030104020308.GA24112@nevyn.them.org> <200301040250.VAA24686@makai.watson.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200301040250.VAA24686@makai.watson.ibm.com> User-Agent: Mutt/1.5.1i On Fri, Jan 03, 2003 at 09:50:47PM -0500, David Edelsohn wrote: > >>>>> Daniel Jacobowitz writes: > > Daniel> I'm not arguing that his patch was perfect; but neither does that give > Daniel> you any reasonable position from which to revert it and break SH again. > Daniel> Obviously, it should be fixed. I was just reacting to te "revert" > Daniel> comment. > > The GCC Maintainers, Release Manager, and Steering Committee > require all available instruments with which to manage the development of > GCC. If Dale asks for J"orn's patch to be reverted, his request will be > considered, along with other options to address this bug. All opinions > and comments, including yours, will be considered, but you should not > preempt Dale's right to make a request nor appear to limit the flexibility > of GCC's leaders to act. > > Reverting patches is a big hammer and should be used sparingly, > however that and the threat of reverting patches are important, necessary > tools accompanying the responsibility of maintaining GCC. I don't like > seeing those few powers chipped away; managing the development of GCC is > hard enough already. (I don't know why I'm doing this. We're both in agreement as to the proper solution. Geoff seems to have found the root problem and all is proceeding nicely.) We have a patch reversion policy; it's quite precise: | If a patch is committed which introduces a regression [1], on any | target which the Steering Committee considers to be important [2], and | the problem is reported to the original poster, and 48 hours pass | without either the original poster or any other party indicating that a | fix will be forthcoming in the very near future, and two people with | write privileges to the affected area of the compiler determine that | the best course of action is to revert the patch, then they may revert | the patch. | | After the patch has been reverted, the poster may appeal the decision | to the Steering Committee. I would say that it clearly doesn't apply. The steering committee, of course, may decide whatever it wants on an individual basis; no one is disputing that. But calling for Jo"rn's patch to be reverted because it caused Dale's PPC sibcall patch, four months later, to introduce a regression in the PPC port is about as bogus as it gets. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer From gcc-patches-return-74996-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 03:29:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28694 invoked by alias); 4 Jan 2003 03:29:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28687 invoked from network); 4 Jan 2003 03:29:57 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 4 Jan 2003 03:29:57 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h043Th318752; Fri, 3 Jan 2003 22:29:44 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h043ThT35074; Fri, 3 Jan 2003 22:29:43 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id WAA24688; Fri, 3 Jan 2003 22:29:43 -0500 Message-Id: <200301040329.WAA24688@makai.watson.ibm.com> To: Daniel Jacobowitz cc: gcc-patches@gcc.gnu.org, Dale Johannesen Subject: Re: Patch: fix regression in PPC sibcalls In-Reply-To: Message from Daniel Jacobowitz of "Fri, 03 Jan 2003 22:00:03 EST." <20030104030003.GA22501@nevyn.them.org> Date: Fri, 03 Jan 2003 22:29:43 -0500 From: David Edelsohn Daniel> We have a patch reversion policy; it's quite precise... Daniel> I would say that it clearly doesn't apply. That description provides one common example of requesting that a patch be reverted, it is not an enumeration of all possible cases. If that was the extent of the patch reversion policy, then most buggy patches and ambiguous, deprecated features which cause bugs could not be removed. Those patches are fixed or reverted because someone reports a bug eventually tracked back to the change. The paragraph does not apply, but that is irrelevant to whether reverting the patch is an option, as you state. Preemptively dismissing the request is inappropriate. Developers should consider requesting that a buggy patch be reverted whenever appropriate, whether or not it falls within the bounds of the paragraph. David From gcc-patches-return-74997-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 03:46:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7167 invoked by alias); 4 Jan 2003 03:46:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7151 invoked from network); 4 Jan 2003 03:46:40 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 4 Jan 2003 03:46:40 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h043kV525851; Fri, 3 Jan 2003 22:46:31 -0500 Date: Fri, 3 Jan 2003 22:46:30 -0500 (EST) From: Jeff Sturm To: java-patches@gcc.gnu.org cc: gcc-patches@gcc.gnu.org, Subject: [wwwdocs] Add java news item Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII 2003-01-03 Jeff Sturm * index.html: Add news item. Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/index.html,v retrieving revision 1.119 diff -u -p -r1.119 index.html --- index.html 27 Dec 2002 11:22:49 -0000 1.119 +++ index.html 4 Jan 2003 03:39:54 -0000 @@ -68,6 +68,13 @@ and RPMs are available.
    + + Index: java/jni-comp.txt =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/jni-comp.txt,v retrieving revision 1.1 diff -u -r1.1 jni-comp.txt --- java/jni-comp.txt 12 Nov 2001 09:23:07 -0000 1.1 +++ java/jni-comp.txt 4 Jan 2003 18:26:55 -0000 @@ -1,5 +1,5 @@ This is a trivial example of a JNI native method intended -to provide a comparision with the GCJ CNI example. The +to provide a comparison with the GCJ CNI example. The source files are identical to the jni-kaffe example; only the Makefile has changed. Index: java/jni-kaffe.txt =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/jni-kaffe.txt,v retrieving revision 1.3 diff -u -r1.3 jni-kaffe.txt --- java/jni-kaffe.txt 8 Feb 2001 17:34:35 -0000 1.3 +++ java/jni-kaffe.txt 4 Jan 2003 18:26:55 -0000 @@ -1,5 +1,5 @@ This is a trivial example of a JNI native method intended -to provide a comparision with the GCJ CNI example. +to provide a comparison with the GCJ CNI example. This was built using the Kaffe JVM on a RedHat 6.0 system; substitute 'javah' for 'kaffeh' for Sun's JDK. Index: java/port-files.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/port-files.html,v retrieving revision 1.4 diff -u -r1.4 port-files.html --- java/port-files.html 25 Mar 2002 06:32:12 -0000 1.4 +++ java/port-files.html 4 Jan 2003 18:26:55 -0000 @@ -11,7 +11,7 @@

    The classes in java.io ultimately require some connection to the underlying operating system's notion of files. This document -attempts to decribe how to port the native file-handling layer.

    +attempts to describe how to port the native file-handling layer.

    There are basically two parts to the porting. First, the FileDescriptor class is used to represent an open file. It Index: java/papers/gcc-java.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/papers/gcc-java.html,v retrieving revision 1.2 diff -u -r1.2 gcc-java.html --- java/papers/gcc-java.html 14 Nov 2001 08:44:07 -0000 1.2 +++ java/papers/gcc-java.html 4 Jan 2003 18:26:56 -0000 @@ -74,7 +74,7 @@ the sake of compilation speed.) In any case, it is important that cc1java can read bytecodes, for at three reasons: (1) it is the natural way to get declarations of external classes (in -this respect a Java byetcode file is like a C++ pre-compiled +this respect a Java bytecode file is like a C++ pre-compiled header file); (2) it is needed so we can support code produced from other tools that produce Java bytecodes (such as the Kawa Scheme-to-Java-bytecode compiler); and (3) some libraries are @@ -118,7 +118,7 @@ Running a compiled Java program will need a suitable Java run-time environment. This contains support for threads, garbage collection, and all the primitive Java methods. Complete Java support also means -being able to dynamiclly load new bytecodes classes. Hence the +being able to dynamically load new bytecodes classes. Hence the appropriate Java environment is a basically a Java Virtual Machine. We are using the Kaffe free Java VM (written by Tim Wilkinson), but enhancing and modifying it to be more suitable for pre-compiled Index: java/papers/native++.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/papers/native++.html,v retrieving revision 1.1 diff -u -r1.1 native++.html --- java/papers/native++.html 10 Mar 1999 17:41:25 -0000 1.1 +++ java/papers/native++.html 4 Jan 2003 18:26:56 -0000 @@ -31,7 +31,7 @@ >Background

    Not all the code in a Java application can be written in Java. Some must be written in a lower-level language, either for efficiency -reasons, or to access low-level facilties not accessible in Java. +reasons, or to access low-level facilities not accessible in Java. For this reason, Java methods may be specified as "native". This means that the method has no method body (implementation) in the Java source code. Instead, it has a special flag which @@ -115,7 +115,7 @@ a thread-specific area, which also includes a pointer to a table of functions. The entire JNI is defined in terms of these functions, which cannot be inlined (since that would make JNI methods no -longer binary compatible accross VMs).

    The Cygnus Java product will support the JNI, but we will also offer +longer binary compatible across VMs).

    The Cygnus Java product will support the JNI, but we will also offer a more efficient, lower-level, and more natural native API. The basic idea is to make GNU Java compatible with GNU C++ (G++), and provide a few hooks in G++ so C++ code can access Java objects as naturally @@ -257,7 +257,7 @@ portable JNI-based C, or Kaffe-optimize KNI. The problem is that an efficient KNI-style interface is much more inconvenient in C than in C++. In C++, we can have the compiler handle inheritance, exception handling, -name mangling of methods, and so on. In C the programmmer would have to +name mangling of methods, and so on. In C the programmer would have to do much more of this by hand. It should be possible to come up with a set of macros for programmers willing to do that. I am not convinced that this is a high priority, given that most environments that support @@ -512,7 +512,7 @@ and earlier versions of Kaffe also extends 8-bit and 16-bit object fields to use a full 32 bits. However, GNU Java was recently changed so that 8-bit and 16-bits fields now only take 8 or 16 bits in an object. -In general Java field sizes and algnment are now the same as C and C++.

    Arrays

    While in many ways Java is similar to C and C++, it is quite different in its treatment of arrays. @@ -542,7 +542,7 @@ }; -The following convenince typedefs (matching JNI) are provided. Index: java/papers/native++.sgml =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/papers/native++.sgml,v retrieving revision 1.1 diff -u -r1.1 native++.sgml --- java/papers/native++.sgml 10 Mar 1999 17:41:25 -0000 1.1 +++ java/papers/native++.sgml 4 Jan 2003 18:26:57 -0000 @@ -24,7 +24,7 @@ Not all the code in a Java application can be written in Java. Some must be written in a lower-level language, either for efficiency -reasons, or to access low-level facilties not accessible in Java. +reasons, or to access low-level facilities not accessible in Java. For this reason, Java methods may be specified as native. This means that the method has no method body (implementation) in the Java source code. Instead, it has a special flag which @@ -116,7 +116,7 @@ a thread-specific area, which also includes a pointer to a table of functions. The entire JNI is defined in terms of these functions, which cannot be inlined (since that would make JNI methods no -longer binary compatible accross VMs). +longer binary compatible across VMs). The Cygnus Java product will support the JNI, but we will also offer @@ -267,7 +267,7 @@ portable JNI-based C, or Kaffe-optimize KNI. The problem is that an efficient KNI-style interface is much more inconvenient in C than in C++. In C++, we can have the compiler handle inheritance, exception handling, -name mangling of methods, and so on. In C the programmmer would have to +name mangling of methods, and so on. In C the programmer would have to do much more of this by hand. It should be possible to come up with a set of macros for programmers willing to do that. I am not convinced that this is a high priority, given that most environments that support @@ -506,7 +506,7 @@ and earlier versions of Kaffe also extends 8-bit and 16-bit object fields to use a full 32 bits. However, GNU Java was recently changed so that 8-bit and 16-bits fields now only take 8 or 16 bits in an object. -In general Java field sizes and algnment are now the same as C and C++. +In general Java field sizes and alignment are now the same as C and C++. @@ -539,7 +539,7 @@ }; -The following convenince typedefs +The following convenience typedefs (matching JNI) are provided. typedef __JArray *jarray; Index: java/papers/nosb.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/papers/nosb.html,v retrieving revision 1.3 diff -u -r1.3 nosb.html --- java/papers/nosb.html 2 Oct 2001 12:00:29 -0000 1.3 +++ java/papers/nosb.html 4 Jan 2003 18:26:58 -0000 @@ -167,7 +167,7 @@ cost of objects' relocation low. The reference to an object (by which an object is know to exists to other objects and the VM) is implemented as a non-moving handle pointing to the actual object's data. Once the -actual object's rellocation performed, simply updating its handle +actual object's relocation performed, simply updating its handle allows the object to be accessed at its new location.

    The garbage collection code is executed in a separate thread when the @@ -762,4 +762,4 @@ - \ No newline at end of file + Index: projects/cfg.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/projects/cfg.html,v retrieving revision 1.10 diff -u -r1.10 cfg.html --- projects/cfg.html 4 Oct 2002 17:39:57 -0000 1.10 +++ projects/cfg.html 4 Jan 2003 18:26:58 -0000 @@ -80,7 +80,7 @@

    The current loop optimizer uses information passed by frontend to discover loop constructs to simplify flow analysis. -It is dificult to keep the information up-to-date and nowday +It is difficult to keep the information up-to-date and nowday it is easy to implement the loop discovery code on CFG.

    @@ -141,7 +141,7 @@

    Implementation in GCC

    -

    The implemention of the web pass uses Michael Hayes's dataflow +

    The implementation of the web pass uses Michael Hayes's dataflow module to construct du-chains and unionfind to produce webs.

    Status

    @@ -202,7 +202,7 @@

    Status

    The code is on the branch. Benefits for Athlon CPU are about 0.5%. -The code is being reviewed for inclussion by Richard Henderson.

    +The code is being reviewed for inclusion by Richard Henderson.

    Thread Safe Profiling

    Index: projects/ia64.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/projects/ia64.html,v retrieving revision 1.12 diff -u -r1.12 ia64.html --- projects/ia64.html 7 Jun 2002 22:42:40 -0000 1.12 +++ projects/ia64.html 4 Jan 2003 18:26:58 -0000 @@ -310,7 +310,7 @@ amount of ILP.

    The IBM IA-64 compiler team saw code in important applications that -could have benefitted from very local data speculation; see comments by +could have benefited from very local data speculation; see comments by Jim McInnes in the minutes of the GCC IA-64 Summit.

    Index: projects/prefetch.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/projects/prefetch.html,v retrieving revision 1.7 diff -u -r1.7 prefetch.html --- projects/prefetch.html 25 Jan 2002 09:57:30 -0000 1.7 +++ projects/prefetch.html 4 Jan 2003 18:26:59 -0000 @@ -837,7 +837,7 @@

    [16] SuperH[tm] RISC Engine SH-3/SH-3E/SH3-DSP Programming Manual, -ADE-602-096B, Rev. 3.0, 9/25/00, Hitatchi, Ltd.; +ADE-602-096B, Rev. 3.0, 9/25/00, Hitachi, Ltd.; a PDF file with a link from http://www.hitachisemiconductor.com/sic/jsp/japan/eng/products/mpumcu/32bit/superh.html.

    From gcc-patches-return-75018-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 18:44:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29244 invoked by alias); 4 Jan 2003 18:44:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29062 invoked from network); 4 Jan 2003 18:44:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 4 Jan 2003 18:44:48 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA17047; Sat, 4 Jan 2003 11:44:35 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BE1224F8073; Sat, 4 Jan 2003 11:47:42 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: [wwwdocs] Add java news item References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: While I'm in LEVITTOWN I thought I'd like to see the NUCLEAR FAMILY!! Date: 04 Jan 2003 11:47:42 -0700 In-Reply-To: Message-ID: <87lm20iwfl.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> 2003-01-03 Jeff Sturm Jeff> * index.html: Add news item. Please check in. Thanks. Tom From gcc-patches-return-75019-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 18:45:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29706 invoked by alias); 4 Jan 2003 18:45:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29666 invoked from network); 4 Jan 2003 18:45:32 -0000 Received: from unknown (HELO mtvmime01.veritas.com) (143.127.3.10) by 209.249.29.67 with SMTP; 4 Jan 2003 18:45:32 -0000 Received: from megami (unverified) by mtvmime01.veritas.com (Content Technologies SMTPRS 4.2.10) with SMTP id ; Sat, 4 Jan 2003 10:46:40 -0800 Received: from veritas.com([172.22.12.210]) (65415 bytes) by megami via sendmail with P:esmtp/R:smart_host/T:smtp (sender: ) id for ; Sat, 4 Jan 2003 10:45:16 -0800 (PST) (Smail-3.2.0.101 1997-Dec-17 #15 built 2001-Aug-30) Message-ID: <3E172D9B.771C5822@veritas.com> Date: Sat, 04 Jan 2003 10:53:15 -0800 From: Bruce Korb Organization: Home X-Accept-Language: en MIME-Version: 1.0 To: Larin Hennessy CC: gcc-patches@gcc.gnu.org, bkorb@gnu.org Subject: Re: updated fixinc patch References: <3E1218D9.5000706@science.oregonstate.edu> Content-Type: multipart/mixed; boundary="------------CA4A0403381ADD4B87203568" This is a multi-part message in MIME format. --------------CA4A0403381ADD4B87203568 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Larin Hennessy wrote: [[patch]] Applied to mainline, as attached. --------------CA4A0403381ADD4B87203568 Content-Type: text/plain; charset=us-ascii; name="fixinc.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fixinc.diff" 2002-12-31 Larin Hennessy * fixinc/fixinc.svr4: Remove references to i860, Sony NewsOS, and spur. * fixinc/inclhack.def: Remove tests for Apple A/UX, ARM/RISCiX, DG/UX, m88k-*-sysv3*, Sony NewsOS. Remove references to i860. Cleanup handling of replacement text. * fixinc/mkfixinc.sh: Remove reference to i?86-*-osf1* 2003-01-04 Bruce Korb * fixinc/tests/base/math.h: removed obsolete results * fixinc/tests/base/stdlib.h: ditto * fixinc/tests/base/sys/param.h: ditto * fixinc/tests/base/sys/stat.h: ditto * fixinc/tests/base/time.h: ditto * fixinc/tests/base/X11/Intrinsic.h: removed obsolete file * fixinc/tests/base/sys/byteorder.h: ditto * fixinc/inclhack.def: Remove superfluous backslashes Index: fixinc.svr4 =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/fixinc.svr4,v retrieving revision 1.11 diff -u -p -r1.11 fixinc.svr4 --- fixinc.svr4 16 May 2002 17:42:32 -0000 1.11 +++ fixinc.svr4 4 Jan 2003 18:41:44 -0000 @@ -197,8 +197,6 @@ while [ $# != 0 ]; do /#[a-z]*if.*[ (]m68k/ s/\([^_]\)m68k/\1__m68k__/g /#[a-z]*if.*[ (]__i386\([^_]\)/ s/__i386/__i386__/g /#[a-z]*if.*[ (]i386/ s/\([^_]\)i386/\1__i386__/g - /#[a-z]*if.*[ (!]__i860\([^_]\)/ s/__i860/__i860__/g - /#[a-z]*if.*[ (!]i860/ s/\([^_]\)i860/\1__i860__/g /#[a-z]*if.*[ (]sparc/ s/\([^_]\)sparc/\1__sparc__/g /#[a-z]*if.*[ (]mc68000/ s/\([^_]\)mc68000/\1__mc68000__/g /#[a-z]*if.*[ (]vax/ s/\([^_]\)vax/\1__vax__/g @@ -659,8 +657,8 @@ if [ \! -z "$file_to_fix" ]; then cp $file_to_fix /tmp/$base chmod +w /tmp/$base sed -e '/#define[ ]*__i386 /d' -e '/#define[ ]*__sparc /d' \ - -e '/#define[ ]*__i860 /d' -e '/#define[ ]*__m88k /d' \ - -e '/#define[ ]*__mips /d' -e '/#define[ ]*__m68k /d' \ + -e '/#define[ ]*__m88k /d' -e '/#define[ ]*__mips /d' \ + -e '/#define[ ]*__m68k /d' \ /tmp/$base > /tmp/$base.sed if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then \ true @@ -1274,79 +1272,6 @@ s/;$/)/ rm -f /tmp/$base /tmp/$base.sed fi -# Sony NEWSOS 5.0 does not support the complete ANSI C standard. - -if [ -x /bin/sony ]; then - if /bin/sony; then - - # Change to not define __filbuf, __flsbuf, and __iob - - file=stdio.h - base=`basename $file`.$$ - if [ -r ${LIB}/$file ]; then - file_to_fix=${LIB}/$file - else - if [ -r ${INPUT}/$file ]; then - file_to_fix=${INPUT}/$file - else - file_to_fix="" - fi - fi - if [ \! -z "$file_to_fix" ]; then - echo Checking $file_to_fix - cp $file_to_fix /tmp/$base - chmod +w /tmp/$base - sed -e ' - s/__filbuf/_filbuf/g - s/__flsbuf/_flsbuf/g - s/__iob/_iob/g - ' /tmp/$base > /tmp/$base.sed - mv /tmp/$base.sed /tmp/$base - if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then - true - else - echo Fixed $file_to_fix - rm -f ${LIB}/$file - cp /tmp/$base ${LIB}/$file - chmod a+r ${LIB}/$file - fi - rm -f /tmp/$base - fi - - # Change to not define __ctype - - file=ctype.h - base=`basename $file`.$$ - if [ -r ${LIB}/$file ]; then - file_to_fix=${LIB}/$file - else - if [ -r ${INPUT}/$file ]; then - file_to_fix=${INPUT}/$file - else - file_to_fix="" - fi - fi - if [ \! -z "$file_to_fix" ]; then - echo Checking $file_to_fix - cp $file_to_fix /tmp/$base - chmod +w /tmp/$base - sed -e ' - s/__ctype/_ctype/g - ' /tmp/$base > /tmp/$base.sed - mv /tmp/$base.sed /tmp/$base - if cmp $file_to_fix /tmp/$base.sed >/dev/null 2>&1; then - true - else - echo Fixed $file_to_fix - rm -f ${LIB}/$file - cp /tmp/$base ${LIB}/$file - chmod a+r ${LIB}/$file - fi - rm -f /tmp/$base - fi - fi -fi - # In limits.h, put #ifndefs around things that are supposed to be defined # in float.h to avoid redefinition errors if float.h is included first. # Solaris 2.1 has this problem. @@ -1701,9 +1626,7 @@ htons (unsigned int __arg) return __result; } -#elif ((defined (__i860__) && !defined (__i860_big_endian__)) \ - || defined (__ns32k__) || defined (__vax__) \ - || defined (__spur__) || defined (__arm__)) +#elif (defined (__ns32k__) || defined (__vax__) || defined (__arm__)) #ifndef __BYTE_ORDER__ #define __BYTE_ORDER__ __LITTLE_ENDIAN__ Index: fixincl.x =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/fixincl.x,v retrieving revision 1.134 diff -u -p -r1.134 fixincl.x --- fixincl.x 16 Dec 2002 19:02:09 -0000 1.134 +++ fixincl.x 4 Jan 2003 18:41:45 -0000 @@ -5,7 +5,7 @@ * files which are fixed to work correctly with ANSI C and placed in a * directory that GNU C will search. * - * This file contains 148 fixup descriptions. + * This file contains 138 fixup descriptions. * * See README for more information. * @@ -32,77 +32,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * - * Description of Aab_Dgux_Int_Varargs fix - */ -tSCC zAab_Dgux_Int_VarargsName[] = - "AAB_dgux_int_varargs"; - -/* - * File name selection pattern - */ -tSCC zAab_Dgux_Int_VarargsList[] = - "|_int_varargs.h|"; -/* - * Machine/OS name selection pattern - */ -#define apzAab_Dgux_Int_VarargsMachs (const char**)NULL -#define AAB_DGUX_INT_VARARGS_TEST_CT 0 -#define aAab_Dgux_Int_VarargsTests (tTestDesc*)NULL - -/* - * Fix Command Arguments for Aab_Dgux_Int_Varargs - */ -static const char* apzAab_Dgux_Int_VarargsPatch[] = { -"#ifndef __INT_VARARGS_H\n\ -#define __INT_VARARGS_H\n\n\ -/********************************************************/\n\ -/* Define the common stuff for varargs/stdarg/stdio. */\n\ -/********************************************************/\n\n\ -/*\n\ -** This file is a DG internal header. Never include this\n\ -** file directly.\n\ -*/\n\n\ -#ifndef ___int_features_h\n\ -#include \n\ -#endif\n\n\ -#if !(defined(_VA_LIST) || defined(_VA_LIST_))\n\ -#define _VA_LIST\n\ -#define _VA_LIST_\n\n\ -#ifdef __LINT__\n\n\ -#ifdef __STDC__\n\ -typedef void * va_list;\n\ -#else\n\ -typedef char * va_list;\n\ -#endif\n\n\ -#else\n\ -#if _M88K_ANY\n\n\ -#if defined(__DCC__)\n\n\ -typedef struct {\n\ - int next_arg;\n\ - int *mem_ptr;\n\ - int *reg_ptr;\n\ -} va_list;\n\n\ -#else /* ! defined(__DCC__) */\n\n\ -typedef struct {\n\ - int __va_arg; /* argument number */\n\ - int *__va_stk; /* start of args passed on stack */\n\ - int *__va_reg; /* start of args passed in regs */\n\ -} va_list;\n\n\ -#endif /* ! defined(__DCC__) */\n\n\ -#elif _IX86_ANY\n\n\ -#if defined(__GNUC__) || defined(__STDC__)\n\ -typedef void * va_list;\n\ -#else\n\ -typedef char * va_list;\n\ -#endif\n\n\ -#endif /* _IX86_ANY */\n\n\ -#endif /* __LINT__ */\n\ -#endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */\n\ -#endif /* #ifndef __INT_VARARGS_H */", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * * Description of Aab_Fd_Zero_Asm_Posix_Types_H fix */ tSCC zAab_Fd_Zero_Asm_Posix_Types_HName[] = @@ -182,20 +111,20 @@ static const char* apzAab_Fd_Zero_Gnu_Ty "/* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */\n\ #ifndef _TYPES_H_WRAPPER\n\ #include \n\ - #include_next \n\n\ +#include_next \n\n\ #if defined(__FD_ZERO) && !defined(__GLIBC__)\n\ #undef __FD_ZERO\n\ -# define __FD_ZERO(fdsetp) \\\n\ - do { \\\n\ - int __d0, __d1; \\\n\ -\t__asm__ __volatile__(\"cld ; rep ; stosl\" \\\n\ - \t: \"=&c\" (__d0), \"=&D\" (__d1) \\\n\ - \t: \"a\" (0), \"0\" (__FDSET_LONGS), \\\n\ -\t\t \"1\" ((__fd_set *) (fdsetp)) :\"memory\"); \\\n\ +# define __FD_ZERO(fdsetp) \\\\\n\ + do { \\\\\n\ + int __d0, __d1; \\\\\n\ +__asm__ __volatile__(\"cld ; rep ; stosl\" \\\\\n\ + \t: \"=&c\" (__d0), \"=&D\" (__d1) \\\\\n\ + \t: \"a\" (0), \"0\" (__FDSET_LONGS), \\\\\n\ + \"1\" ((__fd_set *) (fdsetp)) :\"memory\"); \\\\\n\ } while (0)\n\ #endif\n\n\ #define _TYPES_H_WRAPPER\n\ -#endif /* _TYPES_H_WRAPPER */\n", +#endif /* _TYPES_H_WRAPPER */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -225,25 +154,25 @@ tSCC* apzAab_Fd_Zero_Selectbits_HMachs[] static const char* apzAab_Fd_Zero_Selectbits_HPatch[] = { "/* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */\n\ #ifndef _SELECTBITS_H_WRAPPER\n\ -#include \n\ - #include_next \n\n\ -#if defined(__FD_ZERO) && defined(__GLIBC__) \\\n\ -\t&& defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\\n\ -\t&& __GLIBC_MINOR__ == 0\n\ -#undef __FD_ZERO\n\ -#define __FD_ZERO(fdsetp) \\\n\ - do { \\\n\ - int __d0, __d1; \\\n\ - __asm__ __volatile__ (\"cld; rep; stosl\" \\\n\ - : \"=&c\" (__d0), \"=&D\" (__d1) \\\n\ - : \"a\" (0), \"0\" (sizeof (__fd_set) \\\n\ - / sizeof (__fd_mask)), \\\n\ - \"1\" ((__fd_mask *) (fdsetp)) \\\n\ - : \"memory\"); \\\n\ - } while (0)\n\ -#endif\n\n\ -#define _SELECTBITS_H_WRAPPER\n\ -#endif /* _SELECTBITS_H_WRAPPER */\n", + #include \n\ + #include_next \n\n\ + #if defined(__FD_ZERO) && defined(__GLIBC__) \\\\\n\ + && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\\\\n\ + && __GLIBC_MINOR__ == 0\n\ + #undef __FD_ZERO\n\ + #define __FD_ZERO(fdsetp) \\\\\n\ + do { \\\\\n\ + int __d0, __d1; \\\\\n\ + __asm__ __volatile__ (\"cld; rep; stosl\" \\\\\n\ + : \"=&c\" (__d0), \"=&D\" (__d1) \\\\\n\ + : \"a\" (0), \"0\" (sizeof (__fd_set) \\\\\n\ + / sizeof (__fd_mask)), \\\\\n\ + \"1\" ((__fd_mask *) (fdsetp)) \\\\\n\ + : \"memory\"); \\\\\n\ + } while (0)\n\ + #endif\n\n\ + #define _SELECTBITS_H_WRAPPER\n\ +#endif /* _SELECTBITS_H_WRAPPER */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -272,10 +201,10 @@ tSCC* apzAab_Solaris_Sys_Varargs_HMachs[ */ static const char* apzAab_Solaris_Sys_Varargs_HPatch[] = { "#ifdef __STDC__\n\ -#include \n\ + #include \n\ #else\n\ -#include \n\ -#endif\n", + #include \n\ +#endif", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -311,145 +240,151 @@ static tTestDesc aAab_Sun_MemcpyTests[] static const char* apzAab_Sun_MemcpyPatch[] = { "/* This file was generated by fixincludes */\n\ #ifndef __memory_h__\n\ -#define __memory_h__\n\n\ -#ifdef __STDC__\n\ -extern void *memccpy();\n\ -extern void *memchr();\n\ -extern void *memcpy();\n\ -extern void *memset();\n\ -#else\n\ -extern char *memccpy();\n\ -extern char *memchr();\n\ -extern char *memcpy();\n\ -extern char *memset();\n\ -#endif /* __STDC__ */\n\n\ -extern int memcmp();\n\n\ -#endif /* __memory_h__ */\n", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aab_Svr4_Replace_Byteorder fix - */ -tSCC zAab_Svr4_Replace_ByteorderName[] = - "AAB_svr4_replace_byteorder"; - -/* - * File name selection pattern - */ -tSCC zAab_Svr4_Replace_ByteorderList[] = - "|sys/byteorder.h|"; -/* - * Machine/OS name selection pattern - */ -tSCC* apzAab_Svr4_Replace_ByteorderMachs[] = { - "*-*-sysv4*", - "i[34567]86-*-sysv5*", - "i[34567]86-*-udk*", - "i[34567]86-*-solaris2.[0-4]", - "powerpcle-*-solaris2.[0-4]", - "sparc-*-solaris2.[0-4]", - (const char*)NULL }; -#define AAB_SVR4_REPLACE_BYTEORDER_TEST_CT 0 -#define aAab_Svr4_Replace_ByteorderTests (tTestDesc*)NULL - -/* - * Fix Command Arguments for Aab_Svr4_Replace_Byteorder - */ -static const char* apzAab_Svr4_Replace_ByteorderPatch[] = { -"#ifndef _SYS_BYTEORDER_H\n\ + #define __memory_h__\n\n\ + #ifdef __STDC__\n\ + extern void *memccpy();\n\ + extern void *memchr();\n\ + extern void *memcpy();\n\ + extern void *memset();\n\ + #else\n\ + extern char *memccpy();\n\ + extern char *memchr();\n\ + extern char *memcpy();\n\ + extern char *memset();\n\ + #endif /* __STDC__ */\n\n\ + extern int memcmp();\n\n\ +#endif /* __memory_h__ */\n\ +_EndOfHeader;\n\ +};\n\n\n\ +/*\n\ + * Completely replace with a file that includes gcc's\n\ + * stdarg.h or varargs.h files as appropriate.\n\ + */\n\ +#ifdef SVR4\n\ +fix = {\n\ + hackname = AAB_svr4_no_varargs;\n\ + files = sys/varargs.h;\n\ + replace = \"/* This file was generated by fixincludes. */\\n\"\n\ + \"#ifndef _SYS_VARARGS_H\\n\"\n\ + \"#define _SYS_VARARGS_H\\n\\n\"\n\ + \n\ + \"#ifdef __STDC__\\n\"\n\ + \"#include \\n\"\n\ + \"#else\\n\"\n\ + \"#include \\n\"\n\ + \"#endif\\n\\n\"\n\ + \n\ + \"#endif /* _SYS_VARARGS_H */\\n\";\n\ +};\n\ +#endif\n\n\n\ +/*\n\ + * Completely replace ; with a file that implements gcc's\n\ + * optimized byteswapping. Restricted to \"SVR4\" machines until either\n\ + * it is shown to be safe to replace this file always, or we get bolder ;-)\n\ + */\n\ +fix = {\n\ + hackname = AAB_svr4_replace_byteorder;\n\ +#ifndef SVR5\n\ + mach = \"*-*-sysv4*\";\n\ + mach = \"i[34567]86-*-sysv5*\";\n\ + mach = \"i[34567]86-*-udk*\";\n\ + mach = \"i[34567]86-*-solaris2.[0-4]\";\n\ + mach = \"powerpcle-*-solaris2.[0-4]\";\n\ + mach = \"sparc-*-solaris2.[0-4]\";\n\ +#endif /* SVR5 */\n\ + files = sys/byteorder.h;\n\ + replace = <<- _EndOfHeader_\n\ +#ifndef _SYS_BYTEORDER_H\n\ #define _SYS_BYTEORDER_H\n\n\ -/* Functions to convert `short' and `long' quantities from host byte order\n\ +/* Functions to convert `short\\' and `long\\' quantities from host byte order\n\ to (internet) network byte order (i.e. big-endian).\n\n\ Written by Ron Guilmette (rfg@ncd.com).\n\n\ - This isn't actually used by GCC. It is installed by fixinc.svr4.\n\n\ + This isn\\'t actually used by GCC. It is installed by fixinc.svr4.\n\n\ For big-endian machines these functions are essentially no-ops.\n\n\ For little-endian machines, we define the functions using specialized\n\ asm sequences in cases where doing so yields better code (e.g. i386). */\n\n\ #if !defined (__GNUC__) && !defined (__GNUG__)\n\ -#error You lose! This file is only useful with GNU compilers.\n\ + #error You lose! This file is only useful with GNU compilers.\n\ #endif\n\n\ #ifndef __BYTE_ORDER__\n\ -/* Byte order defines. These are as defined on UnixWare 1.1, but with\n\ - double underscores added at the front and back. */\n\ -#define __LITTLE_ENDIAN__ 1234\n\ -#define __BIG_ENDIAN__ 4321\n\ -#define __PDP_ENDIAN__ 3412\n\ + /* Byte order defines. These are as defined on UnixWare 1.1, but with\n\ + double underscores added at the front and back. */\n\ + #define __LITTLE_ENDIAN__ 1234\n\ + #define __BIG_ENDIAN__ 4321\n\ + #define __PDP_ENDIAN__ 3412\n\ #endif\n\n\ #ifdef __STDC__\n\ -static __inline__ unsigned long htonl (unsigned long);\n\ -static __inline__ unsigned short htons (unsigned int);\n\ -static __inline__ unsigned long ntohl (unsigned long);\n\ -static __inline__ unsigned short ntohs (unsigned int);\n\ + static __inline__ unsigned long htonl (unsigned long);\n\ + static __inline__ unsigned short htons (unsigned int);\n\ + static __inline__ unsigned long ntohl (unsigned long);\n\ + static __inline__ unsigned short ntohs (unsigned int);\n\ #endif /* defined (__STDC__) */\n\n\ #if defined (__i386__)\n\n\ -#ifndef __BYTE_ORDER__\n\ -#define __BYTE_ORDER__ __LITTLE_ENDIAN__\n\ -#endif\n\n\ -/* Convert a host long to a network long. */\n\n\ -/* We must use a new-style function definition, so that this will also\n\ - be valid for C++. */\n\ -static __inline__ unsigned long\n\ -htonl (unsigned long __arg)\n\ -{\n\ - register unsigned long __result;\n\n\ - __asm__ (\"xchg%B0 %b0,%h0\n\ -\tror%L0 $16,%0\n\ -\txchg%B0 %b0,%h0\" : \"=q\" (__result) : \"0\" (__arg));\n\ - return __result;\n\ -}\n\n\ -/* Convert a host short to a network short. */\n\n\ -static __inline__ unsigned short\n\ -htons (unsigned int __arg)\n\ -{\n\ - register unsigned short __result;\n\n\ - __asm__ (\"xchg%B0 %b0,%h0\" : \"=q\" (__result) : \"0\" (__arg));\n\ - return __result;\n\ -}\n\n\ -#elif ((defined (__i860__) && !defined (__i860_big_endian__))\t\\\n\ - || defined (__ns32k__) || defined (__vax__)\t\t\\\n\ - || defined (__spur__) || defined (__arm__))\n\n\ -#ifndef __BYTE_ORDER__\n\ -#define __BYTE_ORDER__ __LITTLE_ENDIAN__\n\ -#endif\n\n\ -/* For other little-endian machines, using C code is just as efficient as\n\ - using assembly code. */\n\n\ -/* Convert a host long to a network long. */\n\n\ -static __inline__ unsigned long\n\ -htonl (unsigned long __arg)\n\ -{\n\ - register unsigned long __result;\n\n\ - __result = (__arg >> 24) & 0x000000ff;\n\ - __result |= (__arg >> 8) & 0x0000ff00;\n\ - __result |= (__arg << 8) & 0x00ff0000;\n\ - __result |= (__arg << 24) & 0xff000000;\n\ - return __result;\n\ -}\n\n\ -/* Convert a host short to a network short. */\n\n\ -static __inline__ unsigned short\n\ -htons (unsigned int __arg)\n\ -{\n\ - register unsigned short __result;\n\n\ - __result = (__arg << 8) & 0xff00;\n\ - __result |= (__arg >> 8) & 0x00ff;\n\ - return __result;\n\ -}\n\n\ + #ifndef __BYTE_ORDER__\n\ + #define __BYTE_ORDER__ __LITTLE_ENDIAN__\n\ + #endif\n\n\ + /* Convert a host long to a network long. */\n\n\ + /* We must use a new-style function definition, so that this will also\n\ + be valid for C++. */\n\ + static __inline__ unsigned long\n\ + htonl (unsigned long __arg)\n\ + {\n\ + register unsigned long __result;\n\n\ + __asm__ (\"xchg%B0 %b0,%h0\n\ + ror%L0 $16,%0\n\ + xchg%B0 %b0,%h0\" : \"=q\" (__result) : \"0\" (__arg));\n\ + return __result;\n\ + }\n\n\ + /* Convert a host short to a network short. */\n\n\ + static __inline__ unsigned short\n\ + htons (unsigned int __arg)\n\ + {\n\ + register unsigned short __result;\n\n\ + __asm__ (\"xchg%B0 %b0,%h0\" : \"=q\" (__result) : \"0\" (__arg));\n\ + return __result;\n\ + }\n\n\ +#elif (defined (__ns32k__) || defined (__vax__) || defined (__arm__))\n\n\ + #ifndef __BYTE_ORDER__\n\ + #define __BYTE_ORDER__ __LITTLE_ENDIAN__\n\ + #endif\n\n\ + /* For other little-endian machines, using C code is just as efficient as\n\ + using assembly code. */\n\n\ + /* Convert a host long to a network long. */\n\n\ + static __inline__ unsigned long\n\ + htonl (unsigned long __arg)\n\ + {\n\ + register unsigned long __result;\n\n\ + __result = (__arg >> 24) & 0x000000ff;\n\ + __result |= (__arg >> 8) & 0x0000ff00;\n\ + __result |= (__arg << 8) & 0x00ff0000;\n\ + __result |= (__arg << 24) & 0xff000000;\n\ + return __result;\n\ + }\n\n\ + /* Convert a host short to a network short. */\n\n\ + static __inline__ unsigned short\n\ + htons (unsigned int __arg)\n\ + {\n\ + register unsigned short __result;\n\n\ + __result = (__arg << 8) & 0xff00;\n\ + __result |= (__arg >> 8) & 0x00ff;\n\ + return __result;\n\ + }\n\n\ #else /* must be a big-endian machine */\n\n\ -#ifndef __BYTE_ORDER__\n\ -#define __BYTE_ORDER__ __BIG_ENDIAN__\n\ -#endif\n\n\ -/* Convert a host long to a network long. */\n\n\ -static __inline__ unsigned long\n\ -htonl (unsigned long __arg)\n\ -{\n\ - return __arg;\n\ -}\n\n\ -/* Convert a host short to a network short. */\n\n\ -static __inline__ unsigned short\n\ -htons (unsigned int __arg)\n\ -{\n\ - return __arg;\n\ -}\n\n\ + #ifndef __BYTE_ORDER__\n\ + #define __BYTE_ORDER__ __BIG_ENDIAN__\n\ + #endif\n\n\ + /* Convert a host long to a network long. */\n\n\ + static __inline__ unsigned long\n\ + htonl (unsigned long __arg)\n\ + {\n\ + return __arg;\n\ + }\n\n\ + /* Convert a host short to a network short. */\n\n\ + static __inline__ unsigned short\n\ + htons (unsigned int __arg)\n\ + {\n\ + return __arg;\n\ + }\n\n\ #endif /* big-endian */\n\n\ /* Convert a network long to a host long. */\n\n\ static __inline__ unsigned long\n\ @@ -463,7 +398,7 @@ ntohs (unsigned int __arg)\n\ {\n\ return htons (__arg);\n\ }\n\ -#endif\n", +#endif", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -526,9 +461,9 @@ tSCC* apzAab_Ultrix_LimitsMachs[] = { */ static const char* apzAab_Ultrix_LimitsPatch[] = { "#ifndef _LIMITS_INCLUDED\n\ -#define _LIMITS_INCLUDED\n\ -#include \n\ -#endif /* _LIMITS_INCLUDED */\n", + #define _LIMITS_INCLUDED\n\ + #include \n\ +#endif /* _LIMITS_INCLUDED */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -557,9 +492,9 @@ tSCC* apzAab_Ultrix_MemoryMachs[] = { */ static const char* apzAab_Ultrix_MemoryPatch[] = { "#ifndef _MEMORY_INCLUDED\n\ -#define _MEMORY_INCLUDED\n\ -#include \n\ -#endif /* _MEMORY_INCLUDED */\n", + #define _MEMORY_INCLUDED\n\ + #include \n\ +#endif /* _MEMORY_INCLUDED */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -588,9 +523,9 @@ tSCC* apzAab_Ultrix_StringMachs[] = { */ static const char* apzAab_Ultrix_StringPatch[] = { "#ifndef _STRING_INCLUDED\n\ -#define _STRING_INCLUDED\n\ -#include \n\ -#endif /* _STRING_INCLUDED */\n", + #define _STRING_INCLUDED\n\ + #include \n\ +#endif /* _STRING_INCLUDED */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * @@ -916,112 +851,6 @@ static const char* apzAlpha_SbrkPatch[] /* * * * * * * * * * * * * * * * * * * * * * * * * * * - * Description of Arm_Norcroft_Hint fix - */ -tSCC zArm_Norcroft_HintName[] = - "arm_norcroft_hint"; - -/* - * File name selection pattern - */ -tSCC zArm_Norcroft_HintList[] = - "|X11/Intrinsic.h|"; -/* - * Machine/OS name selection pattern - */ -#define apzArm_Norcroft_HintMachs (const char**)NULL - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zArm_Norcroft_HintSelect0[] = - "___type p_type"; - -#define ARM_NORCROFT_HINT_TEST_CT 1 -static tTestDesc aArm_Norcroft_HintTests[] = { - { TT_EGREP, zArm_Norcroft_HintSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for Arm_Norcroft_Hint - */ -static const char* apzArm_Norcroft_HintPatch[] = { - "format", - "p_type", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Arm_Wchar fix - */ -tSCC zArm_WcharName[] = - "arm_wchar"; - -/* - * File name selection pattern - */ -tSCC zArm_WcharList[] = - "|stdlib.h|"; -/* - * Machine/OS name selection pattern - */ -#define apzArm_WcharMachs (const char**)NULL - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zArm_WcharSelect0[] = - "#[ \t]*define[ \t]*__wchar_t"; - -#define ARM_WCHAR_TEST_CT 1 -static tTestDesc aArm_WcharTests[] = { - { TT_EGREP, zArm_WcharSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for Arm_Wchar - */ -static const char* apzArm_WcharPatch[] = { - "format", - "%1_GCC_WCHAR_T", - "(#[ \t]*(ifndef|define)[ \t]+)__wchar_t", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aux_Asm fix - */ -tSCC zAux_AsmName[] = - "aux_asm"; - -/* - * File name selection pattern - */ -tSCC zAux_AsmList[] = - "|sys/param.h|"; -/* - * Machine/OS name selection pattern - */ -#define apzAux_AsmMachs (const char**)NULL - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zAux_AsmSelect0[] = - "#ifndef NOINLINE"; - -#define AUX_ASM_TEST_CT 1 -static tTestDesc aAux_AsmTests[] = { - { TT_EGREP, zAux_AsmSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for Aux_Asm - */ -static const char* apzAux_AsmPatch[] = { - "format", - "#if !defined(NOINLINE) && !defined(__GNUC__)", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * * Description of Avoid_Bool_Define fix */ tSCC zAvoid_Bool_DefineName[] = @@ -1595,43 +1424,6 @@ static const char* apzEcd_CursorPatch[] /* * * * * * * * * * * * * * * * * * * * * * * * * * * - * Description of Fix_Header_Breakage fix - */ -tSCC zFix_Header_BreakageName[] = - "fix_header_breakage"; - -/* - * File name selection pattern - */ -tSCC zFix_Header_BreakageList[] = - "|math.h|"; -/* - * Machine/OS name selection pattern - */ -tSCC* apzFix_Header_BreakageMachs[] = { - "m88k-motorola-sysv3*", - (const char*)NULL }; - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zFix_Header_BreakageSelect0[] = - "extern double floor\\(\\), ceil\\(\\), fmod\\(\\), fabs\\(\\);"; - -#define FIX_HEADER_BREAKAGE_TEST_CT 1 -static tTestDesc aFix_Header_BreakageTests[] = { - { TT_EGREP, zFix_Header_BreakageSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for Fix_Header_Breakage - */ -static const char* apzFix_Header_BreakagePatch[] = { - "format", - "extern double floor(), ceil(), fmod(), fabs _PARAMS((double));", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * * Description of Freebsd_Gcc3_Breakage fix */ tSCC zFreebsd_Gcc3_BreakageName[] = @@ -2721,128 +2513,6 @@ static const char* apzLynxos_Fcntl_Proto /* * * * * * * * * * * * * * * * * * * * * * * * * * * - * Description of M88k_Bad_Hypot_Opt fix - */ -tSCC zM88k_Bad_Hypot_OptName[] = - "m88k_bad_hypot_opt"; - -/* - * File name selection pattern - */ -tSCC zM88k_Bad_Hypot_OptList[] = - "|math.h|"; -/* - * Machine/OS name selection pattern - */ -tSCC* apzM88k_Bad_Hypot_OptMachs[] = { - "m88k-motorola-sysv3*", - (const char*)NULL }; - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zM88k_Bad_Hypot_OptSelect0[] = - "^extern double hypot\\(\\);\n"; - -#define M88K_BAD_HYPOT_OPT_TEST_CT 1 -static tTestDesc aM88k_Bad_Hypot_OptTests[] = { - { TT_EGREP, zM88k_Bad_Hypot_OptSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for M88k_Bad_Hypot_Opt - */ -static const char* apzM88k_Bad_Hypot_OptPatch[] = { - "format", - "%0/* Workaround a stupid Motorola optimization if one\n\ - of x or y is 0.0 and the other is negative! */\n\ -#ifdef __STDC__\n\ -static __inline__ double fake_hypot (double x, double y)\n\ -#else\n\ -static __inline__ double fake_hypot (x, y)\n\ -\tdouble x, y;\n\ -#endif\n\ -{\n\ -\treturn fabs (hypot (x, y));\n\ -}\n\ -#define hypot\tfake_hypot\n", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of M88k_Bad_S_If fix - */ -tSCC zM88k_Bad_S_IfName[] = - "m88k_bad_s_if"; - -/* - * File name selection pattern - */ -tSCC zM88k_Bad_S_IfList[] = - "|sys/stat.h|"; -/* - * Machine/OS name selection pattern - */ -tSCC* apzM88k_Bad_S_IfMachs[] = { - "m88k-*-sysv3*", - (const char*)NULL }; - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zM88k_Bad_S_IfSelect0[] = - "#define[ \t]+S_IS[A-Z]+\\(m\\)[ \t]+\\(m[ \t]*&"; - -#define M88K_BAD_S_IF_TEST_CT 1 -static tTestDesc aM88k_Bad_S_IfTests[] = { - { TT_EGREP, zM88k_Bad_S_IfSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for M88k_Bad_S_If - */ -static const char* apzM88k_Bad_S_IfPatch[] = { - "format", - "#define %1(m) (((m) & S_IFMT) == %2)", - "#define[ \t]+(S_IS[A-Z]+)\\(m\\)[ \t]+\\(m[ \t]*&[ \t]*(S_IF[A-Z][A-Z][A-Z]+|0[0-9]+)[ \t]*\\)", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of M88k_Multi_Incl fix - */ -tSCC zM88k_Multi_InclName[] = - "m88k_multi_incl"; - -/* - * File name selection pattern - */ -tSCC zM88k_Multi_InclList[] = - "|time.h|"; -/* - * Machine/OS name selection pattern - */ -tSCC* apzM88k_Multi_InclMachs[] = { - "m88k-tektronix-sysv3*", - (const char*)NULL }; - -/* - * content bypass pattern - skip fix if pattern found - */ -tSCC zM88k_Multi_InclBypass0[] = - "#ifndef"; - -#define M88K_MULTI_INCL_TEST_CT 1 -static tTestDesc aM88k_Multi_InclTests[] = { - { TT_NEGREP, zM88k_Multi_InclBypass0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for M88k_Multi_Incl - */ -static const char* apzM88k_Multi_InclPatch[] = { - "wrap", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * * Description of Machine_Ansi_H_Va_List fix */ tSCC zMachine_Ansi_H_Va_ListName[] = @@ -3154,43 +2824,6 @@ static const char* apzNested_Sys_LimitsP /* * * * * * * * * * * * * * * * * * * * * * * * * * * - * Description of News_Os_Recursion fix - */ -tSCC zNews_Os_RecursionName[] = - "news_os_recursion"; - -/* - * File name selection pattern - */ -tSCC zNews_Os_RecursionList[] = - "|stdlib.h|"; -/* - * Machine/OS name selection pattern - */ -#define apzNews_Os_RecursionMachs (const char**)NULL - -/* - * content selection pattern - do fix if pattern found - */ -tSCC zNews_Os_RecursionSelect0[] = - "[ \t]*#include .*"; - -#define NEWS_OS_RECURSION_TEST_CT 1 -static tTestDesc aNews_Os_RecursionTests[] = { - { TT_EGREP, zNews_Os_RecursionSelect0, (regex_t*)NULL }, }; - -/* - * Fix Command Arguments for News_Os_Recursion - */ -static const char* apzNews_Os_RecursionPatch[] = { - "format", - "#ifdef BOGUS_RECURSION\n\ -%0\n\ -#endif", - (char*)NULL }; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * * Description of Next_Math_Prefix fix */ tSCC zNext_Math_PrefixName[] = @@ -5782,21 +5415,19 @@ static const char* apzX11_SprintfPatch[] * * List of all fixes */ -#define REGEX_COUNT 155 -#define MACH_LIST_SIZE_LIMIT 279 -#define FIX_COUNT 148 +#define REGEX_COUNT 147 +#define MACH_LIST_SIZE_LIMIT 261 +#define FIX_COUNT 138 /* * Enumerate the fixes */ typedef enum { - AAB_DGUX_INT_VARARGS_FIXIDX, AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX, AAB_FD_ZERO_GNU_TYPES_H_FIXIDX, AAB_FD_ZERO_SELECTBITS_H_FIXIDX, AAB_SOLARIS_SYS_VARARGS_H_FIXIDX, AAB_SUN_MEMCPY_FIXIDX, - AAB_SVR4_REPLACE_BYTEORDER_FIXIDX, AAB_ULTRIX_ANSI_COMPAT_FIXIDX, AAB_ULTRIX_LIMITS_FIXIDX, AAB_ULTRIX_MEMORY_FIXIDX, @@ -5810,9 +5441,6 @@ typedef enum { ALPHA_GETOPT_FIXIDX, ALPHA_PARENS_FIXIDX, ALPHA_SBRK_FIXIDX, - ARM_NORCROFT_HINT_FIXIDX, - ARM_WCHAR_FIXIDX, - AUX_ASM_FIXIDX, AVOID_BOOL_DEFINE_FIXIDX, AVOID_BOOL_TYPE_FIXIDX, AVOID_WCHAR_T_TYPE_FIXIDX, @@ -5828,7 +5456,6 @@ typedef enum { DEC_INTERN_ASM_FIXIDX, DJGPP_WCHAR_H_FIXIDX, ECD_CURSOR_FIXIDX, - FIX_HEADER_BREAKAGE_FIXIDX, FREEBSD_GCC3_BREAKAGE_FIXIDX, GNU_TYPES_FIXIDX, HP_INLINE_FIXIDX, @@ -5858,9 +5485,6 @@ typedef enum { LIMITS_IFNDEFS_FIXIDX, LYNX_VOID_INT_FIXIDX, LYNXOS_FCNTL_PROTO_FIXIDX, - M88K_BAD_HYPOT_OPT_FIXIDX, - M88K_BAD_S_IF_FIXIDX, - M88K_MULTI_INCL_FIXIDX, MACHINE_ANSI_H_VA_LIST_FIXIDX, MACHINE_NAME_FIXIDX, MATH_EXCEPTION_FIXIDX, @@ -5869,7 +5493,6 @@ typedef enum { NESTED_AUTH_DES_FIXIDX, NESTED_MOTOROLA_FIXIDX, NESTED_SYS_LIMITS_FIXIDX, - NEWS_OS_RECURSION_FIXIDX, NEXT_MATH_PREFIX_FIXIDX, NEXT_TEMPLATE_FIXIDX, NEXT_VOLITILE_FIXIDX, @@ -5941,11 +5564,6 @@ typedef enum { } t_fixinc_idx; tFixDesc fixDescList[ FIX_COUNT ] = { - { zAab_Dgux_Int_VarargsName, zAab_Dgux_Int_VarargsList, - apzAab_Dgux_Int_VarargsMachs, - AAB_DGUX_INT_VARARGS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAab_Dgux_Int_VarargsTests, apzAab_Dgux_Int_VarargsPatch, 0 }, - { zAab_Fd_Zero_Asm_Posix_Types_HName, zAab_Fd_Zero_Asm_Posix_Types_HList, apzAab_Fd_Zero_Asm_Posix_Types_HMachs, AAB_FD_ZERO_ASM_POSIX_TYPES_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, @@ -5971,11 +5589,6 @@ tFixDesc fixDescList[ FIX_COUNT ] = { AAB_SUN_MEMCPY_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, aAab_Sun_MemcpyTests, apzAab_Sun_MemcpyPatch, 0 }, - { zAab_Svr4_Replace_ByteorderName, zAab_Svr4_Replace_ByteorderList, - apzAab_Svr4_Replace_ByteorderMachs, - AAB_SVR4_REPLACE_BYTEORDER_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAab_Svr4_Replace_ByteorderTests, apzAab_Svr4_Replace_ByteorderPatch, 0 }, - { zAab_Ultrix_Ansi_CompatName, zAab_Ultrix_Ansi_CompatList, apzAab_Ultrix_Ansi_CompatMachs, AAB_ULTRIX_ANSI_COMPAT_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, @@ -6041,21 +5654,6 @@ tFixDesc fixDescList[ FIX_COUNT ] = { ALPHA_SBRK_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aAlpha_SbrkTests, apzAlpha_SbrkPatch, 0 }, - { zArm_Norcroft_HintName, zArm_Norcroft_HintList, - apzArm_Norcroft_HintMachs, - ARM_NORCROFT_HINT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aArm_Norcroft_HintTests, apzArm_Norcroft_HintPatch, 0 }, - - { zArm_WcharName, zArm_WcharList, - apzArm_WcharMachs, - ARM_WCHAR_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aArm_WcharTests, apzArm_WcharPatch, 0 }, - - { zAux_AsmName, zAux_AsmList, - apzAux_AsmMachs, - AUX_ASM_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aAux_AsmTests, apzAux_AsmPatch, 0 }, - { zAvoid_Bool_DefineName, zAvoid_Bool_DefineList, apzAvoid_Bool_DefineMachs, AVOID_BOOL_DEFINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, @@ -6131,11 +5729,6 @@ tFixDesc fixDescList[ FIX_COUNT ] = { ECD_CURSOR_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aEcd_CursorTests, apzEcd_CursorPatch, 0 }, - { zFix_Header_BreakageName, zFix_Header_BreakageList, - apzFix_Header_BreakageMachs, - FIX_HEADER_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aFix_Header_BreakageTests, apzFix_Header_BreakagePatch, 0 }, - { zFreebsd_Gcc3_BreakageName, zFreebsd_Gcc3_BreakageList, apzFreebsd_Gcc3_BreakageMachs, FREEBSD_GCC3_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, @@ -6281,21 +5874,6 @@ tFixDesc fixDescList[ FIX_COUNT ] = { LYNXOS_FCNTL_PROTO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aLynxos_Fcntl_ProtoTests, apzLynxos_Fcntl_ProtoPatch, 0 }, - { zM88k_Bad_Hypot_OptName, zM88k_Bad_Hypot_OptList, - apzM88k_Bad_Hypot_OptMachs, - M88K_BAD_HYPOT_OPT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aM88k_Bad_Hypot_OptTests, apzM88k_Bad_Hypot_OptPatch, 0 }, - - { zM88k_Bad_S_IfName, zM88k_Bad_S_IfList, - apzM88k_Bad_S_IfMachs, - M88K_BAD_S_IF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aM88k_Bad_S_IfTests, apzM88k_Bad_S_IfPatch, 0 }, - - { zM88k_Multi_InclName, zM88k_Multi_InclList, - apzM88k_Multi_InclMachs, - M88K_MULTI_INCL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aM88k_Multi_InclTests, apzM88k_Multi_InclPatch, 0 }, - { zMachine_Ansi_H_Va_ListName, zMachine_Ansi_H_Va_ListList, apzMachine_Ansi_H_Va_ListMachs, MACHINE_ANSI_H_VA_LIST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, @@ -6335,11 +5913,6 @@ tFixDesc fixDescList[ FIX_COUNT ] = { apzNested_Sys_LimitsMachs, NESTED_SYS_LIMITS_TEST_CT, FD_MACH_ONLY, aNested_Sys_LimitsTests, apzNested_Sys_LimitsPatch, 0 }, - - { zNews_Os_RecursionName, zNews_Os_RecursionList, - apzNews_Os_RecursionMachs, - NEWS_OS_RECURSION_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, - aNews_Os_RecursionTests, apzNews_Os_RecursionPatch, 0 }, { zNext_Math_PrefixName, zNext_Math_PrefixList, apzNext_Math_PrefixMachs, Index: inclhack.def =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/inclhack.def,v retrieving revision 1.139 diff -u -p -r1.139 inclhack.def --- inclhack.def 27 Oct 2002 17:58:36 -0000 1.139 +++ inclhack.def 4 Jan 2003 18:41:47 -0000 @@ -21,80 +21,6 @@ FIXINC_DEBUG = yes; #endif /* - * Completely replace <_int_varargs.h> with a file that includes gcc's - * stdarg.h or varargs.h files as appropriate on DG/UX - */ -fix = { - hackname = AAB_dgux_int_varargs; - files = _int_varargs.h; - replace = <<- _EOF_ - #ifndef __INT_VARARGS_H - #define __INT_VARARGS_H - - /********************************************************/ - /* Define the common stuff for varargs/stdarg/stdio. */ - /********************************************************/ - - /* - ** This file is a DG internal header. Never include this - ** file directly. - */ - - #ifndef ___int_features_h - #include - #endif - - #if !(defined(_VA_LIST) || defined(_VA_LIST_)) - #define _VA_LIST - #define _VA_LIST_ - - #ifdef __LINT__ - - #ifdef __STDC__ - typedef void * va_list; - #else - typedef char * va_list; - #endif - - #else - #if _M88K_ANY - - #if defined(__DCC__) - - typedef struct { - int next_arg; - int *mem_ptr; - int *reg_ptr; - } va_list; - - #else /* ! defined(__DCC__) */ - - typedef struct { - int __va_arg; /* argument number */ - int *__va_stk; /* start of args passed on stack */ - int *__va_reg; /* start of args passed in regs */ - } va_list; - - #endif /* ! defined(__DCC__) */ - - #elif _IX86_ANY - - #if defined(__GNUC__) || defined(__STDC__) - typedef void * va_list; - #else - typedef char * va_list; - #endif - - #endif /* _IX86_ANY */ - - #endif /* __LINT__ */ - #endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */ - #endif /* #ifndef __INT_VARARGS_H */ - _EOF_; -}; - - -/* * This fixes __FD_ZERO bug for linux 2.x.y (x <= 2 && y <= some n) */ fix = { @@ -109,7 +35,7 @@ fix = { * the wrapper, this will follow the #include_next chain until * we arrive at the real . */ - replace = <<- _EOF_ + replace = <<- _EndOfHeader_ /* This file fixes a bug in the __FD_ZERO macro for older versions of the Linux kernel. */ #ifndef _POSIX_TYPES_H_WRAPPER @@ -130,7 +56,7 @@ fix = { #define _POSIX_TYPES_H_WRAPPER #endif /* _POSIX_TYPES_H_WRAPPER */ - _EOF_; + _EndOfHeader_; }; @@ -148,28 +74,27 @@ fix = { * the wrapper, this will follow the #include_next chain until * we arrive at the real . */ - replace = + replace = <<- _EndOfHeader_ + /* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */ + #ifndef _TYPES_H_WRAPPER + #include + #include_next -'/* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */ -\#ifndef _TYPES_H_WRAPPER -\#include - \#include_next - -\#if defined(__FD_ZERO) && !defined(__GLIBC__) -\#undef __FD_ZERO -\# define __FD_ZERO(fdsetp) \\ - do { \\ - int __d0, __d1; \\ - __asm__ __volatile__("cld ; rep ; stosl" \\ + #if defined(__FD_ZERO) && !defined(__GLIBC__) + #undef __FD_ZERO + # define __FD_ZERO(fdsetp) \\ + do { \\ + int __d0, __d1; \\ + __asm__ __volatile__("cld ; rep ; stosl" \\ : "=&c" (__d0), "=&D" (__d1) \\ : "a" (0), "0" (__FDSET_LONGS), \\ "1" ((__fd_set *) (fdsetp)) :"memory"); \\ - } while (0) -\#endif + } while (0) + #endif -\#define _TYPES_H_WRAPPER -\#endif /* _TYPES_H_WRAPPER */ -'; + #define _TYPES_H_WRAPPER + #endif /* _TYPES_H_WRAPPER */ + _EndOfHeader_; }; @@ -187,32 +112,31 @@ fix = { * the wrapper, this will follow the #include_next chain until * we arrive at the real . */ - replace = - -'/* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */ -\#ifndef _SELECTBITS_H_WRAPPER -\#include - \#include_next - -\#if defined(__FD_ZERO) && defined(__GLIBC__) \\ - && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\ - && __GLIBC_MINOR__ == 0 -\#undef __FD_ZERO -\#define __FD_ZERO(fdsetp) \\ - do { \\ - int __d0, __d1; \\ - __asm__ __volatile__ ("cld; rep; stosl" \\ + replace = <<- _EndOfHeader_ + /* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */ + #ifndef _SELECTBITS_H_WRAPPER + #include + #include_next + + #if defined(__FD_ZERO) && defined(__GLIBC__) \\ + && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\ + && __GLIBC_MINOR__ == 0 + #undef __FD_ZERO + #define __FD_ZERO(fdsetp) \\ + do { \\ + int __d0, __d1; \\ + __asm__ __volatile__ ("cld; rep; stosl" \\ : "=&c" (__d0), "=&D" (__d1) \\ : "a" (0), "0" (sizeof (__fd_set) \\ / sizeof (__fd_mask)), \\ "1" ((__fd_mask *) (fdsetp)) \\ : "memory"); \\ - } while (0) -\#endif + } while (0) + #endif -\#define _SELECTBITS_H_WRAPPER -\#endif /* _SELECTBITS_H_WRAPPER */ -'; + #define _SELECTBITS_H_WRAPPER + #endif /* _SELECTBITS_H_WRAPPER */ + _EndOfHeader_; }; @@ -225,11 +149,13 @@ fix = { hackname = AAB_solaris_sys_varargs_h; files = "sys/varargs.h"; mach = '*-*-solaris*'; - replace = "#ifdef __STDC__\n" - "#include \n" - "#else\n" - "#include \n" - "#endif\n"; + replace = <<- _EndOfHeader_ + #ifdef __STDC__ + #include + #else + #include + #endif + _EndOfHeader_; }; @@ -243,32 +169,31 @@ fix = { fix = { hackname = AAB_sun_memcpy; files = memory.h; - select = "/\\*\t@\\(#\\)" + select = "/\\*\t@\\(#\\)" "(head/memory.h\t50.1\t " "|memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/"; - replace = -'/* This file was generated by fixincludes */ -\#ifndef __memory_h__ -\#define __memory_h__ - -\#ifdef __STDC__ -extern void *memccpy(); -extern void *memchr(); -extern void *memcpy(); -extern void *memset(); -\#else -extern char *memccpy(); -extern char *memchr(); -extern char *memcpy(); -extern char *memset(); -\#endif /* __STDC__ */ + replace = <<- _EndOfHeader_ + /* This file was generated by fixincludes */ + #ifndef __memory_h__ + #define __memory_h__ + + #ifdef __STDC__ + extern void *memccpy(); + extern void *memchr(); + extern void *memcpy(); + extern void *memset(); + #else + extern char *memccpy(); + extern char *memchr(); + extern char *memcpy(); + extern char *memset(); + #endif /* __STDC__ */ -extern int memcmp(); - -\#endif /* __memory_h__ */ -'; + extern int memcmp(); + #endif /* __memory_h__ */ + _EndOfHeader; }; @@ -283,13 +208,13 @@ fix = { replace = "/* This file was generated by fixincludes. */\n" "#ifndef _SYS_VARARGS_H\n" "#define _SYS_VARARGS_H\n\n" - + "#ifdef __STDC__\n" "#include \n" "#else\n" "#include \n" "#endif\n\n" - + "#endif /* _SYS_VARARGS_H */\n"; }; #endif @@ -303,158 +228,157 @@ fix = { fix = { hackname = AAB_svr4_replace_byteorder; #ifndef SVR5 - mach = "*-*-sysv4*"; - mach = "i[34567]86-*-sysv5*"; - mach = "i[34567]86-*-udk*"; - mach = "i[34567]86-*-solaris2.[0-4]"; - mach = "powerpcle-*-solaris2.[0-4]"; - mach = "sparc-*-solaris2.[0-4]"; + mach = "*-*-sysv4*"; + mach = "i[34567]86-*-sysv5*"; + mach = "i[34567]86-*-udk*"; + mach = "i[34567]86-*-solaris2.[0-4]"; + mach = "powerpcle-*-solaris2.[0-4]"; + mach = "sparc-*-solaris2.[0-4]"; #endif /* SVR5 */ files = sys/byteorder.h; - replace = '#ifndef _SYS_BYTEORDER_H -\#define _SYS_BYTEORDER_H + replace = <<- _EndOfHeader_ + #ifndef _SYS_BYTEORDER_H + #define _SYS_BYTEORDER_H + + /* Functions to convert `short' and `long' quantities from host byte order + to (internet) network byte order (i.e. big-endian). + + Written by Ron Guilmette (rfg@ncd.com). + + This isn't actually used by GCC. It is installed by fixinc.svr4. -/* Functions to convert `short\' and `long\' quantities from host byte order - to (internet) network byte order (i.e. big-endian). + For big-endian machines these functions are essentially no-ops. - Written by Ron Guilmette (rfg@ncd.com). + For little-endian machines, we define the functions using specialized + asm sequences in cases where doing so yields better code (e.g. i386). */ - This isn\'t actually used by GCC. It is installed by fixinc.svr4. - - For big-endian machines these functions are essentially no-ops. - - For little-endian machines, we define the functions using specialized - asm sequences in cases where doing so yields better code (e.g. i386). */ - -\#if !defined (__GNUC__) && !defined (__GNUG__) -\#error You lose! This file is only useful with GNU compilers. -\#endif - -\#ifndef __BYTE_ORDER__ -/* Byte order defines. These are as defined on UnixWare 1.1, but with - double underscores added at the front and back. */ -\#define __LITTLE_ENDIAN__ 1234 -\#define __BIG_ENDIAN__ 4321 -\#define __PDP_ENDIAN__ 3412 -\#endif - -\#ifdef __STDC__ -static __inline__ unsigned long htonl (unsigned long); -static __inline__ unsigned short htons (unsigned int); -static __inline__ unsigned long ntohl (unsigned long); -static __inline__ unsigned short ntohs (unsigned int); -\#endif /* defined (__STDC__) */ - -\#if defined (__i386__) - -\#ifndef __BYTE_ORDER__ -\#define __BYTE_ORDER__ __LITTLE_ENDIAN__ -\#endif - -/* Convert a host long to a network long. */ - -/* We must use a new-style function definition, so that this will also - be valid for C++. */ -static __inline__ unsigned long -htonl (unsigned long __arg) -{ - register unsigned long __result; - - __asm__ ("xchg%B0 %b0,%h0 - ror%L0 $16,%0 - xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); - return __result; -} - -/* Convert a host short to a network short. */ - -static __inline__ unsigned short -htons (unsigned int __arg) -{ - register unsigned short __result; - - __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); - return __result; -} - -\#elif ((defined (__i860__) && !defined (__i860_big_endian__)) \\ - || defined (__ns32k__) || defined (__vax__) \\ - || defined (__spur__) || defined (__arm__)) - -\#ifndef __BYTE_ORDER__ -\#define __BYTE_ORDER__ __LITTLE_ENDIAN__ -\#endif - -/* For other little-endian machines, using C code is just as efficient as - using assembly code. */ - -/* Convert a host long to a network long. */ - -static __inline__ unsigned long -htonl (unsigned long __arg) -{ - register unsigned long __result; - - __result = (__arg >> 24) & 0x000000ff; - __result |= (__arg >> 8) & 0x0000ff00; - __result |= (__arg << 8) & 0x00ff0000; - __result |= (__arg << 24) & 0xff000000; - return __result; -} - -/* Convert a host short to a network short. */ - -static __inline__ unsigned short -htons (unsigned int __arg) -{ - register unsigned short __result; - - __result = (__arg << 8) & 0xff00; - __result |= (__arg >> 8) & 0x00ff; - return __result; -} - -\#else /* must be a big-endian machine */ - -\#ifndef __BYTE_ORDER__ -\#define __BYTE_ORDER__ __BIG_ENDIAN__ -\#endif - -/* Convert a host long to a network long. */ - -static __inline__ unsigned long -htonl (unsigned long __arg) -{ - return __arg; -} - -/* Convert a host short to a network short. */ - -static __inline__ unsigned short -htons (unsigned int __arg) -{ - return __arg; -} - -\#endif /* big-endian */ - -/* Convert a network long to a host long. */ - -static __inline__ unsigned long -ntohl (unsigned long __arg) -{ - return htonl (__arg); -} - -/* Convert a network short to a host short. */ - -static __inline__ unsigned short -ntohs (unsigned int __arg) -{ - return htons (__arg); -} -\#endif -'; + #if !defined (__GNUC__) && !defined (__GNUG__) + #error You lose! This file is only useful with GNU compilers. + #endif + + #ifndef __BYTE_ORDER__ + /* Byte order defines. These are as defined on UnixWare 1.1, but with + double underscores added at the front and back. */ + #define __LITTLE_ENDIAN__ 1234 + #define __BIG_ENDIAN__ 4321 + #define __PDP_ENDIAN__ 3412 + #endif + + #ifdef __STDC__ + static __inline__ unsigned long htonl (unsigned long); + static __inline__ unsigned short htons (unsigned int); + static __inline__ unsigned long ntohl (unsigned long); + static __inline__ unsigned short ntohs (unsigned int); + #endif /* defined (__STDC__) */ + + #if defined (__i386__) + + #ifndef __BYTE_ORDER__ + #define __BYTE_ORDER__ __LITTLE_ENDIAN__ + #endif + + /* Convert a host long to a network long. */ + + /* We must use a new-style function definition, so that this will also + be valid for C++. */ + static __inline__ unsigned long + htonl (unsigned long __arg) + { + register unsigned long __result; + + __asm__ ("xchg%B0 %b0,%h0 + ror%L0 $16,%0 + xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); + return __result; + } + + /* Convert a host short to a network short. */ + + static __inline__ unsigned short + htons (unsigned int __arg) + { + register unsigned short __result; + + __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); + return __result; + } + + #elif (defined (__ns32k__) || defined (__vax__) || defined (__arm__)) + + #ifndef __BYTE_ORDER__ + #define __BYTE_ORDER__ __LITTLE_ENDIAN__ + #endif + + /* For other little-endian machines, using C code is just as efficient as + using assembly code. */ + + /* Convert a host long to a network long. */ + + static __inline__ unsigned long + htonl (unsigned long __arg) + { + register unsigned long __result; + + __result = (__arg >> 24) & 0x000000ff; + __result |= (__arg >> 8) & 0x0000ff00; + __result |= (__arg << 8) & 0x00ff0000; + __result |= (__arg << 24) & 0xff000000; + return __result; + } + + /* Convert a host short to a network short. */ + + static __inline__ unsigned short + htons (unsigned int __arg) + { + register unsigned short __result; + + __result = (__arg << 8) & 0xff00; + __result |= (__arg >> 8) & 0x00ff; + return __result; + } + + #else /* must be a big-endian machine */ + + #ifndef __BYTE_ORDER__ + #define __BYTE_ORDER__ __BIG_ENDIAN__ + #endif + + /* Convert a host long to a network long. */ + + static __inline__ unsigned long + htonl (unsigned long __arg) + { + return __arg; + } + + /* Convert a host short to a network short. */ + + static __inline__ unsigned short + htons (unsigned int __arg) + { + return __arg; + } + + #endif /* big-endian */ + + /* Convert a network long to a host long. */ + + static __inline__ unsigned long + ntohl (unsigned long __arg) + { + return htonl (__arg); + } + + /* Convert a network short to a host short. */ + + static __inline__ unsigned short + ntohs (unsigned int __arg) + { + return htons (__arg); + } + #endif + _EndOfHeader_; }; @@ -477,12 +401,12 @@ fix = { hackname = AAB_ultrix_limits; files = limits.h; mach = "*-*-ultrix4.3"; - replace = -'#ifndef _LIMITS_INCLUDED -\#define _LIMITS_INCLUDED -\#include -\#endif /* _LIMITS_INCLUDED */ -'; + replace = <<- _EndOfHeader_ + #ifndef _LIMITS_INCLUDED + #define _LIMITS_INCLUDED + #include + #endif /* _LIMITS_INCLUDED */ + _EndOfHeader_; }; @@ -495,12 +419,12 @@ fix = { hackname = AAB_ultrix_memory; files = memory.h; mach = "*-*-ultrix4.3"; - replace = -'#ifndef _MEMORY_INCLUDED -\#define _MEMORY_INCLUDED -\#include -\#endif /* _MEMORY_INCLUDED */ -'; + replace = <<- _EndOfHeader_ + #ifndef _MEMORY_INCLUDED + #define _MEMORY_INCLUDED + #include + #endif /* _MEMORY_INCLUDED */ + _EndOfHeader_; }; @@ -513,12 +437,12 @@ fix = { hackname = AAB_ultrix_string; files = string.h; mach = "*-*-ultrix4.3"; - replace = -'#ifndef _STRING_INCLUDED -\#define _STRING_INCLUDED -\#include -\#endif /* _STRING_INCLUDED */ -'; + replace = <<- _EndOfHeader_ + #ifndef _STRING_INCLUDED + #define _STRING_INCLUDED + #include + #endif /* _STRING_INCLUDED */ + _EndOfHeader_; }; @@ -653,58 +577,6 @@ fix = { /* - * Fix this ARM/RISCiX file where ___type is a Compiler - * hint that is specific to the Norcroft compiler. - */ -fix = { - hackname = arm_norcroft_hint; - select = "___type p_type"; - files = "X11/Intrinsic.h"; - c_fix = format; - c_fix_arg = "p_type"; - test_text = "___type p_type mumble;"; -}; - - -/* - * Fix this ARM/RISCiX file to avoid interfering - * with the use of __wchar_t in cc1plus. - */ -fix = { - hackname = arm_wchar; - files = stdlib.h; - select = "#[ \t]*define[ \t]*__wchar_t"; - - c_fix = format; - c_fix_arg = "%1_GCC_WCHAR_T"; - c_fix_arg = "(#[ \t]*(ifndef|define)[ \t]+)__wchar_t"; - - test_text = - "# ifndef \t __wchar_t /* we don't have wchar_t yet, ... */\n" - "# define __wchar_t short\n" - "# endif /* __wchar_t */"; -}; - - -/* - * This file in A/UX 3.0.x/3.1.x contains an __asm directive for c89; - * gcc doesn't understand it. - */ -fix = { - hackname = aux_asm; - files = sys/param.h; - select = "#ifndef NOINLINE"; - - c_fix = format; - c_fix_arg = "#if !defined(NOINLINE) && !defined(__GNUC__)"; - - test_text = - "#ifndef NOINLINE /* ain't got no inline, so we got it */\n" - "#endif /* NOINLINE */"; -}; - - -/* * For C++, avoid any typedef or macro definition of bool, * and use the built in type instead. * HP/UX 10.20 also has it in curses_colr/curses.h. @@ -726,6 +598,7 @@ fix = { test_text = "# define bool\t char \n"; }; + fix = { hackname = avoid_bool_type; files = curses.h; @@ -742,6 +615,7 @@ fix = { test_text = "typedef unsigned int\tbool \t; /* bool\n type */"; }; + /* * For C++, avoid any typedef definition of wchar_t, * and use the built in type instead. @@ -758,6 +632,7 @@ fix = { test_text = "typedef unsigned short\twchar_t \t; /* wchar_t\n type */"; }; + /* * Fix #defines under Alpha OSF/1: * The following files contain '#pragma extern_prefix "_FOO"' followed by @@ -988,6 +863,7 @@ fix = { "extern __DJ_wint_t x;\n"; }; + /* * Fix these Sun OS files to avoid an invalid identifier in an #ifdef. */ @@ -1004,22 +880,6 @@ fix = { /* - * fix-header doesn't fix fabs' prototype, and I have no idea why. - */ -fix = { - hackname = fix_header_breakage; - mach = "m88k-motorola-sysv3*"; - files = "math.h"; - - select = 'extern double floor\(\), ceil\(\), fmod\(\), fabs\(\);'; - c_fix = format; - c_fix_arg = - 'extern double floor(), ceil(), fmod(), fabs _PARAMS((double));'; - test_text = 'extern double floor(), ceil(), fmod(), fabs();'; -}; - - -/* * Between 8/24/1998 and 2/17/2001, FreeBSD system headers presume * neither the existence of GCC 3 nor its exact feature set yet break * (by design?) when __GNUC__ is set beyond 2. @@ -1581,67 +1441,6 @@ fix = { /* - * libm.a on m88k-motorola-sysv3 contains a stupid optimization for - * function hypot(), which returns the second argument without even - * looking at its value, if the other is 0.0. - */ -fix = { - hackname = m88k_bad_hypot_opt; - mach = "m88k-motorola-sysv3*"; - files = "math.h"; - select = "^extern double hypot\\(\\);\n"; - c_fix = format; - c_fix_arg = "%0" - "/* Workaround a stupid Motorola optimization if one\n" - " of x or y is 0.0 and the other is negative! */\n" - "#ifdef __STDC__\n" - "static __inline__ double fake_hypot (double x, double y)\n" - "#else\n" - "static __inline__ double fake_hypot (x, y)\n" - "\tdouble x, y;\n" - "#endif\n" - "{\n" - "\treturn fabs (hypot (x, y));\n" - "}\n" - "#define hypot\tfake_hypot\n"; - test_text = "extern double hypot();"; -}; - - -/* - * Fix incorrect S_IF* definitions on m88k-sysv3. - */ -fix = { - hackname = m88k_bad_s_if; - mach = "m88k-*-sysv3*"; - files = sys/stat.h; - select = "#define[ \t]+S_IS[A-Z]+\\(m\\)[ \t]+\\(m[ \t]*&"; - - c_fix = format; - c_fix_arg = '#define %1(m) (((m) & S_IFMT) == %2)'; - c_fix_arg = "#define[ \t]+(S_IS[A-Z]+)\\(m\\)[ \t]+" - "\\(m[ \t]*&[ \t]*" - "(S_IF[A-Z][A-Z][A-Z]+|0[0-9]+)" - "[ \t]*\\)"; - test_text = '#define S_ISREG(m) (m & S_IFREG) /* is regular? */'; -}; - - -/* - * Put cpp wrappers around these include files to avoid redeclaration - * errors during multiple inclusion on m88k-tektronix-sysv3. - */ -fix = { - hackname = m88k_multi_incl; - mach = "m88k-tektronix-sysv3*"; - files = "time.h"; - bypass = "#ifndef"; - c_fix = wrap; - test_text = ""; -}; - - -/* * Fix BSD machine/ansi.h to use __builtin_va_list to define _BSD_VA_LIST_. * * On NetBSD, machine is a symbolic link to an architecture specific @@ -1805,19 +1604,6 @@ fix = { "#define OPEN_MAX 20 /* Max, Max, ... */\n"; }; -/* - * fix bogus recursive stdlib.h in NEWS-OS 4.0C - */ -fix = { - hackname = news_os_recursion; - files = stdlib.h; - select = "[ \t]*#include .*"; - - c_fix = format; - c_fix_arg = "#ifdef BOGUS_RECURSION\n%0\n#endif"; - test_text = "#include "; -}; - /* * NeXT 3.2 adds const prefix to some math functions. @@ -2135,35 +1921,6 @@ fix = { test_text = "#include "; }; -/* - * Sony NEWSOS 5.0 does not support the complete ANSI C standard. - */ -#ifdef SONY -fix = { - hackname = sony_ctype; - files = ctype.h; - test = " -x /bin/sony"; - test = " ! -z \"`if /bin/sony ; then echo true ; fi`\""; - sed = "s/__ctype/_ctype/g"; -}; -#endif - - -/* - * Sony NEWSOS 5.0 does not support the complete ANSI C standard. - */ -#ifdef SONY -fix = { - hackname = sony_stdio; - files = stdio.h; - test = " -x /bin/sony"; - test = " ! -z \"`if /bin/sony ; then echo true ; fi`\""; - sed = "s/__filbuf/_filbuf/g\n" - "s/__flsbuf/_flsbuf/g\n" - "s/__iob/_iob/g"; -}; -#endif - /* * Add a `static' declaration of `getrnge' into . @@ -2684,8 +2441,8 @@ fix = { fix = { hackname = svr4_mach_defines; files = ieeefp.h; - select = "#define[ \t]*__(i386|i860|mips|sparc|m88k|m68k)[ \t]"; - sed = "/#define[ \t]*__\\(i386|i860|mips|sparc|m88k|m68k\\)[ \t]/d"; + select = "#define[ \t]*__(i386|mips|sparc|m88k|m68k)[ \t]"; + sed = "/#define[ \t]*__\\(i386|mips|sparc|m88k|m68k\\)[ \t]/d"; }; #endif Index: mkfixinc.sh =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/mkfixinc.sh,v retrieving revision 1.42 diff -u -p -r1.42 mkfixinc.sh --- mkfixinc.sh 26 Nov 2002 02:23:06 -0000 1.42 +++ mkfixinc.sh 4 Jan 2003 18:41:47 -0000 @@ -73,7 +73,6 @@ case $machine in i370-*-openedition | \ i?86-moss-msdos* | \ i?86-*-moss* | \ - i?86-*-osf1* | \ i?86-*-win32 | \ i?86-*-pe | \ i?86-*-cygwin* | \ Index: tests/base/math.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/tests/base/math.h,v retrieving revision 1.9 diff -u -p -r1.9 math.h --- tests/base/math.h 14 May 2002 00:33:14 -0000 1.9 +++ tests/base/math.h 4 Jan 2003 18:41:47 -0000 @@ -30,11 +30,6 @@ struct exception; #endif /* BROKEN_CABS_CHECK */ -#if defined( FIX_HEADER_BREAKAGE_CHECK ) -extern double floor(), ceil(), fmod(), fabs _PARAMS((double)); -#endif /* FIX_HEADER_BREAKAGE_CHECK */ - - #if defined( HPUX11_CPP_POW_INLINE_CHECK ) #endif /* HPUX11_CPP_POW_INLINE_CHECK */ @@ -58,23 +53,6 @@ extern "C" int abs(int); #if defined( ISC_FMOD_CHECK ) extern double fmod(double, double); #endif /* ISC_FMOD_CHECK */ - - -#if defined( M88K_BAD_HYPOT_OPT_CHECK ) -extern double hypot(); -/* Workaround a stupid Motorola optimization if one - of x or y is 0.0 and the other is negative! */ -#ifdef __STDC__ -static __inline__ double fake_hypot (double x, double y) -#else -static __inline__ double fake_hypot (x, y) - double x, y; -#endif -{ - return fabs (hypot (x, y)); -} -#define hypot fake_hypot -#endif /* M88K_BAD_HYPOT_OPT_CHECK */ #if defined( MATH_EXCEPTION_CHECK ) Index: tests/base/stdlib.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/tests/base/stdlib.h,v retrieving revision 1.4 diff -u -p -r1.4 stdlib.h --- tests/base/stdlib.h 5 Oct 2002 18:21:59 -0000 1.4 +++ tests/base/stdlib.h 4 Jan 2003 18:41:47 -0000 @@ -9,13 +9,6 @@ -#if defined( ARM_WCHAR_CHECK ) -# ifndef _GCC_WCHAR_T /* we don't have wchar_t yet, ... */ -# define _GCC_WCHAR_T short -# endif /* __wchar_t */ -#endif /* ARM_WCHAR_CHECK */ - - #if defined( HPUX11_ABS_CHECK ) #if !defined(_MATH_INCLUDED) || defined(__GNUG__) #endif /* HPUX11_ABS_CHECK */ @@ -26,13 +19,6 @@ extern void abort(int); extern void free(void*); extern void exit(void*); #endif /* INT_ABORT_FREE_AND_EXIT_CHECK */ - - -#if defined( NEWS_OS_RECURSION_CHECK ) -#ifdef BOGUS_RECURSION -#include -#endif -#endif /* NEWS_OS_RECURSION_CHECK */ #if defined( SVR4_GETCWD_CHECK ) Index: tests/base/time.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/tests/base/time.h,v retrieving revision 1.3 diff -u -p -r1.3 time.h --- tests/base/time.h 19 Jul 2000 14:18:30 -0000 1.3 +++ tests/base/time.h 4 Jan 2003 18:41:47 -0000 @@ -7,14 +7,6 @@ This had to be done to correct non-standard usages in the original, manufacturer supplied header file. */ -#ifndef FIXINC_M88K_MULTI_INCL_CHECK -#define FIXINC_M88K_MULTI_INCL_CHECK 1 - - - -#if defined( M88K_MULTI_INCL_CHECK ) - -#endif /* M88K_MULTI_INCL_CHECK */ #if defined( VXWORKS_NEEDS_VXTYPES_CHECK ) @@ -33,5 +25,3 @@ typedef void (*__gcc_VOIDFUNCPTR) (); #endif #define VOIDFUNCPTR __gcc_VOIDFUNCPTR #endif /* VXWORKS_TIME_CHECK */ - -#endif /* FIXINC_M88K_MULTI_INCL_CHECK */ Index: tests/base/sys/param.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/tests/base/sys/param.h,v retrieving revision 1.2 diff -u -p -r1.2 param.h --- tests/base/sys/param.h 19 Jul 2000 14:18:31 -0000 1.2 +++ tests/base/sys/param.h 4 Jan 2003 18:41:47 -0000 @@ -9,12 +9,6 @@ -#if defined( AUX_ASM_CHECK ) -#if !defined(NOINLINE) && !defined(__GNUC__) /* ain't got no inline, so we got it */ -#endif /* NOINLINE */ -#endif /* AUX_ASM_CHECK */ - - #if defined( HPUX_MAXINT_CHECK ) #ifndef MAXINT #define MAXINT 0x7FFFFFFF Index: tests/base/sys/stat.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/tests/base/sys/stat.h,v retrieving revision 1.4 diff -u -p -r1.4 stat.h --- tests/base/sys/stat.h 19 Jul 2000 14:18:31 -0000 1.4 +++ tests/base/sys/stat.h 4 Jan 2003 18:41:47 -0000 @@ -9,11 +9,6 @@ -#if defined( M88K_BAD_S_IF_CHECK ) -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) /* is regular? */ -#endif /* M88K_BAD_S_IF_CHECK */ - - #if defined( RS6000_FCHMOD_CHECK ) extern int fchmod(int, mode_t); #endif /* RS6000_FCHMOD_CHECK */ --------------CA4A0403381ADD4B87203568-- From gcc-patches-return-75020-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 19:40:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21593 invoked by alias); 4 Jan 2003 19:40:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21541 invoked from network); 4 Jan 2003 19:40:38 -0000 Received: from unknown (HELO mail7-sh.home.nl) (213.51.128.26) by 209.249.29.67 with SMTP; 4 Jan 2003 19:40:38 -0000 Received: from home.nl ([217.120.216.2]) by mail7-sh.home.nl (InterMail vM.5.01.05.09 201-253-122-126-109-20020611) with ESMTP id <20030104194025.SYFD8092.mail7-sh.home.nl@home.nl> for ; Sat, 4 Jan 2003 20:40:25 +0100 Received: by home.nl (Postfix, from userid 500) id 1614B76790; Sat, 4 Jan 2003 20:41:14 +0100 (CET) Subject: [patch] c4x target mainline To: gcc-patches@gcc.gnu.org Date: Sat, 4 Jan 2003 20:41:13 +0100 (CET) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20030104194114.1614B76790@home.nl> From: hermantenbrugge@home.nl (Herman ten Brugge) Hello, I found a problem in the c4x target on mainline. The problem is that the c4x target includes hwint.h. The recent changes to hwint.h makes the c4x target fail. The including of hwint.h was done about 3 years ago to make the c4x target TI assembler compliant. The changes in printing routines over time makes this patch obsolete. So the fix is simple. Just remove the include and the redefination of HOST_WIDE_INT_PRINT_HEX. Herman. 2003-01-04 Herman A.J. ten Brugge * c4x.h: Remove hwint.h include and HOST_WIDE_INT_PRINT_HEX redefinition. --- c4x.h.save 2003-01-04 20:06:36.000000000 +0100 +++ c4x.h 2003-01-04 20:07:23.000000000 +0100 @@ -22,8 +22,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "hwint.h" - /* RUN-TIME TARGET SPECIFICATION. */ #define C4x 1 @@ -1648,15 +1646,6 @@ fini_section () \ /* Switch into a generic section. */ #define TARGET_ASM_NAMED_SECTION c4x_asm_named_section -/* The TI assembler wants to have hex numbers this way. */ - -#undef HOST_WIDE_INT_PRINT_HEX -#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG -# define HOST_WIDE_INT_PRINT_HEX "0%lxh" -#else -# define HOST_WIDE_INT_PRINT_HEX "0%llxh" -#endif - /* Overall Framework of an Assembler File. */ /* We need to have a data section we can identify so that we can set the DP register back to a data pointer in the small memory model. From gcc-patches-return-75021-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 20:12:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2974 invoked by alias); 4 Jan 2003 20:12:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2965 invoked from network); 4 Jan 2003 20:12:48 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 4 Jan 2003 20:12:48 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h04KCY317392; Sat, 4 Jan 2003 15:12:34 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h04KCYT28686; Sat, 4 Jan 2003 15:12:34 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id PAA30250; Sat, 4 Jan 2003 15:12:34 -0500 Message-Id: <200301042012.PAA30250@makai.watson.ibm.com> To: bkorb@gnu.org cc: gcc-patches@gcc.gnu.org Subject: Re: AIX C++ fixinc In-Reply-To: Message from Bruce Korb of "Mon, 30 Dec 2002 10:40:26 PST." <3E10931A.247D1D9C@veritas.com> Date: Sat, 04 Jan 2003 15:12:34 -0500 From: David Edelsohn >>>>> Bruce Korb writes: Bruce> No, we need to fix wrap_fix. I guess no wrap fix had been used for multiple Bruce> files on a single platform before. Attached is a fix for that. :-) Bruce> Please include it with your fixes when you've tested it. It ought to work, Bruce> but I have real work to do and it would be several days before I could Bruce> get to it.... Thanks! - Bruce Would you please apply the fixfixes.c patch? It changes some of the base check results and I would rather that you check the differences. Thanks, David From gcc-patches-return-75022-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 20:51:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19687 invoked by alias); 4 Jan 2003 20:51:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19668 invoked from network); 4 Jan 2003 20:51:54 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 4 Jan 2003 20:51:54 -0000 Received: from tooth.toronto.redhat.com (tooth.toronto.redhat.com [172.16.14.29]) by touchme.toronto.redhat.com (Postfix) with ESMTP id 671DF800041 for ; Sat, 4 Jan 2003 15:51:42 -0500 (EST) Received: from tooth.toronto.redhat.com (IDENT:Qsbzj0RfUQAShudN/ChsffXjjyDW5s+G@localhost [127.0.0.1]) by tooth.toronto.redhat.com (8.12.5/8.12.5) with ESMTP id h04Kpgfo023992 for ; Sat, 4 Jan 2003 15:51:42 -0500 Received: (from vmakarov@localhost) by tooth.toronto.redhat.com (8.12.5/8.12.5/Submit) id h04KpfOo023987; Sat, 4 Jan 2003 15:51:41 -0500 Date: Sat, 4 Jan 2003 15:51:41 -0500 Message-Id: <200301042051.h04KpfOo023987@tooth.toronto.redhat.com> From: Vladimir Makarov To: gcc-patches@gcc.gnu.org Subject: [itanium-sched-branch] Fixing a bug in checking unit distributions. The following patch fixes a bug created by commiting the patch dated by Dec. 20. Vlad 2003-01-04 Vladimir Makarov * genautomata.c (form_the_same_automaton_unit_lists_from_regexp): Use continue instead of break if cycle is too big. Index: genautomata.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/genautomata.c,v retrieving revision 1.24.8.8 diff -c -p -r1.24.8.8 genautomata.c *** genautomata.c 20 Dec 2002 21:08:54 -0000 1.24.8.8 --- genautomata.c 4 Jan 2003 20:45:56 -0000 *************** process_unit_to_form_the_same_automaton_ *** 5476,5482 **** if (seq->mode == rm_sequence) { if (cycle >= REGEXP_SEQUENCE (seq)->regexps_num) ! break; allof = REGEXP_SEQUENCE (seq)->regexps [cycle]; if (allof->mode == rm_allof) { --- 5476,5482 ---- if (seq->mode == rm_sequence) { if (cycle >= REGEXP_SEQUENCE (seq)->regexps_num) ! continue; allof = REGEXP_SEQUENCE (seq)->regexps [cycle]; if (allof->mode == rm_allof) { *************** process_unit_to_form_the_same_automaton_ *** 5495,5501 **** break; } else if (cycle != 0) ! break; else if (seq->mode == rm_allof) { for (k = 0; k < REGEXP_ALLOF (seq)->regexps_num; k++) --- 5495,5501 ---- break; } else if (cycle != 0) ! continue; else if (seq->mode == rm_allof) { for (k = 0; k < REGEXP_ALLOF (seq)->regexps_num; k++) From gcc-patches-return-75023-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 20:59:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25878 invoked by alias); 4 Jan 2003 20:59:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25824 invoked from network); 4 Jan 2003 20:59:16 -0000 Received: from unknown (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by 209.249.29.67 with SMTP; 4 Jan 2003 20:59:16 -0000 Received: from hiauly1.hia.nrc.ca (localhost [127.0.0.1]) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) with ESMTP id h04Kwuot016681; Sat, 4 Jan 2003 15:58:57 -0500 (EST) Received: (from dave@localhost) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) id h04Kwt18016680; Sat, 4 Jan 2003 15:58:55 -0500 (EST) Message-Id: <200301042058.h04Kwt18016680@hiauly1.hia.nrc.ca> Subject: Re: PATCH: Re: other/9031 To: aoliva@redhat.com (Alexandre Oliva) Date: Sat, 4 Jan 2003 15:58:55 -0500 (EST) From: "John David Anglin" Cc: gcc-gnats@gcc.gnu.org, nobody@gcc.gnu.org, dave.anglin@nrc.ca, gcc-patches@gcc.gnu.org, binutils@sources.redhat.com, neroden@twcny.rr.com In-Reply-To: from "Alexandre Oliva" at Dec 28, 2002 04:15:53 am MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit > > Ok, but I wouldn't mind if you waited for Nathan's patch to go in > > before adjusting yours. If you agree, consider the updated patch > > pre-approved, but please post it, for the record. > > In fact, consider now sinclude()ing libtool.m4 and using its > AC_PROG_LD macro. I have installed the following revised version of the patch on the main. The code now checks to see if LD is set. There are some minor variable name changes and other revisions due to the fact that the code is now processed by autoconf. Tested on hppa64-hp-hpux11.11 and hppa2.0w-hp-hpux11.11. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) 2003-01-04 John David Anglin * configure.in (LD): Improve test for gcc. Try to set LD to the ld used by gcc if LD is not defined and we are not doing a Canadian Cross. * configure: Rebuilt. Index: configure.in =================================================================== RCS file: /cvsroot/gcc/gcc/configure.in,v retrieving revision 1.202 diff -u -3 -p -r1.202 configure.in --- configure.in 28 Dec 2002 17:57:14 -0000 1.202 +++ configure.in 29 Dec 2002 19:01:47 -0000 @@ -1456,12 +1456,14 @@ else YACC="\$(USUAL_YACC)" # If CC is still not set, try to get gcc. + cc_prog_is_gcc= if test -z "${CC}" ; then IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/gcc; then CC="gcc" + cc_prog_is_gcc=yes echo 'void f(){}' > conftest.c if test -z "`${CC} -g -c conftest.c 2>&1`"; then CFLAGS=${CFLAGS-"-g -O2"} @@ -1477,11 +1479,20 @@ else IFS="$save_ifs" CC=${CC-cc} else + # Determine if we are using gcc. + cat > conftest.c </dev/null 2>&1; then + cc_prog_is_gcc=yes + fi + rm -f conftest.c if test -z "${CFLAGS}"; then # Here CC is set but CFLAGS is not. Use a quick hack to use -O2 if CC # is set to a version of gcc. - case "${CC}" in - *gcc) + if test "$cc_prog_is_gcc" = yes; then echo 'void f(){}' > conftest.c if test -z "`${CC} -g -c conftest.c 2>&1`"; then CFLAGS=${CFLAGS-"-g -O2"} @@ -1491,7 +1502,25 @@ else CXXFLAGS=${CXXFLAGS-"-O2"} fi rm -f conftest* - ;; + fi + fi + fi + + # We must set the default linker to the linker used by gcc for the correct + # operation of libtool. If LD is not defined and we are using gcc, try to + # set the LD default to the ld used by gcc. + if test -z "$LD"; then + if test "$cc_prog_is_gcc" = yes; then + case $build in + *-*-mingw*) + gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;; + *) + gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;; + esac + case $gcc_prog_ld in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + LD="$gcc_prog_ld" ;; esac fi fi From gcc-patches-return-75024-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 21:22:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1624 invoked by alias); 4 Jan 2003 21:22:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1617 invoked from network); 4 Jan 2003 21:22:13 -0000 Received: from unknown (HELO mtvmime02.veritas.com) (143.127.3.10) by 209.249.29.67 with SMTP; 4 Jan 2003 21:22:13 -0000 Received: from megami (unverified) by mtvmime02.veritas.com (Content Technologies SMTPRS 4.2.10) with SMTP id ; Sat, 4 Jan 2003 13:22:53 -0800 Received: from veritas.com([172.22.12.210]) (1420 bytes) by megami via sendmail with P:esmtp/R:smart_host/T:smtp (sender: ) id for ; Sat, 4 Jan 2003 13:22:02 -0800 (PST) (Smail-3.2.0.101 1997-Dec-17 #15 built 2001-Aug-30) Message-ID: <3E17525A.534A80C3@veritas.com> Date: Sat, 04 Jan 2003 13:30:02 -0800 From: Bruce Korb Organization: Home X-Accept-Language: en MIME-Version: 1.0 To: David Edelsohn CC: bkorb@gnu.org, gcc-patches@gcc.gnu.org Subject: Re: AIX C++ fixinc References: <200301042012.PAA30250@makai.watson.ibm.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit David Edelsohn wrote: > Would you please apply the fixfixes.c patch? It changes some of > the base check results and I would rather that you check the differences. Just as well you waited for me. The fix was insufficient. Turns out that multiple wrap fixes can be applied to the same file, so the fix name must be part of the guard name, too. So, now we get fun stuff like this. Yummm: > #ifndef FIXINC_WRAP_SYS_MMAN_H_CXX_UNREADY > #define FIXINC_WRAP_SYS_MMAN_H_CXX_UNREADY 1 > > #ifdef __cplusplus > extern "C" { > #endif > > > #if defined( CXX_UNREADY_CHECK ) > extern void* malloc( size_t ); > #endif /* CXX_UNREADY_CHECK */ > #ifdef __cplusplus > } > #endif > > #endif /* FIXINC_WRAP_SYS_MMAN_H_CXX_UNREADY */ From gcc-patches-return-75025-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 22:14:34 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21482 invoked by alias); 4 Jan 2003 22:14:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21434 invoked from network); 4 Jan 2003 22:14:32 -0000 Received: from unknown (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by 209.249.29.67 with SMTP; 4 Jan 2003 22:14:32 -0000 Received: from hiauly1.hia.nrc.ca (localhost [127.0.0.1]) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) with ESMTP id h04MEJot017058; Sat, 4 Jan 2003 17:14:19 -0500 (EST) Received: (from dave@localhost) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) id h04MEIpj017057; Sat, 4 Jan 2003 17:14:18 -0500 (EST) Message-Id: <200301042214.h04MEIpj017057@hiauly1.hia.nrc.ca> Subject: Re: HP-UX 11.x patch to call C++ static constructors at dlopen() To: harri.pasanen@trema.com (Harri Pasanen) Date: Sat, 4 Jan 2003 17:14:18 -0500 (EST) From: "John David Anglin" Cc: gcc-patches@gcc.gnu.org, dje@watson.ibm.com, dave.anglin@nrc.ca In-Reply-To: <200212181801.21212.harri.pasanen@trema.com> from "Harri Pasanen" at Dec 18, 2002 12:01:21 pm MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit > This patch fixes PR 8360 > > http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p > r=8360 I have installed the enclosed patch on the main and 3.3 branch. It incorporates your patch to use LD_INIT_SWITCH and LD_FINI_SWITCH for running initializers and finalizers under 32-bit hpux11 with a much more extensive patch for 64-bit hpux11. The 64-bit patch doesn't use LD_INIT_SWITCH and LD_FINI_SWITCH as there are no switches which work with GNU ld. Instead, we use array init and fini sections. Testing exposed a lot of non conformat behavior. On the 32-bit port, the LD_INIT_SWITCH and LD_FINI_SWITCH switches are added by collect2 to the end of the link command. This results in the initializers running after any user specified initializers which is the desired behavior. However, the order of execution is opposite to that indicated in the man page for ld. Similar non conformant behavior was observed for the 64-bit port. Command line initializers with HP ld run in the opposite order to that of the 32-bit port (ie., as specified in the man page), however, the order of execution for the addresses listed in the init array section is opposite to that specified in the System V ABI. Further, HP sticks the init and fini arrays in .init and .fini, respectively. As a result, they have to use non standard attributes for these sections. This required an assembler hack and hppa64 gas users will need to update gas to the cvs head as 01/01/2002 or later. We also had to add hackery to accomodate HP's non conformant implementation of weak symbols. The modifications needed to use array initializers and finalizers with crtstuff.c are definitely a hack and the integration could be improved. However, I think that should wait until we see if HP changes their ELF implementation. The current implementation hides everthing in the backend. The patch has been tested on hppa64-hp-hpux11.X, hppa2.0w-hp-hpux11.X and hppa-unknown-linux-gnu, 3.4 and 3.3, GNU and HP as. Having working initializers on hppa64-hpux11, fixes a number of g++, v3 and objc testsuite failures. It should now be possible to use a shared libgcc on hppa64-hpux11. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) 2002-01-04 John David Anglin * config.gcc (hppa*64*-*-hpux11*): Define extra_parts. Don't use collect2. * pa-hpux11.h (LDD_SUFFIX, PARSE_LDD_OUTPUT): Undefine. (HAS_INIT_SECTION, LD_INIT_SWITCH, LD_FINI_SWITCH): Define. * pa64-hpux.h (HP_INIT_ARRAY_SECTION_ASM_OP, GNU_INIT_ARRAY_SECTION_ASM_OP, HP_FINI_ARRAY_SECTION_ASM_OP, GNU_FINI_ARRAY_SECTION_ASM_OP): Define. (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Define when not using elfos.h. (EH_FRAME_IN_DATA_SECTION): Delete define. (HAS_INIT_SECTION, LD_INIT_SWITCH, LD_FINI_SWITCH): Undefine. (STARTFILE_SPEC): Use crtbegin.o. (ENDFILE_SPEC): Use crtend.o. (INIT_SECTION_ASM_OP, FINI_SECTION_ASM_OP, CRT_CALL_STATIC_FUNCTION, SUPPORTS_INIT_PRIORITY, PA_CXA_FINALIZE_STUB, PA_INIT_FINI_HACK, PA_INIT_FRAME_DUMMY_ASM_OP, PA_JV_REGISTERCLASSES_STUB, DTOR_LIST_BEGIN): Define. * pa.c (TARGET_ASM_CONSTRUCTOR): Define. (pa_asm_out_constructor, pa_asm_out_destructor): New functions. * som.h (SUPPORTS_INIT_PRIORITY): Delete define. Index: config.gcc =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config.gcc,v retrieving revision 1.270 diff -u -3 -p -r1.270 config.gcc --- config.gcc 26 Dec 2002 18:01:22 -0000 1.270 +++ config.gcc 3 Jan 2003 19:57:04 -0000 @@ -921,7 +921,7 @@ hppa*64*-*-hpux11*) tmake_file="pa/t-pa64 pa/t-pa-hpux" xmake_file="pa/x-ada" target_cpu_default="(MASK_PA_11|MASK_PA_20|MASK_GAS)" - + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o" if test x$gnu_ld = xyes then target_cpu_default="${target_cpu_default}|MASK_GNU_LD" @@ -934,7 +934,6 @@ hppa*64*-*-hpux11*) # tmake_file="${tmake_file} pa/t-dce-thr" # fi install_headers_dir=install-headers-cpio - use_collect2=yes ;; hppa1.1-*-hpux11* | hppa2*-*-hpux11*) target_cpu_default="MASK_PA_11" Index: config/pa/pa-hpux11.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/pa/pa-hpux11.h,v retrieving revision 1.5 diff -u -3 -p -r1.5 pa-hpux11.h --- config/pa/pa-hpux11.h 22 Sep 2002 19:23:19 -0000 1.5 +++ config/pa/pa-hpux11.h 3 Jan 2003 19:57:04 -0000 @@ -117,3 +117,16 @@ Boston, MA 02111-1307, USA. */ #define SIZE_TYPE "long unsigned int" #define PTRDIFF_TYPE "long int" + +/* HP-UX 11.0 and above provides initialization and finalization function + support from linker command line. We don't need to invoke __main to run + constructors. We also don't need chatr to determine the dependencies of + dynamically linked executables and shared libraries. */ +#undef LDD_SUFFIX +#undef PARSE_LDD_OUTPUT +#undef HAS_INIT_SECTION +#define HAS_INIT_SECTION 1 +#undef LD_INIT_SWITCH +#define LD_INIT_SWITCH "+init" +#undef LD_FINI_SWITCH +#define LD_FINI_SWITCH "+fini" Index: config/pa/pa64-hpux.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/pa/pa64-hpux.h,v retrieving revision 1.20 diff -u -3 -p -r1.20 pa64-hpux.h --- config/pa/pa64-hpux.h 16 Dec 2002 18:21:43 -0000 1.20 +++ config/pa/pa64-hpux.h 3 Jan 2003 19:57:04 -0000 @@ -112,6 +112,11 @@ do { \ #define DATA_SECTION_ASM_OP "\t.data" #define BSS_SECTION_ASM_OP "\t.section\t.bss" +#define HP_INIT_ARRAY_SECTION_ASM_OP "\t.section\t.init" +#define GNU_INIT_ARRAY_SECTION_ASM_OP "\t.section\t.init_array" +#define HP_FINI_ARRAY_SECTION_ASM_OP "\t.section\t.fini" +#define GNU_FINI_ARRAY_SECTION_ASM_OP "\t.section\t.fini_array" + #undef ASM_OUTPUT_ALIGNED_COMMON #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ do { \ @@ -220,55 +225,175 @@ do { \ } while (0) #undef TEXT_SECTION_ASM_OP -#define TEXT_SECTION_ASM_OP "\t.SUBSPA $CODE$\n" +#define TEXT_SECTION_ASM_OP "\t.SUBSPA $CODE$\n" #undef READONLY_DATA_SECTION_ASM_OP -#define READONLY_DATA_SECTION_ASM_OP "\t.SUBSPA $LIT$\n" +#define READONLY_DATA_SECTION_ASM_OP "\t.SUBSPA $LIT$\n" #undef DATA_SECTION_ASM_OP -#define DATA_SECTION_ASM_OP "\t.SUBSPA $DATA$\n" +#define DATA_SECTION_ASM_OP "\t.SUBSPA $DATA$\n" #undef BSS_SECTION_ASM_OP -#define BSS_SECTION_ASM_OP "\t.SUBSPA $BSS$\n" +#define BSS_SECTION_ASM_OP "\t.SUBSPA $BSS$\n" -#endif /* USING_ELFOS_H */ +/* We provide explicit defines for CTORS_SECTION_ASM_OP and + DTORS_SECTION_ASM_OP since we don't yet have support for + named sections with the HP assembler. */ +#undef CTORS_SECTION_ASM_OP +#define CTORS_SECTION_ASM_OP "\t.SUBSPA \\.ctors,QUAD=1,ALIGN=8,ACCESS=31" +#undef DTORS_SECTION_ASM_OP +#define DTORS_SECTION_ASM_OP "\t.SUBSPA \\.dtors,QUAD=1,ALIGN=8,ACCESS=31" + +#define HP_INIT_ARRAY_SECTION_ASM_OP \ + "\t.SUBSPA \\.init,QUAD=1,ALIGN=8,ACCESS=31" +#define GNU_INIT_ARRAY_SECTION_ASM_OP \ + "\t.SUBSPA \\.init_array,QUAD=1,ALIGN=8,ACCESS=31" +#define HP_FINI_ARRAY_SECTION_ASM_OP \ + "\t.SUBSPA \\.fini,QUAD=1,ALIGN=8,ACCESS=31" +#define GNU_FINI_ARRAY_SECTION_ASM_OP \ + "\t.SUBSPA \\.fini_array,QUAD=1,ALIGN=8,ACCESS=31" -/* For the time being, we aren't using init sections. `P' relocations - are currently used for function references. However, P relocations are - treated as data references and data references are bound by dld.sl - immediately at program startup. This causes an abort due to undefined - weak symbols in crtbegin.o (e.g., __register_frame_info). Possibly - Q relocations might avoid this problem but the GNU assembler doesn't - support them. */ -#undef INIT_SECTION_ASM_OP -#undef FINI_SECTION_ASM_OP +#endif /* USING_ELFOS_H */ -#define EH_FRAME_IN_DATA_SECTION 1 +/* The following defines, used to run constructors and destructors with + the SOM linker under HP-UX 11, are not needed. */ +#undef HAS_INIT_SECTION +#undef LD_INIT_SWITCH +#undef LD_FINI_SWITCH +/* The following STARTFILE_SPEC and ENDFILE_SPEC defines provide the + magic needed to run initializers and finalizers. */ +#undef STARTFILE_SPEC +#define STARTFILE_SPEC \ + "%{!shared: %{!symbolic: crt0.o%s}} %{static:crtbeginT.o%s} \ + %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}" #undef ENDFILE_SPEC -#define ENDFILE_SPEC "" +#define ENDFILE_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s}" -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{!shared: %{!symbolic: crt0.o%s}}" +/* Since HP uses the .init and .fini sections for array initializers + and finalizers, we need different defines for INIT_SECTION_ASM_OP + and FINI_SECTION_ASM_OP. With the implementation adopted below, + the sections are not actually used. However, we still must provide + defines to select the proper code path. */ +#undef INIT_SECTION_ASM_OP +#define INIT_SECTION_ASM_OP +#undef FINI_SECTION_ASM_OP +#define FINI_SECTION_ASM_OP -/* Since we are not yet using .init and .fini sections, we need to - explicitly arrange to run the global constructors and destructors. - We could use ldd for this but it depends on LD_LIBRARY_PATH being - correctly set. So, we use the ld init and fini switches. However, - we need to support different switches for the GNU and HP linkers. - We can't check TARGET_GNU_LD in collect2, so we need a different - test. The +Accept switch is always the first switch when we are - using the HP linker (see define for LINK_SPEC). Checking for it - is a somewhat fragile as it depends on internal details of the - collect2 program but it is better than testing ld_file_name. - - FIXME: The GNU linker is broken. The -init/-fini switches don't - work and ldd can't determine the dynamic dependences of executables - linked with GNU ld. The init and fini routines are not executed - although DT_INIT and DT_FINI appear ok. As a result, defining - LD_INIT_SWITCH and LD_FINI_SWITCH causes more harm than good when - using GNU ld. However, the definitions appear to work fine with - the HP linker. */ -#if 0 -#define LD_INIT_SWITCH (strcmp ("+Accept", ld2_argv[1]) ? "-init" : "+init") -#define LD_FINI_SWITCH (strcmp ("+Accept", ld2_argv[1]) ? "-fini" : "+fini") +/* We are using array initializers and don't want calls in the INIT + and FINI sections. */ +#undef CRT_CALL_STATIC_FUNCTION +#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) + +/* The init_priority attribute is not supported with HP ld. This could be + supported if collect2 was used with LD_INIT_SWITCH. Unfortunately, this + approach doesn't work with GNU ld since HP-UX doesn't support DT_INIT, + and therefore the -init and -fini GNU ld switches. */ +#undef SUPPORTS_INIT_PRIORITY +#define SUPPORTS_INIT_PRIORITY (TARGET_GNU_LD ? 1 : 0) + +/* We use DTOR_LIST_BEGIN to carry a bunch of hacks to allow us to use + the init and fini array sections with both the HP and GNU linkers. + The linkers setup the required dynamic entries in the dynamic segment + and the dynamic linker does the calls. This approach avoids using + collect2. + + The first hack is to implement __do_global_ctors_aux in crtbegin as + it needs to be the first entry in the init array so that it is called + last. HP got the order of the init array backwards. The DT_INIT_ARRAY + is supposed to be executed in the same order as the addresses appear in + the array. DT_FINI_ARRAY is supposed to be executed in the opposite + order. + + The second hack is stubs for __cxa_finalize and _Jv_RegisterClasses. + The HP implementation of undefined weak symbols is broken. The linker + and dynamic loader both search for undefined weak symbols contrary the + generic System V ABI. An undefined weak symbol should resolve to a + value of 0 rather than causing an error. The prototypes for + __cxa_finalize and _Jv_RegisterClasses in crtstuff.c are weak when + weak is supported (GNU as), so in theory a strong define should override + the stub functions provided here. + + The final hack is a set of plabels to implement the effect of + CRT_CALL_STATIC_FUNCTION. HP-UX 11 only supports DI_INIT_ARRAY and + DT_FINI_ARRAY and they put the arrays in .init and .fini, rather than + in .init_array and .fini_array. The standard defines for .init and + .fini have the execute flag set. So, the assembler has to be hacked + to munge the standard flags for these sections to make them agree + with what the HP linker expects. With the GNU linker, we need to + used the .init_array and .fini_array sections. So, we set up for + both just in case. Once we have built the table, the linker does + the rest of the work. + + The order is significant. Placing __do_global_ctors_aux first in + the list, results in it being called last. User specified initializers, + either using the linker +init command or a plabel, run before the + initializers specified here. */ + +/* We need a __cxa_finalize stub if CRTSTUFFS_O is defined. */ +#ifdef CRTSTUFFS_O +#define PA_CXA_FINALIZE_STUB \ +extern void __cxa_finalize (void *) TARGET_ATTRIBUTE_WEAK; \ +void \ +__cxa_finalize (void *p __attribute__((unused))) {} +#else +#define PA_CXA_FINALIZE_STUB +#endif + +/* We need a _Jv_RegisterClasses stub if JCR_SECTION_NAME is defined. */ +#ifdef JCR_SECTION_NAME +#define PA_JV_REGISTERCLASSES_STUB \ +void \ +_Jv_RegisterClasses (void *p __attribute__((unused))) {} +#else +#define PA_JV_REGISTERCLASSES_STUB +#endif + +/* We need to add frame_dummy to the initializer list if USE_EH_FRAME_REGISTRY + or JCR_SECTION_NAME is defined. */ +#if defined(USE_EH_FRAME_REGISTRY) || defined(JCR_SECTION_NAME) +#define PA_INIT_FRAME_DUMMY_ASM_OP ".dword P%frame_dummy" +#else +#define PA_INIT_FRAME_DUMMY_ASM_OP "" +#endif + +#define PA_INIT_FINI_HACK \ +static void __attribute__((used)) \ +__do_global_ctors_aux (void) \ +{ \ + func_ptr *p = __CTOR_LIST__; \ + while (*(p + 1)) \ + p++; \ + for (; *p != (func_ptr) -1; p--) \ + (*p) (); \ +} \ + \ +PA_CXA_FINALIZE_STUB \ +PA_JV_REGISTERCLASSES_STUB \ + \ +asm (HP_INIT_ARRAY_SECTION_ASM_OP); \ +asm (".dword P%__do_global_ctors_aux"); \ +asm (PA_INIT_FRAME_DUMMY_ASM_OP); \ +asm (GNU_INIT_ARRAY_SECTION_ASM_OP); \ +asm (".dword P%__do_global_ctors_aux"); \ +asm (PA_INIT_FRAME_DUMMY_ASM_OP); \ +asm (HP_FINI_ARRAY_SECTION_ASM_OP); \ +asm (".dword P%__do_global_dtors_aux"); \ +asm (GNU_FINI_ARRAY_SECTION_ASM_OP); \ +asm (".dword P%__do_global_dtors_aux") + +/* The following two variants of DTOR_LIST_BEGIN are identical to those + in crtstuff.c except for the addition of the above init-fini hack. */ +#ifdef DTORS_SECTION_ASM_OP +#define DTOR_LIST_BEGIN \ +asm (DTORS_SECTION_ASM_OP); \ +STATIC func_ptr __DTOR_LIST__[1] \ + __attribute__ ((aligned(sizeof(func_ptr)))) \ + = { (func_ptr) (-1) }; \ +PA_INIT_FINI_HACK +#else +#define DTOR_LIST_BEGIN \ +STATIC func_ptr __DTOR_LIST__[1] \ + __attribute__ ((section(".dtors"), aligned(sizeof(func_ptr)))) \ + = { (func_ptr) (-1) }; \ +PA_INIT_FINI_HACK #endif /* If using HP ld do not call pxdb. Use size as a program that does nothing Index: config/pa/pa.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/pa/pa.c,v retrieving revision 1.192 diff -u -3 -p -r1.192 pa.c --- config/pa/pa.c 20 Dec 2002 23:24:39 -0000 1.192 +++ config/pa/pa.c 3 Jan 2003 19:57:05 -0000 @@ -124,6 +124,10 @@ static void pa_globalize_label PARAMS (( ATTRIBUTE_UNUSED; static void pa_asm_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree)); +#if !defined(USE_COLLECT2) +static void pa_asm_out_constructor PARAMS ((rtx, int)); +static void pa_asm_out_destructor PARAMS ((rtx, int)); +#endif static void copy_fp_args PARAMS ((rtx)) ATTRIBUTE_UNUSED; static int length_fp_args PARAMS ((rtx)) ATTRIBUTE_UNUSED; static struct deferred_plabel *get_plabel PARAMS ((const char *)) @@ -209,6 +213,13 @@ static size_t n_deferred_plabels = 0; #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall +#if !defined(USE_COLLECT2) +#undef TARGET_ASM_CONSTRUCTOR +#define TARGET_ASM_CONSTRUCTOR pa_asm_out_constructor +#undef TARGET_ASM_DESTRUCTOR +#define TARGET_ASM_DESTRUCTOR pa_asm_out_destructor +#endif + struct gcc_target targetm = TARGET_INITIALIZER; void @@ -6958,6 +6969,46 @@ fmpyaddoperands (operands) /* Passed. Operands are suitable for fmpyadd. */ return 1; } + +#if !defined(USE_COLLECT2) +static void +pa_asm_out_constructor (symbol, priority) + rtx symbol; + int priority; +{ + if (!function_label_operand (symbol, VOIDmode)) + hppa_encode_label (symbol); + +#ifdef CTORS_SECTION_ASM_OP + default_ctor_section_asm_out_constructor (symbol, priority); +#else +# ifdef TARGET_ASM_NAMED_SECTION + default_named_section_asm_out_constructor (symbol, priority); +# else + default_stabs_asm_out_constructor (symbol, priority); +# endif +#endif +} + +static void +pa_asm_out_destructor (symbol, priority) + rtx symbol; + int priority; +{ + if (!function_label_operand (symbol, VOIDmode)) + hppa_encode_label (symbol); + +#ifdef DTORS_SECTION_ASM_OP + default_dtor_section_asm_out_destructor (symbol, priority); +#else +# ifdef TARGET_ASM_NAMED_SECTION + default_named_section_asm_out_destructor (symbol, priority); +# else + default_stabs_asm_out_destructor (symbol, priority); +# endif +#endif +} +#endif /* Returns 1 if the 6 operands specified in OPERANDS are suitable for use in fmpysub instructions. */ Index: config/pa/som.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/pa/som.h,v retrieving revision 1.39 diff -u -3 -p -r1.39 som.h --- config/pa/som.h 31 Oct 2002 03:13:43 -0000 1.39 +++ config/pa/som.h 3 Jan 2003 19:57:06 -0000 @@ -362,10 +362,6 @@ do { \ /* The .align directive in the HP assembler allows up to a 32 alignment. */ #define MAX_OFILE_ALIGNMENT 32768 -/* SOM does not support the init_priority C++ attribute. */ -#undef SUPPORTS_INIT_PRIORITY -#define SUPPORTS_INIT_PRIORITY 0 - /* The SOM linker hardcodes paths into binaries. As a result, dotdots must be removed from library prefixes to prevent binaries from depending on the location of the GCC tool directory. The downside is GCC From gcc-patches-return-75026-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 22:16:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22722 invoked by alias); 4 Jan 2003 22:16:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22709 invoked from network); 4 Jan 2003 22:16:46 -0000 Received: from unknown (HELO book.moene.indiv.nluug.nl) (195.109.255.217) by 209.249.29.67 with SMTP; 4 Jan 2003 22:16:46 -0000 Received: from local ([127.0.0.1] helo=moene.indiv.nluug.nl) by book.moene.indiv.nluug.nl with esmtp (Exim 3.36 #1 (Debian)) id 18Uwim-000054-00 for ; Sat, 04 Jan 2003 23:24:48 +0100 Message-ID: <3E175F30.1020809@moene.indiv.nluug.nl> Date: Sat, 04 Jan 2003 23:24:48 +0100 From: Toon Moene Organization: Moene Computational Physics, Maartensdijk, The Netherlands User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020622 Debian/1.0.0-0.woody.1 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: Fix for PR Fortran/9038 applied. Content-Type: multipart/mixed; boundary="------------090108030001090700010704" This is a multi-part message in MIME format. --------------090108030001090700010704 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit L.S., I applied the attached patch, which fixes Fortran PR 9038. Input by Steven Bosscher and Paul Brook lead to this patch, which is unequal to either of them. Bootstrapped (C and Fortran only), checked (Fortran), and make dvi'd on powerpc-unknown-linux-gnu (Debian testing as of three weeks ago). I plan to apply this patch to the 3.3 branch too, as it fixes a regression. -- Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290 Saturnushof 14, 3738 XG Maartensdijk, The Netherlands Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction) --------------090108030001090700010704 Content-Type: text/plain; name="fixed.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fixed.patch" 2003-01-04 Toon Moene PR Fortran/9038 * lang-specs.h: Remove -f options before preprocessing. * news.texi: Document fixing of PR Fortran/9038. *** lang-specs.h.orig Mon Dec 16 19:37:55 2002 --- lang-specs.h Sat Jan 4 21:29:28 2003 *************** the Free Software Foundation, 59 Temple *** 30,34 **** {".FPP", "@f77-cpp-input", 0}, {"@f77-cpp-input", ! "cc1 -E -traditional-cpp -D_LANGUAGE_FORTRAN %(cpp_options) \ %{E|M|MM:%(cpp_debug_options)}\ %{!M:%{!MM:%{!E: %|.f |\n\ --- 30,34 ---- {".FPP", "@f77-cpp-input", 0}, {"@f77-cpp-input", ! "cc1 -E -traditional-cpp -D_LANGUAGE_FORTRAN % NaN instead of zero + @item 9038 + -ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown + register name line-length-none @end table @item --------------090108030001090700010704-- From gcc-patches-return-75027-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 00:38:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30417 invoked by alias); 5 Jan 2003 00:38:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30391 invoked from network); 5 Jan 2003 00:38:34 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 5 Jan 2003 00:38:34 -0000 Received: from roscoe.constant.com (tooth.toronto.redhat.com [172.16.14.29]) by touchme.toronto.redhat.com (Postfix) with SMTP id 3E191800041; Sat, 4 Jan 2003 19:38:22 -0500 (EST) Date: Sat, 4 Jan 2003 18:36:32 -0600 From: Benjamin Kosnik To: "Kaveh R. Ghazi" Cc: gdr@integrable-solutions.net, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Message-Id: <20030104183632.51820821.bkoz@redhat.com> In-Reply-To: <200212261708.MAA10791@caip.rutgers.edu> References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit >2002-12-25 Kaveh R. Ghazi > > * testsuite/27_io/istream_extractor_arith.cc (test12): Move to ... > * testsuite/27_io/istream_extractor_arith2.cc: ... here, new file. I think I'd rather the subdirectory approach, on reflection. Thus: testsuite/27_io/istream_extractor_arith and testsuite/27_io/istream_extractor_arith/01.cc testsuite/27_io/istream_extractor_arith/02.cc testsuite/27_io/istream_extractor_arith/03.cc ... testsuite/27_io/istream_extractor_arith/12.cc I realize this contradicts what I'd said before. Sorry for the confusion. I'd like to try splitting tests out into separate files. This seems like a good place to try this idea out. -benjamin From gcc-patches-return-75028-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 01:09:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7855 invoked by alias); 5 Jan 2003 01:09:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7731 invoked from network); 5 Jan 2003 01:09:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 5 Jan 2003 01:09:18 -0000 Received: from fleche.redhat.com (tz0182.peakpeak.com [207.174.69.182]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA02686; Sat, 4 Jan 2003 18:09:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BCD3D4F8073; Sat, 4 Jan 2003 18:12:12 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: FYI: gcj 3.3 status update From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Sign my PETITION. Date: 04 Jan 2003 18:12:12 -0700 Message-ID: <87of6wh02b.fsf@fleche.redhat.com> Lines: 45 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This is a small update to the gcj 3.3 status page. Tom Index: ChangeLog from Tom Tromey * gcj-3.3-status.html: Andreas Tobler handles Darwin; Jeff Sturm handles Solaris 8 and alpha linux. Index: gcj-3.3-status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/gcj-3.3-status.html,v retrieving revision 1.5 diff -u -r1.5 gcj-3.3-status.html --- gcj-3.3-status.html 30 Dec 2002 22:00:29 -0000 1.5 +++ gcj-3.3-status.html 5 Jan 2003 01:08:47 -0000 @@ -39,7 +39,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -89,7 +89,7 @@ - + From gcc-patches-return-75029-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 01:18:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9301 invoked by alias); 5 Jan 2003 01:18:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9286 invoked from network); 5 Jan 2003 01:18:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 5 Jan 2003 01:18:04 -0000 Received: from fleche.redhat.com (tz0182.peakpeak.com [207.174.69.182]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA03863; Sat, 4 Jan 2003 18:17:51 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C3E384F8073; Sat, 4 Jan 2003 18:21:02 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Why was I BORN? Date: 04 Jan 2003 18:21:02 -0700 Message-ID: <87fzs8gznl.fsf@fleche.redhat.com> Lines: 58 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. There's been a little classpath merging lately. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.60 diff -u -r1.60 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 2 Jan 2003 00:20:56 -0000 1.60 +++ libgcj-classpath-compare.html 5 Jan 2003 01:15:07 -0000 @@ -8,7 +8,7 @@

    This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-01-01. +2003-01-04. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -18,7 +18,6 @@

    Class libgcj Classpath Merge Status
    java.awt.Adjustable Yes Yes Diff
    java.awt.AlphaComposite Yes Yes Diff
    java.awt.BasicStroke Yes Yes Diff
    java.awt.BufferCapabilities Yes Yes Diff
    java.awt.Button Yes Yes Diff
    java.awt.CheckboxMenuItem Yes Yes Diff
    java.awt.Choice Yes Yes Diff
    java.awt.color.CMMException Yes Yes Diff
    java.awt.color.ColorSpace Yes Yes Diff
    java.awt.color.ICC_Profile Yes Yes Diff
    java.awt.color.ProfileDataException Yes Yes Diff
    java.awt.Container Yes Yes Diff
    java.awt.Cursor Yes Yes Diff
    java.awt.datatransfer.Clipboard Yes Yes Diff
    java.awt.datatransfer.DataFlavor Yes Yes Diff
    java.awt.datatransfer.FlavorMap Yes Yes Diff
    java.awt.datatransfer.SystemFlavorMap Yes Yes Diff
    java.awt.dnd.DragGestureEvent Yes Yes Diff
    java.awt.dnd.DragGestureRecognizer Yes Yes Diff
    java.awt.dnd.DragSource Yes Yes Diff
    java.awt.dnd.DropTarget Yes Yes Diff
    java.awt.EventQueue Yes Yes Diff
    java.awt.event.WindowEvent Yes Yes Diff
    java.awt.FileDialog Yes Yes Diff
    java.awt.geom.PathIterator Yes Yes Diff
    java.awt.Graphics2D Yes Yes Diff
    java.awt.im.InputMethodHighlight Yes Yes Diff
    java.awt.Label Yes Yes Diff
    java.awt.List Yes Yes Diff
    java.awt.MenuBar Yes Yes Diff
    java.awt.MenuComponent Yes Yes Diff
    java.awt.Menu Yes Yes Diff
    java.awt.PopupMenu Yes Yes Diff
    java.awt.Scrollbar Yes Yes Diff
    java.awt.ScrollPane Yes Yes Diff
    java.awt.TextArea Yes Yes Diff
    java.awt.TextField Yes Yes Diff
    java.awt.Toolkit Yes Yes Diff
    java.awt.Transparency Yes Yes Diff
    java.io.DataOutputStream Yes Yes No
    java.io.FileDescriptor Yes Yes No
    java.io.FileInputStream Yes Yes No
    java.io.ObjectStreamClass Yes Yes Diff
    java.io.ObjectStreamField Yes Yes Diff
    java.io.OutputStreamWriter Yes Yes No
    java.io.PipedOutputStream Yes Yes Diff
    java.io.PipedWriter Yes Yes Diff
    java.io.PrintStream Yes Yes No
    java.io.RandomAccessFile Yes Yes No
    java.lang.Character Yes Yes Diff
    java.nio.LongBuffer Yes Yes Diff
    java.nio.MappedByteBuffer Yes Yes Diff
    java.nio.ShortBuffer Yes Yes Diff
    java.rmi.server.RMIClassLoader Yes Yes Diff
    java.rmi.server.RMIClassLoaderSpi No Yes No
    java.text.CollationElementIterator Yes Yes No
    java.text.CollationKey Yes Yes No
    java.text.Collator Yes Yes Diff
    +January 3, 2003 + +Jeff Sturm implemented libffi closures for SPARC so that libgcj's +bytecode interpreter is now available on SPARC Solaris hosts. +
    January 1, 2003 The January 2003 issue of Linux Journal contains the article From gcc-patches-return-74998-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 04:18:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16080 invoked by alias); 4 Jan 2003 04:18:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16073 invoked from network); 4 Jan 2003 04:18:46 -0000 Received: from unknown (HELO mail.cdt.org) (206.112.85.61) by 209.249.29.67 with SMTP; 4 Jan 2003 04:18:46 -0000 Received: from dberlin.org (h-69-3-5-6.MCLNVA23.covad.net [69.3.5.6]) by mail.cdt.org (Postfix) with ESMTP id BAEFD4900D5; Fri, 3 Jan 2003 23:14:18 -0500 (EST) Received: from [192.168.1.102] (account dberlin HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.0.3) with ESMTP-TLS id 2084865; Fri, 03 Jan 2003 23:18:32 -0500 Date: Fri, 3 Jan 2003 23:18:32 -0500 Subject: Re: Ping! [PATCH]: Pool allocate et_forest structures Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: gcc-patches@gcc.gnu.org To: Jan Hubicka From: Daniel Berlin In-Reply-To: <20030104002349.GI3573@kam.mff.cuni.cz> Message-Id: <95C788AC-1F9B-11D7-8A0D-000393575BCC@dberlin.org> Content-Transfer-Encoding: 7bit On Friday, January 3, 2003, at 07:23 PM, Jan Hubicka wrote: >> With the pool, we guarantee at least x objects are contiguous, where x >> is set by whoever creates the pool (you can choose the number of >> objects it allocates at a time). This is because we allocate x of them >> at a time. We don't do this on the obstack, so whether we get >> contiguous objects depends on allocation order and how many we end up >> freeing/needing, *plus*, in the case of bb's and edges, whether >> anything else got allocated on the flow_obstack in the meantime. It's > I tought there is nothing else on flow_obstack, but I guess regsets and > similar stuff is there too, that may be the main reason. Possibly. I never tried to figure out what *was* on the flow obstack, it was easier to just move things off it. > Beside that you do different management of the free entries in the pool > (so they are gain allocated in linear order and not in the order they > were freed)? >> essentially pot luck, and it doesn't turn out good as you get large >> numbers of bb's. >> The things we don't want to cache miss on are RTL, trees, bb's, and >> edges. We are always manipulating these things. >> >> You could of course, make the allocations contiguous by dedicating >> it's >> own obstack to bb's, allocating a bunch of bb's at a time, and just >> throwing the rest on the free list. However, you could just instead >> reuse the code i've written that nicely does this, all abstracted and >> easily usable. Otherwise, you'd have to do the same thing for edges, > I am not saying that the patch is bad idea (I like it just because it > makes things cleaner), but I was just surprised to see the improvement, > as I originally tought the algorithm behaves basically equally to > flow_obstack scheme... I would have thought so too, but the timings and numbers tell a different tale. And the only practical effect is to reduce cache misses (according to vtune), so it's not like it's now optimizing some function better or something. > > Honza >> et_forest things, bb's, etc. >> >> As for performance, the numbers don't lie. >> VTune tells me the basic block/edge pool allocation patch knocks the >> FOR_BB_REVERSE and the "(find_if_edge, the for (cur_edge = >> else_bb->pred))" out of the top of cache misses, and improves runtime >> on large numbers of bb's. >> >> >> >>> Honza From gcc-patches-return-74999-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 07:20:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24720 invoked by alias); 4 Jan 2003 07:20:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24695 invoked from network); 4 Jan 2003 07:20:13 -0000 Received: from unknown (HELO smtp0.euronet.nl) (194.134.35.141) by 209.249.29.67 with SMTP; 4 Jan 2003 07:20:13 -0000 Received: from koffie.nl (i0644.vwr.wanadoo.nl [194.134.210.135]) by smtp0.euronet.nl (Postfix) with ESMTP id D3F9924651; Sat, 4 Jan 2003 08:19:56 +0100 (MET) Message-ID: <3E1687E1.D23E33F2@koffie.nl> Date: Sat, 04 Jan 2003 08:06:10 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Aldy Hernandez Cc: gcc-patches@gcc.gnu.org Subject: [altivec] tidy up assembler code References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit This just removes some unneeded/unwanted spaces from output templates. 2002-12-29 Segher Boessenkool * config/rs6000/altivec.md: Remove spaces from assembler instruction argument lists. *** ../../gcc-clean/gcc/config/rs6000/altivec.md Mon Jul 29 23:05:23 2002 --- ./config/rs6000/altivec.md Sat Dec 28 19:03:45 2002 *************** *** 520,526 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 65))] "TARGET_ALTIVEC" ! "vmsumubm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsummbm" --- 520,526 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 65))] "TARGET_ALTIVEC" ! "vmsumubm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsummbm" *************** *** 529,535 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 66))] "TARGET_ALTIVEC" ! "vmsumubm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhm" --- 529,535 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 66))] "TARGET_ALTIVEC" ! "vmsumubm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhm" *************** *** 538,544 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 67))] "TARGET_ALTIVEC" ! "vmsumuhm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshm" --- 538,544 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 67))] "TARGET_ALTIVEC" ! "vmsumuhm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshm" *************** *** 547,553 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 68))] "TARGET_ALTIVEC" ! "vmsumshm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhs" --- 547,553 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 68))] "TARGET_ALTIVEC" ! "vmsumshm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhs" *************** *** 557,563 **** (match_operand:V4SI 3 "register_operand" "v")] 69)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumuhs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshs" --- 557,563 ---- (match_operand:V4SI 3 "register_operand" "v")] 69)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumuhs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshs" *************** *** 567,573 **** (match_operand:V4SI 3 "register_operand" "v")] 70)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumshs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "umaxv16qi3" --- 567,573 ---- (match_operand:V4SI 3 "register_operand" "v")] 70)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumshs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "umaxv16qi3" *************** *** 633,639 **** (match_operand:V8HI 3 "register_operand" "v")] 71)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhaddshs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmhraddshs" [(set (match_operand:V8HI 0 "register_operand" "=v") --- 633,639 ---- (match_operand:V8HI 3 "register_operand" "v")] 71)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhaddshs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmhraddshs" [(set (match_operand:V8HI 0 "register_operand" "=v") *************** *** 642,648 **** (match_operand:V8HI 3 "register_operand" "v")] 72)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhraddshs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmladduhm" [(set (match_operand:V8HI 0 "register_operand" "=v") --- 642,648 ---- (match_operand:V8HI 3 "register_operand" "v")] 72)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhraddshs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmladduhm" [(set (match_operand:V8HI 0 "register_operand" "=v") *************** *** 650,656 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:V8HI 3 "register_operand" "v")] 73))] "TARGET_ALTIVEC" ! "vmladduhm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmrghb" --- 650,656 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:V8HI 3 "register_operand" "v")] 73))] "TARGET_ALTIVEC" ! "vmladduhm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmrghb" *************** *** 1298,1304 **** [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")] 139))] "TARGET_ALTIVEC" ! "vspltisb %0, %1" [(set_attr "type" "vecsimple")]) --- 1298,1304 ---- [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")] 139))] "TARGET_ALTIVEC" ! "vspltisb %0,%1" [(set_attr "type" "vecsimple")]) *************** *** 1306,1333 **** [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")] 140))] "TARGET_ALTIVEC" ! "vspltish %0, %1" [(set_attr "type" "vecsimple")]) (define_insn "altivec_vspltisw" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")] 141))] "TARGET_ALTIVEC" ! "vspltisw %0, %1" [(set_attr "type" "vecsimple")]) (define_insn "" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:QI 1 "immediate_operand" "i")] 142))] "TARGET_ALTIVEC" ! "vspltisw %0, %1" [(set_attr "type" "vecsimple")]) (define_insn "ftruncv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=v") (fix:V4SF (match_operand:V4SF 1 "register_operand" "v")))] "TARGET_ALTIVEC" ! "vrfiz %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vperm_4si" --- 1306,1333 ---- [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")] 140))] "TARGET_ALTIVEC" ! "vspltish %0,%1" [(set_attr "type" "vecsimple")]) (define_insn "altivec_vspltisw" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")] 141))] "TARGET_ALTIVEC" ! "vspltisw %0,%1" [(set_attr "type" "vecsimple")]) (define_insn "" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:QI 1 "immediate_operand" "i")] 142))] "TARGET_ALTIVEC" ! "vspltisw %0,%1" [(set_attr "type" "vecsimple")]) (define_insn "ftruncv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=v") (fix:V4SF (match_operand:V4SF 1 "register_operand" "v")))] "TARGET_ALTIVEC" ! "vrfiz %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vperm_4si" *************** *** 1370,1390 **** [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 148))] "TARGET_ALTIVEC" ! "vrfip %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfin" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 149))] "TARGET_ALTIVEC" ! "vrfin %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfim" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 150))] "TARGET_ALTIVEC" ! "vrfim %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfux" --- 1370,1390 ---- [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 148))] "TARGET_ALTIVEC" ! "vrfip %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfin" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 149))] "TARGET_ALTIVEC" ! "vrfin %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfim" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 150))] "TARGET_ALTIVEC" ! "vrfim %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfux" *************** *** 1392,1398 **** (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 151))] "TARGET_ALTIVEC" ! "vcfux %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfsx" --- 1392,1398 ---- (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 151))] "TARGET_ALTIVEC" ! "vcfux %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfsx" *************** *** 1400,1406 **** (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 152))] "TARGET_ALTIVEC" ! "vcfsx %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctuxs" --- 1400,1406 ---- (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 152))] "TARGET_ALTIVEC" ! "vcfsx %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctuxs" *************** *** 1409,1415 **** (match_operand:QI 2 "immediate_operand" "i")] 153)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctuxs %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctsxs" --- 1409,1415 ---- (match_operand:QI 2 "immediate_operand" "i")] 153)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctuxs %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctsxs" *************** *** 1418,1452 **** (match_operand:QI 2 "immediate_operand" "i")] 154)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctsxs %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vlogefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 155))] "TARGET_ALTIVEC" ! "vlogefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vexptefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 156))] "TARGET_ALTIVEC" ! "vexptefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrsqrtefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 157))] "TARGET_ALTIVEC" ! "vrsqrtefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 158))] "TARGET_ALTIVEC" ! "vrefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vsel_4si" --- 1418,1452 ---- (match_operand:QI 2 "immediate_operand" "i")] 154)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctsxs %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vlogefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 155))] "TARGET_ALTIVEC" ! "vlogefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vexptefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 156))] "TARGET_ALTIVEC" ! "vexptefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrsqrtefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 157))] "TARGET_ALTIVEC" ! "vrsqrtefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 158))] "TARGET_ALTIVEC" ! "vrefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vsel_4si" *************** *** 1491,1497 **** (match_operand:V4SI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 163))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_4sf" --- 1491,1497 ---- (match_operand:V4SI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 163))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_4sf" *************** *** 1500,1506 **** (match_operand:V4SF 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 164))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_8hi" --- 1500,1506 ---- (match_operand:V4SF 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 164))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_8hi" *************** *** 1509,1515 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 165))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_16qi" --- 1509,1515 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 165))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_16qi" *************** *** 1518,1566 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 166))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 167))] "TARGET_ALTIVEC" ! "vupkhsb %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 168))] "TARGET_ALTIVEC" ! "vupkhpx %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 169))] "TARGET_ALTIVEC" ! "vupkhsh %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 170))] "TARGET_ALTIVEC" ! "vupklsb %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 171))] "TARGET_ALTIVEC" ! "vupklpx %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 172))] "TARGET_ALTIVEC" ! "vupklsh %0, %1" [(set_attr "type" "vecperm")]) ;; AltiVec predicates. --- 1518,1566 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 166))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 167))] "TARGET_ALTIVEC" ! "vupkhsb %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 168))] "TARGET_ALTIVEC" ! "vupkhpx %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 169))] "TARGET_ALTIVEC" ! "vupkhsh %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 170))] "TARGET_ALTIVEC" ! "vupklsb %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 171))] "TARGET_ALTIVEC" ! "vupklpx %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 172))] "TARGET_ALTIVEC" ! "vupklsh %0,%1" [(set_attr "type" "vecperm")]) ;; AltiVec predicates. *************** *** 1863,1869 **** (clobber (match_scratch:V4SF 2 "=v")) (clobber (match_scratch:V4SF 3 "=v"))] "TARGET_ALTIVEC" ! "vspltisw %2, -1\;vslw %3,%2,%2\;vandc %0,%1,%3" [(set_attr "type" "altivec") (set_attr "length" "12")]) --- 1863,1869 ---- (clobber (match_scratch:V4SF 2 "=v")) (clobber (match_scratch:V4SF 3 "=v"))] "TARGET_ALTIVEC" ! "vspltisw %2,-1\;vslw %3,%2,%2\;vandc %0,%1,%3" [(set_attr "type" "altivec") (set_attr "length" "12")]) From gcc-patches-return-75001-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 07:20:20 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24792 invoked by alias); 4 Jan 2003 07:20:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24763 invoked from network); 4 Jan 2003 07:20:18 -0000 Received: from unknown (HELO smtp0.euronet.nl) (194.134.35.141) by 209.249.29.67 with SMTP; 4 Jan 2003 07:20:18 -0000 Received: from koffie.nl (i0644.vwr.wanadoo.nl [194.134.210.135]) by smtp0.euronet.nl (Postfix) with ESMTP id 04C2C24678; Sat, 4 Jan 2003 08:20:05 +0100 (MET) Message-ID: <3E168ABF.2E31E13C@koffie.nl> Date: Sat, 04 Jan 2003 08:18:23 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Aldy Hernandez Cc: gcc-patches@gcc.gnu.org Subject: [altivec] patch for gcc.dg/altivec-5.c References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit With this patch, the compiler doesn't ICE anymore, and generates valid output. It still does a lwz from a non-aligned address though, but I think that's unrelated: that vector is passed on the stack, so GCC will have to handle it somehow. 2002-12-29 Segher Boessenkool * config/rs6000/rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): Fix gcc.dg/altivec-5.c, by accepting reg+offset addressing until reload phase. *** ../../gcc-clean/gcc/config/rs6000/rs6000.h Fri Dec 27 03:21:40 2002 --- ./config/rs6000/rs6000.h Sun Dec 29 04:43:53 2002 *************** typedef struct rs6000_args *** 2065,2072 **** && GET_CODE (XEXP (X, 0)) == REG \ && INT_REG_OK_FOR_BASE_P (XEXP (X, 0), (STRICT)) \ && LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 0) \ ! && (! ALTIVEC_VECTOR_MODE (MODE) \ ! || (GET_CODE (XEXP (X,1)) == CONST_INT && INTVAL (XEXP (X,1)) == 0)) \ && (! SPE_VECTOR_MODE (MODE) \ || (GET_CODE (XEXP (X, 1)) == CONST_INT \ && SPE_CONST_OFFSET_OK (INTVAL (XEXP (X, 1))))) \ --- 2065,2073 ---- && GET_CODE (XEXP (X, 0)) == REG \ && INT_REG_OK_FOR_BASE_P (XEXP (X, 0), (STRICT)) \ && LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 0) \ ! && (! ALTIVEC_VECTOR_MODE (MODE) \ ! || (GET_CODE (XEXP (X,1)) == CONST_INT \ ! && (! STRICT || INTVAL (XEXP (X,1)) == 0))) \ && (! SPE_VECTOR_MODE (MODE) \ || (GET_CODE (XEXP (X, 1)) == CONST_INT \ && SPE_CONST_OFFSET_OK (INTVAL (XEXP (X, 1))))) \ From gcc-patches-return-75000-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 07:20:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24745 invoked by alias); 4 Jan 2003 07:20:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24721 invoked from network); 4 Jan 2003 07:20:16 -0000 Received: from unknown (HELO smtp0.euronet.nl) (194.134.35.141) by 209.249.29.67 with SMTP; 4 Jan 2003 07:20:16 -0000 Received: from koffie.nl (i0644.vwr.wanadoo.nl [194.134.210.135]) by smtp0.euronet.nl (Postfix) with ESMTP id 7998D24618; Sat, 4 Jan 2003 08:20:02 +0100 (MET) Message-ID: <3E16898E.F681C63E@koffie.nl> Date: Sat, 04 Jan 2003 08:13:19 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Aldy Hernandez Cc: gcc-patches@gcc.gnu.org Subject: [altivec] fix crashes when using -dXXX References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit vscr and the spe registers were missing from some tables; this causes randomish crashes (and garbage in output) when using -da or the likes. This happens since a few months already at least, so maybe apply to the 3.3/3.2 branches too? I also tidied up these tables. 2002-12-29 Segher Boessenkool * config/rs6000/rs6000.c (rs6000_reg_names): Add missing registers. (alt_reg_names): Ditto, fix formatting. * config/rs6000/rs6000.h (DEBUG_REGISTER_NAMES): Fix formatting. *** ../../gcc-clean/gcc/config/rs6000/rs6000.c Fri Dec 27 03:21:14 2002 --- ./config/rs6000/rs6000.c Sun Dec 29 04:32:06 2002 *************** char rs6000_reg_names[][8] = *** 284,290 **** "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", ! "vrsave" }; #ifdef TARGET_REGNAMES --- 284,292 ---- "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", ! "vrsave", "vscr", ! /* SPE registers. */ ! "spe_acc", "spefscr" }; #ifdef TARGET_REGNAMES *************** static const char alt_reg_names[][8] = *** 301,312 **** "mq", "lr", "ctr", "ap", "%cr0", "%cr1", "%cr2", "%cr3", "%cr4", "%cr5", "%cr6", "%cr7", "xer", ! /* AltiVec registers. */ "%v0", "%v1", "%v2", "%v3", "%v4", "%v5", "%v6", "%v7", ! "%v8", "%v9", "%v10", "%v11", "%v12", "%v13", "%v14", "%v15", ! "%v16", "%v17", "%v18", "%v19", "%v20", "%v21", "%v22", "%v23", ! "%v24", "%v25", "%v26", "%v27", "%v28", "%v29", "%v30", "%v31", ! "vrsave" }; #endif --- 303,316 ---- "mq", "lr", "ctr", "ap", "%cr0", "%cr1", "%cr2", "%cr3", "%cr4", "%cr5", "%cr6", "%cr7", "xer", ! /* AltiVec registers. */ "%v0", "%v1", "%v2", "%v3", "%v4", "%v5", "%v6", "%v7", ! "%v8", "%v9", "%v10", "%v11", "%v12", "%v13", "%v14", "%v15", ! "%v16", "%v17", "%v18", "%v19", "%v20", "%v21", "%v22", "%v23", ! "%v24", "%v25", "%v26", "%v27", "%v28", "%v29", "%v30", "%v31", ! "vrsave", "vscr", ! /* SPE registers. */ ! "spe_acc", "spefscr" }; #endif *** ../../gcc-clean/gcc/config/rs6000/rs6000.h Fri Dec 27 03:21:40 2002 --- ./config/rs6000/rs6000.h Sun Dec 29 04:43:53 2002 *************** extern char rs6000_reg_names[][8]; /* re *** 2723,2730 **** #define DEBUG_REGISTER_NAMES \ { \ ! "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ ! "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \ "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ --- 2723,2730 ---- #define DEBUG_REGISTER_NAMES \ { \ ! "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ ! "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \ "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ *************** extern char rs6000_reg_names[][8]; /* re *** 2733,2745 **** "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ "mq", "lr", "ctr", "ap", \ "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ ! "xer", \ "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \ "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \ "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \ "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \ ! "vrsave", "vscr" \ ! , "spe_acc", "spefscr" \ } /* Table of additional register names to use in user input. */ --- 2733,2745 ---- "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ "mq", "lr", "ctr", "ap", \ "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ ! "xer", \ "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \ "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \ "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \ "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \ ! "vrsave", "vscr", \ ! "spe_acc", "spefscr" \ } /* Table of additional register names to use in user input. */ From gcc-patches-return-75002-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 08:17:46 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2972 invoked by alias); 4 Jan 2003 08:17:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2956 invoked from network); 4 Jan 2003 08:17:44 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 209.249.29.67 with SMTP; 4 Jan 2003 08:17:44 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3DEE86F7000ECEB3 for gcc-patches@gcc.gnu.org; Sat, 4 Jan 2003 09:17:32 +0100 Message-ID: <3E16989B.2000507@pop.agri.ch> Date: Sat, 04 Jan 2003 09:17:31 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gcc-patches Subject: darwin and posix threads ? patch ping? Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit What about this patch, any news on it? http://gcc.gnu.org/ml/gcc-patches/2002-09/msg00956.html Thanks, Andreas From gcc-patches-return-75003-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 09:28:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9095 invoked by alias); 4 Jan 2003 09:28:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9088 invoked from network); 4 Jan 2003 09:28:08 -0000 Received: from unknown (HELO book.moene.indiv.nluug.nl) (195.109.255.217) by 209.249.29.67 with SMTP; 4 Jan 2003 09:28:08 -0000 Received: from local ([127.0.0.1] helo=moene.indiv.nluug.nl) by book.moene.indiv.nluug.nl with esmtp (Exim 3.36 #1 (Debian)) id 18Uki8-0006Zb-00; Sat, 04 Jan 2003 10:35:20 +0100 Message-ID: <3E16AAD7.1080809@moene.indiv.nluug.nl> Date: Sat, 04 Jan 2003 10:35:19 +0100 From: Toon Moene Organization: Moene Computational Physics, Maartensdijk, The Netherlands User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020622 Debian/1.0.0-0.woody.1 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org CC: bdavis11@directvinternet.com Subject: [3.3 branch, Fortran, committed] was: [Trunk, Fortran, committed] Patch to enable use of any kind integer in case statements. References: <3E160B0A.9030906@moene.indiv.nluug.nl> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Toon Moene wrote: > I committed the attached patch after bootstrap, check (C and Fortran > only) on powerpc-unknown-linux-gnu (Debian testing as of three weeks ago). > > It allows use of INTEGER*{1,2,8} in CASE statements and issues a warning > when the case labels exceed the range of the KIND. And ditto for the 3.3 branch (it's a bug that this wasn't supported). -- Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290 Saturnushof 14, 3738 XG Maartensdijk, The Netherlands Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction) From gcc-patches-return-75004-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 10:53:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13184 invoked by alias); 4 Jan 2003 10:53:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13170 invoked from network); 4 Jan 2003 10:53:37 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 209.249.29.67 with SMTP; 4 Jan 2003 10:53:37 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3DEE86F7000ED910; Sat, 4 Jan 2003 11:53:23 +0100 Message-ID: <3E16BD22.4090905@pop.agri.ch> Date: Sat, 04 Jan 2003 11:53:22 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jeff Sturm CC: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libffi] closures for sparc References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jeff Sturm wrote: > Index: src/ffitest.c > =================================================================== > RCS file: /cvs/gcc/gcc/libffi/src/ffitest.c,v > retrieving revision 1.9 > diff -u -p -r1.9 ffitest.c > --- src/ffitest.c 6 Dec 2002 01:16:45 -0000 1.9 > +++ src/ffitest.c 28 Dec 2002 16:44:23 -0000 > @@ -1044,7 +1044,9 @@ int main(/*@unused@*/ int argc, /*@unuse > # if FFI_CLOSURES > /* A simple closure test */ > { > - ffi_closure cl; > + /* The closure must not be an automatic variable on > + platforms (Solaris) that forbid stack execution by default. */ > + static ffi_closure cl; > ffi_type * cl_arg_types[3]; > Hm, powerpc-unknown-linux-gnu doesn't like the static: /bin/sh ./libtool --mode=link /mnt/cvs/objdir/gcc/xgcc -B/mnt/cvs/objdir/gcc/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/bin/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/lib/ -isystem /mnt/cvs/testbinary/powerpc-unknown-linux-gnu/include -fexceptions -O2 -g -O2 -o ffitest -shared-libgcc ffitest.lo libffi.la /mnt/cvs/objdir/gcc/xgcc -B/mnt/cvs/objdir/gcc/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/bin/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/lib/ -isystem /mnt/cvs/testbinary/powerpc-unknown-linux-gnu/include -fexceptions -O2 -g -O2 -o .libs/ffitest -shared-libgcc .libs/ffitest.o ./.libs/libffi.so -Wl,--rpath -Wl,/mnt/cvs/testbinary/lib .libs/ffitest.o: could not read symbols: Bad value collect2: ld returned 1 exit status make[2]: *** [ffitest] Error 1 make[2]: Leaving directory `/mnt/cvs/objdir/powerpc-unknown-linux-gnu/libffi' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/mnt/cvs/objdir/powerpc-unknown-linux-gnu/libffi' make: *** [all-recursive-am] Error 2 From gcc-patches-return-75005-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 11:42:31 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26985 invoked by alias); 4 Jan 2003 11:42:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26974 invoked from network); 4 Jan 2003 11:42:24 -0000 Received: from unknown (HELO mozart.inet.co.th) (203.150.14.100) by 209.249.29.67 with SMTP; 4 Jan 2003 11:42:24 -0000 Received: from users.sourceforge.net (IDENT:PyWW1qj63cSTte9uAY3vl3OTdn2hjdYR@TruPPP0B168.inet.co.th [203.151.125.168]) by mozart.inet.co.th (8.9.1a/8.9.0) with ESMTP id SAA28517; Sat, 4 Jan 2003 18:41:55 +0700 (GMT+0700) Message-ID: <3E16C99E.5000106@users.sourceforge.net> Date: Sat, 04 Jan 2003 18:46:38 +0700 From: Kriang Lerdsuwanakij User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020826 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Mark Mitchell CC: "gcc-patches@gcc.gnu.org" Subject: Re: [C++ PATCH] Fix name lookup inconsistency References: <158300000.1041615966@warlock.codesourcery.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Mark Mitchell wrote: > > > --On Saturday, January 04, 2003 12:35:39 AM +0700 Kriang Lerdsuwanakij > wrote: > >> Hi >> >> This following patch corrects an inconsistency in name lookup code. >> When doing name lookup a class template preferring a type, >> lookup_name returns a TEMPLATE_DECL for an ordinary class template >> but returns a TYPE_DECL for a member class template. > > > This patch is out-of-date; the new parser changed some of this code a > bit. To me, the code in CVS looks correct. > I should have noticed this earlier. --Kriang From gcc-patches-return-75006-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 14:32:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26457 invoked by alias); 4 Jan 2003 14:32:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26444 invoked from network); 4 Jan 2003 14:32:52 -0000 Received: from unknown (HELO mozart.inet.co.th) (203.150.14.100) by 209.249.29.67 with SMTP; 4 Jan 2003 14:32:52 -0000 Received: from TruPPP0B068.inet.co.th (IDENT:GlGDbfs5T59LHYVCZSthRmWc4/lNJ+lS@TruPPP0B068.inet.co.th [203.151.125.68]) by mozart.inet.co.th (8.9.1a/8.9.0) with ESMTP id VAA14943 for ; Sat, 4 Jan 2003 21:32:38 +0700 (GMT+0700) Date: Sat, 4 Jan 2003 21:37:19 +0700 (ICT) From: Kriang Lerdsuwanakij X-X-Sender: Reply-To: To: Subject: [PATCH] Remove extra ';' in testcases Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi This patch remove some extra semicolons in recently added testcases. Committed to trunk. --Kriang 2003-01-04 Kriang Lerdsuwanakij * g++.dg/parse/namespace3.C: Remove extra semicolons. * g++.dg/parse/namespace4.C: Likewise. diff -cpr gcc-main-save/gcc/testsuite/g++.dg/parse/namespace3.C gcc-main-new/gcc/testsuite/g++.dg/parse/namespace3.C *** gcc-main-save/gcc/testsuite/g++.dg/parse/namespace3.C Fri Jan 3 19:52:34 2003 --- gcc-main-new/gcc/testsuite/g++.dg/parse/namespace3.C Sat Jan 4 21:26:51 2003 *************** *** 1,6 **** /* PR c+/3816 */ /* { dg-do compile } */ ! namespace A {}; namespace OtherNamespace { --- 1,6 ---- /* PR c+/3816 */ /* { dg-do compile } */ ! namespace A {} namespace OtherNamespace { *************** namespace OtherNamespace { *** 8,12 **** int member; } A; // used to conflict with A namespace ! }; // end of namespace --- 8,12 ---- int member; } A; // used to conflict with A namespace ! } // end of namespace diff -cpr gcc-main-save/gcc/testsuite/g++.dg/parse/namespace4.C gcc-main-new/gcc/testsuite/g++.dg/parse/namespace4.C *** gcc-main-save/gcc/testsuite/g++.dg/parse/namespace4.C Fri Jan 3 22:50:11 2003 --- gcc-main-new/gcc/testsuite/g++.dg/parse/namespace4.C Sat Jan 4 21:27:01 2003 *************** *** 2,8 **** /* { dg-do compile } */ /* Another conflict between namespace IDs and other things. */ ! namespace A { }; class B { --- 2,8 ---- /* { dg-do compile } */ /* Another conflict between namespace IDs and other things. */ ! namespace A { } class B { From gcc-patches-return-75007-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 14:35:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26989 invoked by alias); 4 Jan 2003 14:35:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26982 invoked from network); 4 Jan 2003 14:35:10 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 4 Jan 2003 14:35:10 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id JAA09709; Sat, 4 Jan 2003 09:34:57 -0500 (EST) Date: Sat, 4 Jan 2003 09:34:57 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301041434.JAA09709@caip.rutgers.edu> To: toon@moene.indiv.nluug.nl Subject: Re: [3.3 branch, Fortran, committed] was: [Trunk, Fortran, committed]Patch to enable use of any kind integer in case statements. Cc: bdavis11@directvinternet.com, gcc-patches@gcc.gnu.org > > Toon Moene wrote: > > > > I committed the attached patch after bootstrap, check (C and > > Fortran only) on powerpc-unknown-linux-gnu (Debian testing as of > > three weeks ago). > > > > It allows use of INTEGER*{1,2,8} in CASE statements and issues a > > warning when the case labels exceed the range of the KIND. > > And ditto for the 3.3 branch (it's a bug that this wasn't supported). Testcases? -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75008-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 14:35:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27423 invoked by alias); 4 Jan 2003 14:35:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27415 invoked from network); 4 Jan 2003 14:35:51 -0000 Received: from unknown (HELO smtp3.cp.tin.it) (212.216.176.223) by 209.249.29.67 with SMTP; 4 Jan 2003 14:35:51 -0000 Received: from unitus.it (80.116.230.244) by smtp3.cp.tin.it (6.5.029) id 3DDD788200FDD23E for gcc-patches@gcc.gnu.org; Sat, 4 Jan 2003 15:35:38 +0100 Message-ID: <3E16F1A2.1000001@unitus.it> Date: Sat, 04 Jan 2003 15:37:22 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: [C++ testsuite, obvious] Remove 3 stray semicolons Content-Type: multipart/mixed; boundary="------------020507060508080608000501" This is a multi-part message in MIME format. --------------020507060508080608000501 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, under the obviously correct rule, I'm committing the below, removing a few stray semicolons which were causing regressions. Ciao, Paolo. /////////// --------------020507060508080608000501 Content-Type: text/plain; name="CL_namespace" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="CL_namespace" 2003-01-04 Paolo Carlini * g++.dg/parse/namespace3.C: Remove stray semicolon. * g++.dg/parse/namespace4.C: Ditto. --------------020507060508080608000501 Content-Type: text/plain; name="patch_namespace" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch_namespace" diff -urN g++.dg-orig/parse/namespace3.C g++.dg/parse/namespace3.C --- g++.dg-orig/parse/namespace3.C 2003-01-03 13:52:34.000000000 +0100 +++ g++.dg/parse/namespace3.C 2003-01-04 15:24:45.000000000 +0100 @@ -1,6 +1,6 @@ /* PR c+/3816 */ /* { dg-do compile } */ -namespace A {}; +namespace A {} namespace OtherNamespace { @@ -8,5 +8,5 @@ int member; } A; // used to conflict with A namespace -}; // end of namespace +} // end of namespace diff -urN g++.dg-orig/parse/namespace4.C g++.dg/parse/namespace4.C --- g++.dg-orig/parse/namespace4.C 2003-01-03 16:50:11.000000000 +0100 +++ g++.dg/parse/namespace4.C 2003-01-04 15:24:55.000000000 +0100 @@ -2,7 +2,7 @@ /* { dg-do compile } */ /* Another conflict between namespace IDs and other things. */ -namespace A { }; +namespace A { } class B { --------------020507060508080608000501-- From gcc-patches-return-75009-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 14:40:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28419 invoked by alias); 4 Jan 2003 14:40:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28412 invoked from network); 4 Jan 2003 14:40:43 -0000 Received: from unknown (HELO smtp1.cp.tin.it) (212.216.176.221) by 209.249.29.67 with SMTP; 4 Jan 2003 14:40:43 -0000 Received: from unitus.it (80.116.230.244) by smtp1.cp.tin.it (6.5.029) id 3DEDBCA000A72EFD; Sat, 4 Jan 2003 15:40:31 +0100 Message-ID: <3E16F2C7.3010101@unitus.it> Date: Sat, 04 Jan 2003 15:42:15 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Paolo Carlini CC: "gcc-patches@gcc.gnu.org" Subject: Re: [C++ testsuite, obvious] Remove 3 stray semicolons References: <3E16F1A2.1000001@unitus.it> In-Reply-To: <3E16F1A2.1000001@unitus.it> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit ... never mind ;-) Paolo. From gcc-patches-return-75010-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 14:45:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29491 invoked by alias); 4 Jan 2003 14:45:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29483 invoked from network); 4 Jan 2003 14:45:26 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 4 Jan 2003 14:45:26 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id JAA11278; Sat, 4 Jan 2003 09:45:15 -0500 (EST) Date: Sat, 4 Jan 2003 09:45:15 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301041445.JAA11278@caip.rutgers.edu> To: jason@redhat.com Subject: Re: C++ lvalue correctness PATCH Cc: gcc-patches@gcc.gnu.org References: > *** ./gcc/testsuite/g++.old-deja/g++.oliva/ext1.C.~1~ Fri Jan 3 > 11:47:14 2003 > // simplified from bug report by Michael Rosenbruch > > > // Special g++ Options: > - // execution test - XFAIL *-*-* > > extern "C" void abort(); I don't think you checked in the update to the testcase. -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75011-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 14:56:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4791 invoked by alias); 4 Jan 2003 14:56:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4772 invoked from network); 4 Jan 2003 14:56:50 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 4 Jan 2003 14:56:50 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id JAA12850; Sat, 4 Jan 2003 09:56:38 -0500 (EST) Date: Sat, 4 Jan 2003 09:56:38 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301041456.JAA12850@caip.rutgers.edu> To: gdr@integrable-solutions.net Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Cc: bkoz@redhat.com, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> I would like to clear this one off my plate if possible. I guess we're just waiting for Ben to comment on the filename change? http://gcc.gnu.org/ml/libstdc++/2002-12/msg00330.html Ok to install? Thanks, --Kaveh -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75012-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 15:18:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17267 invoked by alias); 4 Jan 2003 15:18:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17260 invoked from network); 4 Jan 2003 15:18:24 -0000 Received: from unknown (HELO thales.mathematik.uni-ulm.de) (134.60.66.5) by 209.249.29.67 with SMTP; 4 Jan 2003 15:18:24 -0000 Received: (qmail 2322 invoked by uid 642); 4 Jan 2003 15:18:12 -0000 Message-ID: <20030104151812.2321.qmail@thales.mathematik.uni-ulm.de> From: "Christian Ehrhardt" Date: Sat, 4 Jan 2003 16:18:12 +0100 To: gcc-patches@gcc.gnu.org Subject: Testcase for fixed PR 6544 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.25i This is a testcase for PR 6544 fixed by the new parser. Install in g++.dg/parse/parse8.C. // Origin: PR 6544 // { dg-do compile } template struct X { void y(); }; template inline X :: X() ; { y(); y(); } // { dg-error "" "" } int foo() {} regards Christian -- THAT'S ALL FOLKS! From gcc-patches-return-75013-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 16:13:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8399 invoked by alias); 4 Jan 2003 16:13:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8384 invoked from network); 4 Jan 2003 16:13:37 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 4 Jan 2003 16:13:37 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 58550ABAF8; Sat, 4 Jan 2003 16:13:25 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id F1CEDF7F9F; Sat, 4 Jan 2003 16:13:08 +0000 (GMT) To: "Kaveh R. Ghazi" Cc: gcc-patches@gcc.gnu.org Subject: Re: C++ lvalue correctness PATCH References: <200301041445.JAA11278@caip.rutgers.edu> From: Jason Merrill In-Reply-To: <200301041445.JAA11278@caip.rutgers.edu> ("Kaveh R. Ghazi"'s message of "Sat, 4 Jan 2003 09:45:15 -0500 (EST)") Date: Sat, 04 Jan 2003 11:13:08 -0500 Message-ID: Lines: 1 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Done, thanks. From gcc-patches-return-75014-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 17:47:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4102 invoked by alias); 4 Jan 2003 17:47:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4095 invoked from network); 4 Jan 2003 17:47:13 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 4 Jan 2003 17:47:13 -0000 Received: from localhost (IDENT:pQwarm/jduRxvBV63y0cBxPUIDFlw6XB@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h04HkwlU010223 for ; Sat, 4 Jan 2003 12:46:58 -0500 Date: Sat, 04 Jan 2003 12:46:55 -0500 (EST) Message-Id: <20030104.124655.77419820.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300: Implement RTL-based prologue/epilogue. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: 1.1, Required: 5 X-Spam-Level: * (1.1) X-Spam-Tests: DOUBLE_CAPSWORD X-Spam-Report: SPAM: 1.1 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to implement RTL-based prologue/epilogue. Tested on h8300 port. Committed. Kazu Hirata 2003-01-04 Kazu Hirata * config/h8300/h8300-protos.h: Add prototypes for the new functions defined below. * config/h8300/h8300.c (TARGET_ASM_FUNCTION_PROLOGUE): Do not define. (dosize): Emit RTL instead of assembly code. (push): Likewise. (pop): Likewise. (h8300_output_function_prologue): Remove. (h8300_expand_prologue): New. (h8300_expand_epilogue): New. (h8300_output_function_epilogue): Do only the reset of pragma_saveall. * config/h8300/h8300.md (push_h8300): New. (push_h8300hs): Likewise. (pop_h8300): Likewise. (pop_h8300hs): Likewise. (*stm_h8300s_2): Change the name to stm_h8300s_2. (*stm_h8300s_3): Change the name to stm_h8300s_3. (*stm_h8300s_4): Change the name to stm_h8300s_4. (*ldm_h8300s_2): New. (*ldm_h8300s_3): Likewise. (*ldm_h8300s_4): Likewise. (return): Likewise. (*return_1): Likewise. (prologue): Likewise. (epilogue): Likewise. (monitor_prologue): Likewise. Index: h8300-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300-protos.h,v retrieving revision 1.45 diff -c -r1.45 h8300-protos.h *** h8300-protos.h 3 Jan 2003 16:44:55 -0000 1.45 --- h8300-protos.h 4 Jan 2003 17:20:03 -0000 *************** *** 90,95 **** --- 90,98 ---- #endif /* TREE_CODE */ extern void h8300_init_once PARAMS ((void)); + extern int h8300_can_use_return_insn_p PARAMS ((void)); + extern void h8300_expand_prologue PARAMS ((void)); + extern void h8300_expand_epilogue PARAMS ((void)); extern int h8300_current_function_interrupt_function_p PARAMS ((void)); extern void asm_file_start PARAMS ((FILE *)); extern void asm_file_end PARAMS ((FILE *)); Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.195 diff -c -r1.195 h8300.c *** h8300.c 3 Jan 2003 16:44:55 -0000 1.195 --- h8300.c 4 Jan 2003 17:20:05 -0000 *************** *** 50,67 **** static int h8300_interrupt_function_p PARAMS ((tree)); static int h8300_monitor_function_p PARAMS ((tree)); static int h8300_os_task_function_p PARAMS ((tree)); ! static void dosize PARAMS ((FILE *, int, unsigned int)); static int round_frame_size PARAMS ((int)); static unsigned int compute_saved_regs PARAMS ((void)); ! static void push PARAMS ((FILE *, int)); ! static void pop PARAMS ((FILE *, int)); static const char *cond_string PARAMS ((enum rtx_code)); static unsigned int h8300_asm_insn_count PARAMS ((const char *)); const struct attribute_spec h8300_attribute_table[]; static tree h8300_handle_fndecl_attribute PARAMS ((tree *, tree, tree, int, bool *)); static tree h8300_handle_eightbit_data_attribute PARAMS ((tree *, tree, tree, int, bool *)); static tree h8300_handle_tiny_data_attribute PARAMS ((tree *, tree, tree, int, bool *)); - static void h8300_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); static void h8300_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); static void h8300_insert_attributes PARAMS ((tree, tree *)); #ifndef OBJECT_FORMAT_ELF --- 50,66 ---- static int h8300_interrupt_function_p PARAMS ((tree)); static int h8300_monitor_function_p PARAMS ((tree)); static int h8300_os_task_function_p PARAMS ((tree)); ! static void dosize PARAMS ((int, unsigned int)); static int round_frame_size PARAMS ((int)); static unsigned int compute_saved_regs PARAMS ((void)); ! static void push PARAMS ((int)); ! static void pop PARAMS ((int)); static const char *cond_string PARAMS ((enum rtx_code)); static unsigned int h8300_asm_insn_count PARAMS ((const char *)); const struct attribute_spec h8300_attribute_table[]; static tree h8300_handle_fndecl_attribute PARAMS ((tree *, tree, tree, int, bool *)); static tree h8300_handle_eightbit_data_attribute PARAMS ((tree *, tree, tree, int, bool *)); static tree h8300_handle_tiny_data_attribute PARAMS ((tree *, tree, tree, int, bool *)); static void h8300_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); static void h8300_insert_attributes PARAMS ((tree, tree *)); #ifndef OBJECT_FORMAT_ELF *************** *** 104,111 **** #undef TARGET_ASM_ALIGNED_HI_OP #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" - #undef TARGET_ASM_FUNCTION_PROLOGUE - #define TARGET_ASM_FUNCTION_PROLOGUE h8300_output_function_prologue #undef TARGET_ASM_FUNCTION_EPILOGUE #define TARGET_ASM_FUNCTION_EPILOGUE h8300_output_function_epilogue #undef TARGET_ENCODE_SECTION_INFO --- 103,108 ---- *************** *** 386,435 **** SIZE to adjust the stack pointer. */ static void ! dosize (file, sign, size) ! FILE *file; int sign; unsigned int size; { ! /* On the H8/300H and H8S, for sizes <= 8 bytes, it is as good or ! better to use adds/subs insns rather than add.l/sub.l with an ! immediate value. ! ! Also, on the H8/300, if we don't have a temporary to hold the ! size of the frame in the prologue, we simply emit a sequence of ! subs since this shouldn't happen often. */ ! if ((TARGET_H8300 && size <= 4) ! || ((TARGET_H8300H || TARGET_H8300S) && size <= 8) ! || (TARGET_H8300 && h8300_current_function_interrupt_function_p ()) ! || (TARGET_H8300 && current_function_needs_context ! && sign < 0)) ! { ! const char *op = (sign > 0) ? "add" : "sub"; ! unsigned int amount; ! ! /* Try different amounts in descending order. */ ! for (amount = (TARGET_H8300H || TARGET_H8300S) ? 4 : 2; ! amount > 0; ! amount /= 2) ! { ! char insn[100]; ! ! sprintf (insn, "\t%ss\t#%d,%s\n", op, amount, ! TARGET_H8300 ? "r7" : "er7"); ! for (; size >= amount; size -= amount) ! fputs (insn, file); ! } } else { ! if (TARGET_H8300) ! { ! fprintf (file, "\tmov.w\t#%d,r3\n\tadd.w\tr3,r7\n", sign * size); ! } ! else ! { ! fprintf (file, "\tadd.l\t#%d,er7\n", sign * size); ! } } } --- 383,414 ---- SIZE to adjust the stack pointer. */ static void ! dosize (sign, size) int sign; unsigned int size; { ! /* H8/300 cannot add/subtract a large constant with a single ! instruction. If a temporary register is available, load the ! constant to it and then do the addition. */ ! if (TARGET_H8300 ! && size > 4 ! && !h8300_current_function_interrupt_function_p () ! && !(current_function_needs_context && sign < 0)) ! { ! rtx new_sp; ! rtx r3 = gen_rtx_REG (Pmode, 3); ! emit_insn (gen_rtx_SET (Pmode, r3, GEN_INT (sign * size))); ! new_sp = gen_rtx_PLUS (Pmode, stack_pointer_rtx, r3); ! emit_insn (gen_rtx_SET (Pmode, stack_pointer_rtx, new_sp)); } else { ! /* The stack adjustment made here is further optimized by the ! splitter. In case of H8/300, the splitter always splits the ! addition emitted here to make the adjustment ! interrupt-safe. */ ! rtx new_sp = plus_constant (stack_pointer_rtx, sign * size); ! emit_insn (gen_rtx_SET (Pmode, stack_pointer_rtx, new_sp)); } } *************** *** 466,495 **** return saved_regs; } ! /* Output assembly language code to push register RN. */ static void ! push (file, rn) ! FILE *file; int rn; { if (TARGET_H8300) ! fprintf (file, "\t%s\t%s,@-r7\n", h8_mov_op, h8_reg_names[rn]); else ! fprintf (file, "\t%s\t%s,@-er7\n", h8_mov_op, h8_reg_names[rn]); } ! /* Output assembly language code to pop register RN. */ static void ! pop (file, rn) ! FILE *file; int rn; { if (TARGET_H8300) ! fprintf (file, "\t%s\t@r7+,%s\n", h8_mov_op, h8_reg_names[rn]); else ! fprintf (file, "\t%s\t@er7+,%s\n", h8_mov_op, h8_reg_names[rn]); } /* This is what the stack looks like after the prolog of --- 445,482 ---- return saved_regs; } ! /* Emit an insn to push register RN. */ static void ! push (rn) int rn; { + rtx reg = gen_rtx_REG (word_mode, rn); + rtx x; + if (TARGET_H8300) ! x = gen_push_h8300 (reg); else ! x = gen_push_h8300hs (reg); ! x = emit_insn (x); ! REG_NOTES (x) = gen_rtx_EXPR_LIST (REG_INC, stack_pointer_rtx, 0); } ! /* Emit an insn to pop register RN. */ static void ! pop (rn) int rn; { + rtx reg = gen_rtx_REG (word_mode, rn); + rtx x; + if (TARGET_H8300) ! x = gen_pop_h8300 (reg); else ! x = gen_pop_h8300hs (reg); ! x = emit_insn (x); ! REG_NOTES (x) = gen_rtx_EXPR_LIST (REG_INC, stack_pointer_rtx, 0); } /* This is what the stack looks like after the prolog of *************** *** 510,523 **** <- sp */ ! /* Output assembly language code for the function prologue. */ ! static void ! h8300_output_function_prologue (file, size) ! FILE *file; ! HOST_WIDE_INT size; { ! int fsize = round_frame_size (size); int regno; int saved_regs; int n_regs; --- 497,508 ---- <- sp */ ! /* Generate RTL code for the function prologue. */ ! void ! h8300_expand_prologue () { ! int fsize = round_frame_size (get_frame_size ()); int regno; int saved_regs; int n_regs; *************** *** 525,582 **** /* If the current function has the OS_Task attribute set, then we have a naked prologue. */ if (h8300_os_task_function_p (current_function_decl)) ! { ! fprintf (file, ";OS_Task prologue\n"); ! return; ! } if (h8300_monitor_function_p (current_function_decl)) ! { ! /* My understanding of monitor functions is they act just ! like interrupt functions, except the prologue must ! mask interrupts. */ ! fprintf (file, ";monitor prologue\n"); ! if (TARGET_H8300) ! { ! fprintf (file, "\tsubs\t#2,sp\n"); ! push (file, 0); ! fprintf (file, "\tstc\tccr,r0l\n"); ! fprintf (file, "\tmov.b\tr0l,@(2,sp)\n"); ! pop (file, 0); ! fprintf (file, "\torc\t#128,ccr\n"); ! } ! else if (TARGET_H8300H) ! { ! push (file, 0); ! fprintf (file, "\tstc\tccr,r0l\n"); ! fprintf (file, "\tmov.b\tr0l,@(4,sp)\n"); ! pop (file, 0); ! fprintf (file, "\torc\t#128,ccr\n"); ! } ! else if (TARGET_H8300S) ! { ! fprintf (file, "\tstc\texr,@-sp\n"); ! push (file, 0); ! fprintf (file, "\tstc\tccr,r0l\n"); ! fprintf (file, "\tmov.b\tr0l,@(6,sp)\n"); ! pop (file, 0); ! fprintf (file, "\torc\t#128,ccr\n"); ! } ! else ! abort (); ! } if (frame_pointer_needed) { /* Push fp. */ ! push (file, FRAME_POINTER_REGNUM); ! fprintf (file, "\t%s\t%s,%s\n", h8_mov_op, ! h8_reg_names[STACK_POINTER_REGNUM], ! h8_reg_names[FRAME_POINTER_REGNUM]); } /* Leave room for locals. */ ! dosize (file, -1, fsize); /* Push the rest of the registers in ascending order. */ saved_regs = compute_saved_regs (); --- 510,532 ---- /* If the current function has the OS_Task attribute set, then we have a naked prologue. */ if (h8300_os_task_function_p (current_function_decl)) ! return; if (h8300_monitor_function_p (current_function_decl)) ! /* My understanding of monitor functions is they act just like ! interrupt functions, except the prologue must mask ! interrupts. */ ! emit_insn (gen_monitor_prologue ()); if (frame_pointer_needed) { /* Push fp. */ ! push (FRAME_POINTER_REGNUM); ! emit_insn (gen_rtx_SET (Pmode, frame_pointer_rtx, stack_pointer_rtx)); } /* Leave room for locals. */ ! dosize (-1, fsize); /* Push the rest of the registers in ascending order. */ saved_regs = compute_saved_regs (); *************** *** 604,625 **** switch (n_regs) { case 1: ! push (file, regno); break; case 2: ! fprintf (file, "\tstm.l\t%s-%s,@-er7\n", ! h8_reg_names[regno], ! h8_reg_names[regno + 1]); break; case 3: ! fprintf (file, "\tstm.l\t%s-%s,@-er7\n", ! h8_reg_names[regno], ! h8_reg_names[regno + 2]); break; case 4: ! fprintf (file, "\tstm.l\t%s-%s,@-er7\n", ! h8_reg_names[regno], ! h8_reg_names[regno + 3]); break; default: abort (); --- 554,575 ---- switch (n_regs) { case 1: ! push (regno); break; case 2: ! emit_insn (gen_stm_h8300s_2 (gen_rtx_REG (SImode, regno), ! gen_rtx_REG (SImode, regno + 1))); break; case 3: ! emit_insn (gen_stm_h8300s_3 (gen_rtx_REG (SImode, regno), ! gen_rtx_REG (SImode, regno + 1), ! gen_rtx_REG (SImode, regno + 2))); break; case 4: ! emit_insn (gen_stm_h8300s_4 (gen_rtx_REG (SImode, regno), ! gen_rtx_REG (SImode, regno + 1), ! gen_rtx_REG (SImode, regno + 2), ! gen_rtx_REG (SImode, regno + 3))); break; default: abort (); *************** *** 628,665 **** } } ! /* Output assembly language code for the function epilogue. */ ! static void ! h8300_output_function_epilogue (file, size) ! FILE *file; ! HOST_WIDE_INT size; { ! int fsize = round_frame_size (size); int regno; - rtx insn = get_last_insn (); int saved_regs; int n_regs; if (h8300_os_task_function_p (current_function_decl)) ! { ! /* OS_Task epilogues are nearly naked -- they just have an ! rts instruction. */ ! fprintf (file, ";OS_task epilogue\n"); ! fprintf (file, "\trts\n"); ! goto out; ! } ! ! /* Monitor epilogues are the same as interrupt function epilogues. ! Just make a note that we're in a monitor epilogue. */ ! if (h8300_monitor_function_p (current_function_decl)) ! fprintf (file, ";monitor epilogue\n"); ! ! /* If the last insn was a BARRIER, we don't have to write any code. */ ! if (GET_CODE (insn) == NOTE) ! insn = prev_nonnote_insn (insn); ! if (insn && GET_CODE (insn) == BARRIER) ! goto out; /* Pop the saved registers in descending order. */ saved_regs = compute_saved_regs (); --- 578,606 ---- } } ! int ! h8300_can_use_return_insn_p () ! { ! return (reload_completed ! && !frame_pointer_needed ! && get_frame_size () == 0 ! && compute_saved_regs () == 0); ! } ! /* Generate RTL code for the function epilogue. */ ! ! void ! h8300_expand_epilogue () { ! int fsize = round_frame_size (get_frame_size ()); int regno; int saved_regs; int n_regs; if (h8300_os_task_function_p (current_function_decl)) ! /* OS_Task epilogues are nearly naked -- they just have an ! rts instruction. */ ! return; /* Pop the saved registers in descending order. */ saved_regs = compute_saved_regs (); *************** *** 687,708 **** switch (n_regs) { case 1: ! pop (file, regno); break; case 2: ! fprintf (file, "\tldm.l\t@er7+,%s-%s\n", ! h8_reg_names[regno - 1], ! h8_reg_names[regno]); break; case 3: ! fprintf (file, "\tldm.l\t@er7+,%s-%s\n", ! h8_reg_names[regno - 2], ! h8_reg_names[regno]); break; case 4: ! fprintf (file, "\tldm.l\t@er7+,%s-%s\n", ! h8_reg_names[regno - 3], ! h8_reg_names[regno]); break; default: abort (); --- 628,649 ---- switch (n_regs) { case 1: ! pop (regno); break; case 2: ! emit_insn (gen_ldm_h8300s_2 (gen_rtx_REG (SImode, regno - 1), ! gen_rtx_REG (SImode, regno))); break; case 3: ! emit_insn (gen_ldm_h8300s_3 (gen_rtx_REG (SImode, regno - 2), ! gen_rtx_REG (SImode, regno - 1), ! gen_rtx_REG (SImode, regno))); break; case 4: ! emit_insn (gen_ldm_h8300s_4 (gen_rtx_REG (SImode, regno - 3), ! gen_rtx_REG (SImode, regno - 2), ! gen_rtx_REG (SImode, regno - 1), ! gen_rtx_REG (SImode, regno))); break; default: abort (); *************** *** 711,731 **** } /* Deallocate locals. */ ! dosize (file, 1, fsize); /* Pop frame pointer if we had one. */ if (frame_pointer_needed) ! pop (file, FRAME_POINTER_REGNUM); ! if (h8300_current_function_interrupt_function_p ()) ! fprintf (file, "\trte\n"); ! else ! fprintf (file, "\trts\n"); ! out: pragma_saveall = 0; } ! /* Return nonzero if the current function is an interrupt function. */ --- 652,674 ---- } /* Deallocate locals. */ ! dosize (1, fsize); /* Pop frame pointer if we had one. */ if (frame_pointer_needed) ! pop (FRAME_POINTER_REGNUM); ! } ! /* Output assembly language code for the function epilogue. */ ! static void ! h8300_output_function_epilogue (file, size) ! FILE *file ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; ! { pragma_saveall = 0; } ! /* Return nonzero if the current function is an interrupt function. */ Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.142 diff -c -r1.142 h8300.md *** h8300.md 2 Jan 2003 18:53:35 -0000 1.142 --- h8300.md 4 Jan 2003 17:20:05 -0000 *************** *** 51,57 **** ;; ---------------------------------------------------------------------- (define_constants ! [(UNSPEC_INCDEC 0)]) (define_constants [(SC_REG 3) --- 51,58 ---- ;; ---------------------------------------------------------------------- (define_constants ! [(UNSPEC_INCDEC 0) ! (UNSPEC_MONITOR 1)]) (define_constants [(SC_REG 3) *************** *** 1783,1789 **** ;; PROLOGUE/EPILOGUE-RELATED INSTRUCTIONS ;; ---------------------------------------------------------------------- ! (define_insn "*stm_h8300s_2" [(parallel [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -8))) --- 1784,1815 ---- ;; PROLOGUE/EPILOGUE-RELATED INSTRUCTIONS ;; ---------------------------------------------------------------------- ! (define_expand "push_h8300" ! [(set (mem:HI (pre_dec:HI (reg:HI SP_REG))) ! (match_operand:HI 0 "register_operand" "=r"))] ! ! "TARGET_H8300" ! "") ! ! (define_expand "push_h8300hs" ! [(set (mem:SI (pre_dec:SI (reg:SI SP_REG))) ! (match_operand:SI 0 "register_operand" "=r"))] ! "TARGET_H8300H && TARGET_H8300S" ! "") ! ! (define_expand "pop_h8300" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (mem:HI (post_inc:HI (reg:HI SP_REG))))] ! "TARGET_H8300" ! "") ! ! (define_expand "pop_h8300hs" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (mem:SI (post_inc:SI (reg:SI SP_REG))))] ! "TARGET_H8300H && TARGET_H8300S" ! "") ! ! (define_insn "stm_h8300s_2" [(parallel [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -8))) *************** *** 1799,1805 **** [(set_attr "cc" "none") (set_attr "length" "4")]) ! (define_insn "*stm_h8300s_3" [(parallel [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -12))) --- 1825,1831 ---- [(set_attr "cc" "none") (set_attr "length" "4")]) ! (define_insn "stm_h8300s_3" [(parallel [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -12))) *************** *** 1820,1826 **** [(set_attr "cc" "none") (set_attr "length" "4")]) ! (define_insn "*stm_h8300s_4" [(parallel [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -16))) --- 1846,1852 ---- [(set_attr "cc" "none") (set_attr "length" "4")]) ! (define_insn "stm_h8300s_4" [(parallel [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -16))) *************** *** 1840,1845 **** --- 1866,1972 ---- "stm.l\\t%S0-%S3,@-er7" [(set_attr "cc" "none") (set_attr "length" "4")]) + + (define_insn "ldm_h8300s_2" + [(parallel + [(set (reg:SI SP_REG) + (plus:SI (reg:SI SP_REG) (const_int 8))) + (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int 4))) + (match_operand:SI 0 "register_operand" "")) + (set (mem:SI (reg:SI SP_REG)) + (match_operand:SI 1 "register_operand" ""))])] + "TARGET_H8300S + && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1) + || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3) + || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))" + "ldm.l\\t@er7+,%S0-%S1" + [(set_attr "cc" "none") + (set_attr "length" "4")]) + + (define_insn "ldm_h8300s_3" + [(parallel + [(set (reg:SI SP_REG) + (plus:SI (reg:SI SP_REG) (const_int 12))) + (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int 8))) + (match_operand:SI 0 "register_operand" "")) + (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int 4))) + (match_operand:SI 1 "register_operand" "")) + (set (mem:SI (reg:SI SP_REG)) + (match_operand:SI 2 "register_operand" ""))])] + "TARGET_H8300S + && ((REGNO (operands[0]) == 0 + && REGNO (operands[1]) == 1 + && REGNO (operands[2]) == 2) + || (REGNO (operands[0]) == 4 + && REGNO (operands[1]) == 5 + && REGNO (operands[2]) == 6))" + "ldm.l\\t@er7+,%S0-%S2" + [(set_attr "cc" "none") + (set_attr "length" "4")]) + + (define_insn "ldm_h8300s_4" + [(parallel + [(set (reg:SI SP_REG) + (plus:SI (reg:SI SP_REG) (const_int 16))) + (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int 12))) + (match_operand:SI 0 "register_operand" "")) + (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int 8))) + (match_operand:SI 1 "register_operand" "")) + (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int 4))) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (reg:SI SP_REG)) + (match_operand:SI 3 "register_operand" ""))])] + "TARGET_H8300S + && REGNO (operands[0]) == 0 + && REGNO (operands[1]) == 1 + && REGNO (operands[2]) == 2 + && REGNO (operands[3]) == 3" + "ldm.l\\t@er7+,%S0-%S3" + [(set_attr "cc" "none") + (set_attr "length" "4")]) + + (define_expand "return" + [(return)] + "h8300_can_use_return_insn_p ()" + "") + + (define_insn "*return_1" + [(return)] + "reload_completed" + "* + { + if (h8300_current_function_interrupt_function_p ()) + return \"rte\"; + else + return \"rts\"; + }" + [(set_attr "cc" "none") + (set_attr "length" "2")]) + + (define_expand "prologue" + [(const_int 0)] + "" + "h8300_expand_prologue (); DONE;") + + (define_expand "epilogue" + [(return)] + "" + "h8300_expand_epilogue ();") + + (define_insn "monitor_prologue" + [(unspec_volatile [(const_int 0)] UNSPEC_MONITOR)] + "" + "* + { + if (TARGET_H8300) + return \"subs\\t#2,r7\;mov.w\\tr0,@-r7\;stc\\tccr,r0l\;mov.b\tr0l,@(2,r7)\;mov.w\\t@r7+,r0\;orc\t#128,ccr\"; + else if (TARGET_H8300H) + return \"mov.l\\ter0,@-er7\;stc\\tccr,r0l\;mov.b\\tr0l,@(4,er7)\;mov.l\\t@er7+,er0\;orc\\t#128,ccr\"; + else if (TARGET_H8300S) + return \"stc\texr,@-er7\;mov.l\\ter0,@-er7\;stc\tccr,r0l\;mov.b\tr0l,@(6,er7)\;mov.l\\t@er7+,er0\;orc\t#128,ccr\"; + }" + [(set_attr "length" "20") + (set_attr "cc" "clobber")]) ;; ---------------------------------------------------------------------- ;; EXTEND INSTRUCTIONS From gcc-patches-return-75015-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 18:05:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18431 invoked by alias); 4 Jan 2003 18:05:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18424 invoked from network); 4 Jan 2003 18:05:31 -0000 Received: from unknown (HELO mtvmime02.veritas.com) (143.127.3.10) by 209.249.29.67 with SMTP; 4 Jan 2003 18:05:31 -0000 Received: from megami (unverified) by mtvmime02.veritas.com (Content Technologies SMTPRS 4.2.10) with SMTP id ; Sat, 4 Jan 2003 10:06:11 -0800 Received: from veritas.com([172.22.12.210]) (2070 bytes) by megami via sendmail with P:esmtp/R:smart_host/T:smtp (sender: ) id for ; Sat, 4 Jan 2003 10:05:20 -0800 (PST) (Smail-3.2.0.101 1997-Dec-17 #15 built 2001-Aug-30) Message-ID: <3E17243E.9CBDE41A@veritas.com> Date: Sat, 04 Jan 2003 10:13:18 -0800 From: Bruce Korb Organization: Home X-Accept-Language: en MIME-Version: 1.0 To: Larin Hennessy CC: gcc-patches@gcc.gnu.org Subject: Re: updated fixinc patch References: <3E1218D9.5000706@science.oregonstate.edu> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Larin Hennessy wrote: > > Here is a patch to remove references to obsoleted targets in fixinc. > It also cleans up the handling > of replacement text. This is an update against current head of a patch > I submitted a few weeks ago. I tested it by running genfixes. > > I tried to change the test AAB_svr4_no_varargs to use the newer > replacement text system, but I could not get it to pass genfixes. > If anyone has a suggestion for this I would like to fix > that test also. Since SVR4 platforms use the fixinc.svr4 script, that fix has been commented out with #ifdef-s: > /* > * Completely replace with a file that includes gcc's > * stdarg.h or varargs.h files as appropriate. > */ > #ifdef SVR4 > fix = { > hackname = AAB_svr4_no_varargs; > files = sys/varargs.h; > replace = "[[ ... text ... ]]"; > }; > #endif The reason for this is that when I converted the fixincludes script, I had ambitions of converting the remaining fixinc.* scripts, too. Consequently, I added the fixes from the fixinc.svr4 into the include hack file, but put them under these ifdef-s until such time as I found the right round tuit. I am unsure of what you mean by "get it to pass genfixes" anyway. "genfixes" is a wrapper script around autogen and just does what it is told to do. There is no pass/fail testing, except with ``cd $builddir/fixinc ; make check''. From gcc-patches-return-75016-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 18:14:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22728 invoked by alias); 4 Jan 2003 18:14:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22701 invoked from network); 4 Jan 2003 18:14:11 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.74.12) by 209.249.29.67 with SMTP; 4 Jan 2003 18:14:11 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id 1E61B5DA5; Sat, 4 Jan 2003 19:14:57 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id 4570BF867 for ; Sat, 4 Jan 2003 19:14:57 +0100 (CET) Date: Sat, 4 Jan 2003 19:14:55 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Re: [3.4] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-1360724256-1041704095=:26172" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-1360724256-1041704095=:26172 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello, On Fri, 3 Jan 2003, Andreas Jaeger wrote: > Christian Cornelssen writes: > > > Hello again, > > > > attached is a `destdir4-changelog.diff' in "cvs diff -U0" format > > creating the desired ChangeLog entries for the DESTDIR patch. > > Thanks for the update. Just one note: ChangeLog entries should not be > send as a patch but just as plain text - a ChangeLog always never > applies correctly. Therefore the "-U0". Anyway, here is a `destdir4-changelog.tar.gz' with the entries in individual files, named `ChangeLog.destdir' with appropriate directory prefix. The entries themselves have not changed. Regards, Christian Cornelssen --8323584-1360724256-1041704095=:26172 Content-Type: APPLICATION/x-gunzip; name="destdir4-changelog.tar.gz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4-changelog.tar.gz" H4sIAJciFz4CA+1aW0/jOBTua/srLMQDDCTNvdJqtVoGZnaRWGZE2Yd9Qq7j tB5SO4pdLhrtf9/j3JpCu2VG04GCv5eS45PYHJ/v2P4Suz8mpI9j3D+eYD6m Z2Jsx1SqmOWdHwXHdZwoCDoOYBCVv251rRG4YQcanND3I9cFuxsMoBk5nZ+A mVQ4R6hDJjmT/+tHc9l5dfAcx7cc13J8hI51CBTDHB2LnNNUSsoR+pUQuPqd SFvNrBHNU8YhQ37r9brv0F/4mlop5I3NONqDLIJfiGeaWown4hC1LURMp4If 9rraOOOVef8X9DmnGeUx2t07+TC8PDm92EdKIDWhSCci41gxwXtdyEhKlMjv EfQFd6K9Gd+vnlK4IN0D5rG066ElLKXFyOoxjOFhKRsdotqQKwkjOGFKCbvX 67w92AX/SbZB+q/nf+RX/PcCf+Bp/kfewPB/2/hPDg4esh21bUBOoL+2rKd/ i/oow2oigbJQOtbQfskQoIcLepszRaGHs/P9xl33ImdZJnLV61Zdo1umJmgn 5TsIS3RLoTv9WxmRJXdeW5Uo+Z9skv5r+e8HTsP/QRBp/geha/i/bfxPBoNH /G/bij1Br9s26ZJQ+KytCLABWFIS1m0E3uKS/h38/4JvNngAWMf/0HVr/od+ pPkfumb/v33811n0qAAUxobdQP8Fr/KYsGAC5i6tAb3uim3B2sPAsoGt2ha8 tV1ByX+VU6qncTM1YP36H9Tnf7/wcyPHiwz/t43/dRbVVLNLqtmx4BSI/7C5 In9jXrIF6HXXnwqW0h+OGWYP8HT+b3L3v5b/nu9GNf+DgV+c/z0vNPzfDv43 Ituni5PT86OLf64+nh39Mby6/HT1+Wg4BDIfpVIAXaVEFZf1mtxIcoRYSogU km4uy5Esay6gQUL1eLivqK/jnN3Q1q1lUVmUHOqrCcUxzGLbmaSzmFoLnVde FuTF43thaEw89iVZq8/rup/2qNOUEuUdog0ddOYBLQPyFNmjno5e9wkbnKYD PR/w9CGbZuk9Alqg6XWrqT2UlI1geluRmaWKgXFFTryDJ5W3QD6tEoZ298BF zkbQ176Oi5rQJsxlUNrhu8E5w6OUIj22ogsieMLGfZxmE9xXlpBJcNgY8ymY OFUjGWulqrQyHAVgnmSzu8ZzyjIJNgaECa1o7pvhytOSk0Joruy5jKDSQRtm d4E/92/bQ69xV5YsA2HRNLF0fjd3zJtkGreC9CBKu3vaTQdJR6dS0xPGWREW kaDhn2en769Oz4eXR2dndvN4nBM9mpzMRfN61rR1ddIumRe0Wp2PBenXuwRF 7xgkRBxr62xKuSpvSES++ATGdUdVsZBI79aLHG0yyKz037H+w7QlHnlO/d/3 mvP/wPWDUv/3zPq/Zev/tyz7T1gHF9/+GcFvg/xnMK3qfmMlYB3/3XDQ8N8P Q63/QQEw/H99/DfsfJH8F6Mv5Bm///H9oOF/VPLfdcz7v9e8/uujoXx0jDbv /p6H/0B3cnBg3fjPo/9Hfv3+3wc/X/M/jHzD/5fP/0o/6zd1AE/nukGMFbZS QfAPFvQR+ltStPuVXI2wpFejGUtjyNR/C0Fg9yuk7dzW62K50EmpUBQfEjJa iGGYTBi9oVp6kfDvU07uC1kBzhzgR2PGx4sKF2qN5FwgmiTwODSiBGsxbCT0 rbXupJ25wvBP7dg7SPD03l4aN613XdAx5TTHiv7E2mVvWPt/0vrf6P+eFw40 //0gMt//bdP6rzKg7Puj4YdvE/9LsV5Ls/qv/dWar27WyuLDT3ufiTUGBgYG BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBi8H/wGo2+47AFAAAA== --8323584-1360724256-1041704095=:26172-- From gcc-patches-return-75017-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 18:31:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25272 invoked by alias); 4 Jan 2003 18:31:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25242 invoked from network); 4 Jan 2003 18:31:09 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 4 Jan 2003 18:31:09 -0000 Received: from localhost (IDENT:EojEAn0tP/tlMBP4R99DXxhPSsKVOXhV@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h04IUslU013071 for ; Sat, 4 Jan 2003 13:30:54 -0500 Date: Sat, 04 Jan 2003 13:30:49 -0500 (EST) Message-Id: <20030104.133049.131931144.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] Fix typos in web pages. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.9, Required: 5 X-Spam-Tests: DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -3.9 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to fix typos in web pages. Committed as obvious. Kazu Hirata Index: bugs.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/bugs.html,v retrieving revision 1.63 diff -u -r1.63 bugs.html --- bugs.html 16 Dec 2002 19:57:08 -0000 1.63 +++ bugs.html 4 Jan 2003 18:26:53 -0000 @@ -248,7 +248,7 @@ sources (unless you have to report a bug in gnatprep).

    When you have checked that your report meets these criteria, please -submit it accoding to our generic instructions. +submit it according to our generic instructions. (If you use a mailing list for reporting, please include an "[Ada]" tag in the subject.)

    @@ -477,7 +477,7 @@ This means you may get lots of errors about things like -strcmp not being found. You've most likely forgotton to +strcmp not being found. You've most likely forgotten to tell the compiler to look in the std:: namespace. There are several ways to do this, Index: develop.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/develop.html,v retrieving revision 1.23 diff -u -r1.23 develop.html --- develop.html 27 Dec 2002 00:46:01 -0000 1.23 +++ develop.html 4 Jan 2003 18:26:53 -0000 @@ -251,7 +251,7 @@ | \ v v New development plan announced Branch renamed to GCC 3.2 to - | (Jul 14 2002) accomodate for C++ ABI fixes + | (Jul 14 2002) accommodate for C++ ABI fixes | (C++ binary incompatible with | GCC 3.1, see release info) | \ Index: news.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/news.html,v retrieving revision 1.76 diff -u -r1.76 news.html --- news.html 22 Jul 2002 10:00:46 -0000 1.76 +++ news.html 4 Jan 2003 18:26:54 -0000 @@ -698,7 +698,7 @@
    Cygnus donates support for the PowerPC 750 processor. The PPC750 is a 32bit superscalar implementation of the -PowerPC family manufactured by both Motorola and IBM. The PPC750 is targetted +PowerPC family manufactured by both Motorola and IBM. The PPC750 is targeted at high end Macs as well as high end embedded applications.
    Index: egcs-1.0/egcs-1.0.2.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/egcs-1.0/egcs-1.0.2.html,v retrieving revision 1.17 diff -u -r1.17 egcs-1.0.2.html --- egcs-1.0/egcs-1.0.2.html 11 Feb 2002 05:57:09 -0000 1.17 +++ egcs-1.0/egcs-1.0.2.html 4 Jan 2003 18:26:54 -0000 @@ -67,7 +67,7 @@
  • Fix bootstrap on sco5 with native compiler.
  • Fix for abort building newlib on H8 target.
  • Fix fixincludes handling of math.h on SunOS.
  • -
  • Minor fix for motorola 3300 m68k systems.
  • +
  • Minor fix for Motorola 3300 m68k systems.
  • Index: egcs-1.1/index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/egcs-1.1/index.html,v retrieving revision 1.4 diff -u -r1.4 index.html --- egcs-1.1/index.html 19 Feb 2002 10:21:05 -0000 1.4 +++ egcs-1.1/index.html 4 Jan 2003 18:26:54 -0000 @@ -161,7 +161,7 @@
  • Fix multiply defined constructor/destructor symbol problems.
  • -
  • Avoid setting bogus RPATH environemnt variable during bootstrap.
  • +
  • Avoid setting bogus RPATH environment variable during bootstrap.
  • Avoid GNU-make dependencies in the texinfo subdir.
  • Index: gcc-3.0/features.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.0/features.html,v retrieving revision 1.29 diff -u -r1.29 features.html --- gcc-3.0/features.html 15 Aug 2002 00:09:07 -0000 1.29 +++ gcc-3.0/features.html 4 Jan 2003 18:26:54 -0000 @@ -44,7 +44,7 @@
  • Fixes for bad code generation during loop unrolling.
  • Fixes for bad code generation by the sibling call optimization.
  • Minor improvements to x86 code generation.
  • -
  • Implemenation of function descriptors in C++ vtables for IA64.
  • +
  • Implementation of function descriptors in C++ vtables for IA64.
  • Numerous minor bug-fixes.
  • Index: gcc-3.1/changes.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.1/changes.html,v retrieving revision 1.54 diff -u -r1.54 changes.html --- gcc-3.1/changes.html 15 Aug 2002 00:09:07 -0000 1.54 +++ gcc-3.1/changes.html 4 Jan 2003 18:26:54 -0000 @@ -307,7 +307,7 @@
  • Prefetch support has been added to the Pentium III, Pentium 4, K6-2, K6-3, and Athlon series.
  • -
  • Code generated for floating point to integer converisons has been +
  • Code generated for floating point to integer conversions has been improved leading to better performance of many 3D applications.
  • Index: java/contrib.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/contrib.html,v retrieving revision 1.29 diff -u -r1.29 contrib.html --- java/contrib.html 31 Oct 2002 14:47:43 -0000 1.29 +++ java/contrib.html 4 Jan 2003 18:26:55 -0000 @@ -1,7 +1,7 @@ -GCJ - Contibuting +GCJ - Contributing Index: java/faq.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/faq.html,v retrieving revision 1.56 diff -u -r1.56 faq.html --- java/faq.html 31 Oct 2002 14:47:43 -0000 1.56 +++ java/faq.html 4 Jan 2003 18:26:55 -0000 @@ -49,7 +49,7 @@
  • Why do I get undefined reference to `main' errors?
  • Can GCJ only handle source code?
  • -
  • "gcj -C" Doesnt seem to work like javac/jikes. +
  • "gcj -C" Doesn't seem to work like javac/jikes. Whats going on?
  • Where does GCJ look for files?
  • How does gcj resolve wether to compile .class or @@ -376,7 +376,7 @@

    3.4 My libgcj build fails with "invalid use of undefined type struct sigcontext_struct"

    -

    If you're using Linux, this probibly means you need to upgrade to +

    If you're using Linux, this probably means you need to upgrade to a newwer, glibc (libc6) based Linux distribution. libgcj does not support the older linux libc5.

    It might be possible to get a working libgcj by changing occurances @@ -435,7 +435,7 @@


    -

    4.3 "gcj -C" Doesnt seem to work like javac/jikes. +

    4.3 "gcj -C" Doesn't seem to work like javac/jikes. Whats going on?

    @@ -628,7 +628,7 @@ of trivial examples for version 2.95 and version 3.0. - As a comparision, here + As a comparison, here is the same example as a JNI application using Kaffe. The same code will work with GCJ, as shown here.

    Index: java/index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/index.html,v retrieving revision 1.119 diff -u -r1.119 index.html --- java/index.html 27 Dec 2002 11:22:49 -0000 1.119 +++ java/index.html 4 Jan 2003 18:26:55 -0000 @@ -185,7 +185,7 @@
  • January 14, 2002 -Adam Megacz anounced that XWT is +Adam Megacz announced that XWT is an ActiveX control which is written in Java and compiled with gcj. We hope to be checking in his Windows patches in the near future.
    alphaev67-unknown-linux-gnu     Jeff Sturm
    ia64-*-linux-gnu
    sparc-sun-solaris2.8     Jeff Sturm
    sparc-sun-solaris2.7
    PPC Darwin     Andreas Tobler
    alpha-dec-osf4.0f
    - @@ -29,7 +28,6 @@ - @@ -59,7 +57,6 @@ - @@ -131,7 +128,6 @@ - From gcc-patches-return-75030-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 01:55:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5483 invoked by alias); 5 Jan 2003 01:55:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5460 invoked from network); 5 Jan 2003 01:55:18 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 5 Jan 2003 01:55:18 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h051rg1F017228; Sun, 5 Jan 2003 02:53:42 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h051rgTF017227; Sun, 5 Jan 2003 02:53:42 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Benjamin Kosnik Cc: "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> From: Gabriel Dos Reis In-Reply-To: <20030104183632.51820821.bkoz@redhat.com> Organization: Integrable Solutions Date: 05 Jan 2003 02:53:41 +0100 Message-ID: Lines: 11 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Benjamin Kosnik writes: | testsuite/27_io/istream_extractor_arith/01.cc | testsuite/27_io/istream_extractor_arith/02.cc | testsuite/27_io/istream_extractor_arith/03.cc Furthermore, if possible, I would like to see files numbered after the sub-paragraphs number in the C++ definition. That may make tracking easier. -- Gaby From gcc-patches-return-75031-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 03:41:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13006 invoked by alias); 5 Jan 2003 03:41:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12986 invoked from network); 5 Jan 2003 03:41:21 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 5 Jan 2003 03:41:21 -0000 Received: from roscoe.constant.com (tooth.toronto.redhat.com [172.16.14.29]) by touchme.toronto.redhat.com (Postfix) with SMTP id CA9F7800041; Sat, 4 Jan 2003 22:41:08 -0500 (EST) Date: Sat, 4 Jan 2003 21:39:16 -0600 From: Benjamin Kosnik To: Gabriel Dos Reis Cc: ghazi@caip.rutgers.edu, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Message-Id: <20030104213916.0e153610.bkoz@redhat.com> In-Reply-To: References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit >| testsuite/27_io/istream_extractor_arith/01.cc >| testsuite/27_io/istream_extractor_arith/02.cc >| testsuite/27_io/istream_extractor_arith/03.cc > >Furthermore, if possible, I would like to see files numbered after the >sub-paragraphs number in the C++ definition. That may make tracking >easier. Seemingly, yes. Why don't you give as complete an answer as you can, given this file and the twelve existant tests. How would you number it? -benjamin From gcc-patches-return-75032-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 03:55:34 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20196 invoked by alias); 5 Jan 2003 03:55:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20045 invoked from network); 5 Jan 2003 03:55:28 -0000 Received: from unknown (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by 209.249.29.67 with SMTP; 5 Jan 2003 03:55:28 -0000 Received: from hiauly1.hia.nrc.ca (localhost [127.0.0.1]) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) with ESMTP id h053tGot017605; Sat, 4 Jan 2003 22:55:16 -0500 (EST) Received: (from dave@localhost) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) id h053tFC2017604; Sat, 4 Jan 2003 22:55:15 -0500 (EST) Message-Id: <200301050355.h053tFC2017604@hiauly1.hia.nrc.ca> Subject: Re: C++ PATCH to emit_tinfo_decl (PR 8512) To: jason@redhat.com (Jason Merrill) Date: Sat, 4 Jan 2003 22:55:15 -0500 (EST) From: "John David Anglin" Cc: gcc-patches@gcc.gnu.org, nathan@codesourcery.com In-Reply-To: from "Jason Merrill" at May 16, 2002 05:45:15 am MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit > My earlier patch broke hpux because we were unconditionally calling > comdat_linkage for the tinfo nodes, which on hpux makes them file-local. > The proper thing is to give them the same linkage as the vtable, as in the > spec. Unfortunately, this will be an ABI change from 3.1 on targets > without weak symbol support. > 2002-05-14 Jason Merrill > > * cp/rtti.c (get_tinfo_decl): Don't call comdat_linkage. > Do set DECL_COMDAT. [...] > *** ./cp/rtti.c.~1~ Wed May 15 04:32:50 2002 > --- ./cp/rtti.c Thu May 16 04:24:05 2002 [...] > *************** get_tinfo_decl (type) > *** 309,317 **** > TREE_STATIC (d) = 1; > DECL_EXTERNAL (d) = 1; > TREE_PUBLIC (d) = 1; > - if (flag_weak || !typeinfo_in_lib_p (type)) > - comdat_linkage (d); > SET_DECL_ASSEMBLER_NAME (d, name); > cp_finish_decl (d, NULL_TREE, NULL_TREE, 0); > > pushdecl_top_level (d); > --- 309,316 ---- > TREE_STATIC (d) = 1; > DECL_EXTERNAL (d) = 1; > TREE_PUBLIC (d) = 1; > SET_DECL_ASSEMBLER_NAME (d, name); > + DECL_COMDAT (d) = 1; > cp_finish_decl (d, NULL_TREE, NULL_TREE, 0); > > pushdecl_top_level (d); There are continuing problems with tinfo nodes under hpux with the HP assembler. As noted in PR 8512, we need to import undefined symbols so that they are correctly typed for the linker and dynamic loader. Using the test program in the PR, I find that the symbol _ZTISt8bad_cast is not being imported because TREE_PUBLIC is no longer set: unit size After Jason's patch last May, we had TREE_PUBLIC and DECL_COMDAT set. Then, on June 30, Nathan removed these. Then, on July 17, Scott Snyder restored DECL_COMDAT to fix PR 7320. The net effect is that TREE_PUBLIC isn't defined for tinfo var_decls anymore. _ZTISt8bad_cast is defined in the library and therefore it needs to be external on hpux ports that don't have weak support. Exactly which flags need to be set is unclear as the commentary regarding TREE_STATIC, DECL_EXTERNAL and TREE_PUBLIC is confusing for var_decl's. TREE_STATIC: nonzero means allocate static storage. DECL_EXTERNAL: nonzero means external reference: do not allocate storage, and refer to a definition elsewhere. TREE_PUBLIC: nonzero means name is to be accessible from outside this module. DECL_COMDAT: even if TREE_PUBLIC is nonzero, the declaration need not be put out unless it is needed in this translation unit. In the above, we have TREE_STATIC and DECL_EXTERNAL set. Should storage be allocated or not? No storage is actually allocated so presumably DECL_EXTERNAL wins. However, ASM_OUTPUT_EXTERNAL is not used because both DECL_EXTERNAL and TREE_PUBLIC are required in assemble_external before the ASM_OUTPUT_EXTERNAL macro is invoked. Requiring TREE_PUBLIC appears wrong as ASM_OUTPUT_EXTERNAL is supposed to output any text necessary for declaring the name of an external symbol which is referenced in this compilation but not defined. A nonzero TREE_PUBLIC seems to imply that a declaration defined in this translation unit should be externally accessible. It doesn't seem that it should be set for symbols that are not defined in this translation unit. Any hope in straightening this out? Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) From gcc-patches-return-75033-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 04:04:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22208 invoked by alias); 5 Jan 2003 04:04:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22201 invoked from network); 5 Jan 2003 04:04:38 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 5 Jan 2003 04:04:38 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18V21S-00008z-00; Sat, 04 Jan 2003 20:04:26 -0800 To: gcc-patches@gcc.gnu.org Cc: Mark Mitchell , Jean-Pierre Radley Subject: Forgotten patch for hwint.h (oops) From: Zack Weinberg Date: Sat, 04 Jan 2003 20:04:26 -0800 Message-ID: <878yy0z1h1.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii A couple weeks ago I wrote a patch to fix hwint.h so we can bootstrap GCC on systems where the initial compiler doesn't support a 64-bit integer type; this has been broken since the hwint overhaul. I thought that this had been applied, but CVS tells me it hasn't, and thinking about it I'm not sure I ever formally submitted it for review. So here it is now. I apologize for leaving this broken while I was on vacation. (Note that most of the remaining places where HOST_WIDEST_INT is used, notably the mmix back end and the gcov stuff, assume it's >=64 bits.) zw * hwint.h: If the current compiler has no 64-bit type at all, make HOST_WIDEST_INT 32 bits. =================================================================== Index: hwint.h --- hwint.h 16 Dec 2002 18:19:38 -0000 1.15 +++ hwint.h 5 Jan 2003 03:55:07 -0000 @@ -88,10 +88,11 @@ extern char sizeof_long_long_must_be_8[s # define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%016llx" #endif -/* Set HOST_WIDEST_INT. Unlike HOST_WIDE_INT, this must always be - at least 64 bits wide. */ +/* Set HOST_WIDEST_INT. This is a 64-bit type unless the compiler + in use has no 64-bit type at all; in that case it's 32 bits. */ -#if HOST_BITS_PER_WIDE_INT >= 64 +#if HOST_BITS_PER_WIDE_INT >= 64 \ + || (HOST_BITS_PER_LONGLONG < 64 && HOST_BITS_PER___INT64 < 64) # define HOST_WIDEST_INT HOST_WIDE_INT # define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_WIDE_INT # define HOST_WIDEST_INT_PRINT_DEC HOST_WIDE_INT_PRINT_DEC @@ -110,7 +111,7 @@ extern char sizeof_long_long_must_be_8[s # define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER___INT64 # define HOST_WIDEST_INT __int64 # else - #error "Unable to find a suitable type for HOST_WIDEST_INT" + #error "This line should be impossible to reach" # endif # endif # define HOST_WIDEST_INT_PRINT_DEC "%lld" From gcc-patches-return-75034-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 04:40:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28337 invoked by alias); 5 Jan 2003 04:40:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28330 invoked from network); 5 Jan 2003 04:40:43 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 5 Jan 2003 04:40:43 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id XAA13831 for gcc-patches@gcc.gnu.org; Sat, 4 Jan 2003 23:40:31 -0500 (EST) Date: Sat, 4 Jan 2003 23:40:31 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301050440.XAA13831@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org Subject: Constification patch installed Constifies a few bytes. Bootstrapped on sparc-solaris2.7 and installed as obvious. 2002-12-31 Kaveh R. Ghazi * Makefile.in (gtyp-gen.h): Const-ify. * gcov-dump.c (tag_table): Likewise. diff -rup orig/egcc-CVS20021230/gcc/Makefile.in egcc-CVS20021230/gcc/Makefile.in --- orig/egcc-CVS20021230/gcc/Makefile.in 2002-12-19 16:00:10.000000000 -0500 +++ egcc-CVS20021230/gcc/Makefile.in 2002-12-31 12:19:02.920826000 -0500 @@ -1894,25 +1894,25 @@ gt-c-objc-common.h gtype-c.h gt-location gtyp-gen.h: Makefile echo "/* This file is machine generated. Do not edit. */" > tmp-gtyp.h - echo "static const char *srcdir = " >> tmp-gtyp.h + echo "static const char *const srcdir = " >> tmp-gtyp.h echo "\"$(GTFILES_SRCDIR)\"" >> tmp-gtyp.h echo ";" >> tmp-gtyp.h - echo "static const char *lang_files[] = {" >> tmp-gtyp.h + echo "static const char *const lang_files[] = {" >> tmp-gtyp.h ll="$(GTFILES_FILES_FILES)"; \ for f in $$ll; do \ echo "\"$$f\", "; done >> tmp-gtyp.h echo "NULL};" >> tmp-gtyp.h - echo "static const char *langs_for_lang_files[] = {" >> tmp-gtyp.h + echo "static const char *const langs_for_lang_files[] = {" >> tmp-gtyp.h ff="$(GTFILES_FILES_LANGS)"; \ for f in $$ff; do \ echo "\"$$f\", " ; done >> tmp-gtyp.h echo "NULL};" >> tmp-gtyp.h - echo "static const char *all_files[] = {" >> tmp-gtyp.h + echo "static const char *const all_files[] = {" >> tmp-gtyp.h gf="$(GTFILES)"; \ for f in $$gf; do \ echo "\"$$f\", "; done >> tmp-gtyp.h echo " NULL};" >> tmp-gtyp.h - echo "static const char *lang_dir_names[] = { \"c\", " >> tmp-gtyp.h + echo "static const char *const lang_dir_names[] = { \"c\", " >> tmp-gtyp.h gf="$(GTFILES_LANG_DIR_NAMES)"; \ for l in $$gf; do \ echo "\"$$l\", "; done >> tmp-gtyp.h diff -rup orig/egcc-CVS20021230/gcc/gcov-dump.c egcc-CVS20021230/gcc/gcov-dump.c --- orig/egcc-CVS20021230/gcc/gcov-dump.c 2002-12-16 13:19:30.000000000 -0500 +++ egcc-CVS20021230/gcc/gcov-dump.c 2002-12-31 11:31:14.837782000 -0500 @@ -54,7 +54,7 @@ static const struct option options[] = { "long", no_argument, NULL, 'l' }, }; -static tag_format_t tag_table[] = +static const tag_format_t tag_table[] = { {0, "NOP", NULL}, {0, "UNKNOWN", NULL}, From gcc-patches-return-75035-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 04:41:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28838 invoked by alias); 5 Jan 2003 04:41:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28831 invoked from network); 5 Jan 2003 04:41:55 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 5 Jan 2003 04:41:55 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id XAA13956 for gcc-patches@gcc.gnu.org; Sat, 4 Jan 2003 23:41:43 -0500 (EST) Date: Sat, 4 Jan 2003 23:41:43 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301050441.XAA13956@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org Subject: Another constification patch installed Another one. Again, tested on sparc-solaris2.7 and installed as obvious. 2002-12-31 Kaveh R. Ghazi * parser.c (cp_parser_binary_expression, cp_parser_multiplicative_expression, cp_parser_additive_expression, cp_parser_shift_expression, cp_parser_relational_expression, cp_parser_equality_expression, cp_parser_and_expression, cp_parser_exclusive_or_expression, cp_parser_inclusive_or_expression, cp_parser_logical_and_expression, cp_parser_logical_or_expression, cp_parser_binary_expression): Const-ify. diff -rup orig/egcc-CVS20021230/gcc/cp/parser.c egcc-CVS20021230/gcc/cp/parser.c --- orig/egcc-CVS20021230/gcc/cp/parser.c 2002-12-30 22:26:09.000000000 -0500 +++ egcc-CVS20021230/gcc/cp/parser.c 2002-12-31 13:09:03.785748000 -0500 @@ -1697,7 +1697,7 @@ static bool cp_parser_check_template_par PARAMS ((cp_parser *, unsigned)); static tree cp_parser_binary_expression PARAMS ((cp_parser *, - cp_parser_token_tree_map, + const cp_parser_token_tree_map, cp_parser_expression_fn)); static tree cp_parser_global_scope_opt PARAMS ((cp_parser *, bool)); @@ -5141,7 +5141,7 @@ static tree cp_parser_multiplicative_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_MULT, MULT_EXPR }, { CPP_DIV, TRUNC_DIV_EXPR }, { CPP_MOD, TRUNC_MOD_EXPR }, @@ -5166,7 +5166,7 @@ static tree cp_parser_additive_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_PLUS, PLUS_EXPR }, { CPP_MINUS, MINUS_EXPR }, { CPP_EOF, ERROR_MARK } @@ -5190,7 +5190,7 @@ static tree cp_parser_shift_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_LSHIFT, LSHIFT_EXPR }, { CPP_RSHIFT, RSHIFT_EXPR }, { CPP_EOF, ERROR_MARK } @@ -5222,7 +5222,7 @@ static tree cp_parser_relational_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_LESS, LT_EXPR }, { CPP_GREATER, GT_EXPR }, { CPP_LESS_EQ, LE_EXPR }, @@ -5250,7 +5250,7 @@ static tree cp_parser_equality_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_EQ_EQ, EQ_EXPR }, { CPP_NOT_EQ, NE_EXPR }, { CPP_EOF, ERROR_MARK } @@ -5273,7 +5273,7 @@ static tree cp_parser_and_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_AND, BIT_AND_EXPR }, { CPP_EOF, ERROR_MARK } }; @@ -5295,7 +5295,7 @@ static tree cp_parser_exclusive_or_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_XOR, BIT_XOR_EXPR }, { CPP_EOF, ERROR_MARK } }; @@ -5318,7 +5318,7 @@ static tree cp_parser_inclusive_or_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_OR, BIT_IOR_EXPR }, { CPP_EOF, ERROR_MARK } }; @@ -5340,7 +5340,7 @@ static tree cp_parser_logical_and_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_AND_AND, TRUTH_ANDIF_EXPR }, { CPP_EOF, ERROR_MARK } }; @@ -5362,7 +5362,7 @@ static tree cp_parser_logical_or_expression (parser) cp_parser *parser; { - static cp_parser_token_tree_map map = { + static const cp_parser_token_tree_map map = { { CPP_OR_OR, TRUTH_ORIF_EXPR }, { CPP_EOF, ERROR_MARK } }; @@ -13711,7 +13713,7 @@ cp_parser_check_template_parameters (par static tree cp_parser_binary_expression (parser, token_tree_map, fn) cp_parser *parser; - cp_parser_token_tree_map token_tree_map; + const cp_parser_token_tree_map token_tree_map; cp_parser_expression_fn fn; { tree lhs; @@ -13722,7 +13724,7 @@ cp_parser_binary_expression (parser, tok while (true) { cp_token *token; - cp_parser_token_tree_map_node *map_node; + const cp_parser_token_tree_map_node *map_node; tree rhs; /* Peek at the next token. */ From gcc-patches-return-75036-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 04:53:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30258 invoked by alias); 5 Jan 2003 04:53:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30251 invoked from network); 5 Jan 2003 04:53:41 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by 209.249.29.67 with SMTP; 5 Jan 2003 04:53:41 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18V4fd-0005a2-00 for ; Sun, 05 Jan 2003 00:54:05 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18V2n8-0004Vl-00 for ; Sat, 04 Jan 2003 23:53:42 -0500 Date: Sat, 4 Jan 2003 23:53:42 -0500 From: Daniel Jacobowitz To: gcc-patches@gcc.gnu.org Subject: Unreviewed patch for cp-demangle.c Message-ID: <20030105045342.GA17306@nevyn.them.org> Mail-Followup-To: gcc-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.1i Would someone mind reviewing Klee's patch: http://gcc.gnu.org/ml/gcc/2002-11/msg00210.html to fix demangling of const-qualified pointer-to-member types? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer From gcc-patches-return-75037-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 05:34:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9321 invoked by alias); 5 Jan 2003 05:34:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9312 invoked from network); 5 Jan 2003 05:34:05 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 5 Jan 2003 05:34:05 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id AAA21453 for gcc-patches@gcc.gnu.org; Sun, 5 Jan 2003 00:33:53 -0500 (EST) Date: Sun, 5 Jan 2003 00:33:53 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301050533.AAA21453@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org Subject: Patch installed for warning fixes Patch fixes these warnings: > include/libiberty.h:80: warning: function declaration isn't a prototype > convert.c:110: warning: unused variable `fcode' > java/lang.c:1055: warning: function declaration isn't a prototype > config/sparc/gmon-sol2.c:206: warning: implicit declaration of function `creat' The only one slightly in need of explanation might be the alloc-pool.c libiberty include removal. That include must always come after config.h or things don't get done right, (as in the non-prototype decl warning above.) Since system.h includes libiberty.h anyway, I just removed the explicit include. The rest of the changes should be self evident. Bootstrapped on sparc-solaris2.7 and instaled as obvious. 2003-01-05 Kaveh R. Ghazi * alloc-pool.c: Don't include "libiberty.h". * config/sparc/gmon-sol2.c: Include . * convert.c (convert_to_real): Hide unused variable. java: * lang.c (dump_compound_expr): Prototype. diff -rup orig/egcc-CVS20030104/gcc/alloc-pool.c egcc-CVS20030104/gcc/alloc-pool.c --- orig/egcc-CVS20030104/gcc/alloc-pool.c Thu Dec 19 10:53:32 2002 +++ egcc-CVS20030104/gcc/alloc-pool.c Sat Jan 4 23:48:36 2003 @@ -19,7 +19,6 @@ along with GCC; see the file COPYING. I Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "libiberty.h" #include "config.h" #include "system.h" #include "alloc-pool.h" diff -rup orig/egcc-CVS20030104/gcc/config/sparc/gmon-sol2.c egcc-CVS20030104/gcc/config/sparc/gmon-sol2.c --- orig/egcc-CVS20030104/gcc/config/sparc/gmon-sol2.c Mon Dec 16 16:02:02 2002 +++ egcc-CVS20030104/gcc/config/sparc/gmon-sol2.c Sat Jan 4 23:53:32 2003 @@ -34,6 +34,7 @@ #include "tconfig.h" #include "tsystem.h" +#include /* for creat() */ #include "coretypes.h" #include "tm.h" diff -rup orig/egcc-CVS20030104/gcc/convert.c egcc-CVS20030104/gcc/convert.c --- orig/egcc-CVS20030104/gcc/convert.c Tue Dec 17 07:00:38 2002 +++ egcc-CVS20030104/gcc/convert.c Sat Jan 4 23:47:01 2003 @@ -107,12 +107,13 @@ tree convert_to_real (type, expr) tree type, expr; { - enum built_in_function fcode = builtin_mathfn_code (expr); tree itype = TREE_TYPE (expr); /* Disable until we figure out how to decide whether the functions are present in runtime. */ #if 0 + enum built_in_function fcode = builtin_mathfn_code (expr); + /* Convert (float)sqrt((double)x) where x is float into sqrtf(x) */ if ((fcode == BUILT_IN_SQRT || fcode == BUILT_IN_SQRTL diff -rup orig/egcc-CVS20030104/gcc/java/lang.c egcc-CVS20030104/gcc/java/lang.c --- orig/egcc-CVS20030104/gcc/java/lang.c Wed Jan 1 16:00:37 2003 +++ egcc-CVS20030104/gcc/java/lang.c Sat Jan 4 23:49:58 2003 @@ -78,6 +78,7 @@ static int inline_init_test_initializati void *)); static bool java_can_use_bit_fields_p PARAMS ((void)); static int java_dump_tree PARAMS ((void *, tree)); +static void dump_compound_expr PARAMS ((dump_info_p, tree)); #ifndef TARGET_OBJECT_SUFFIX # define TARGET_OBJECT_SUFFIX ".o" From gcc-patches-return-75038-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 06:16:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22801 invoked by alias); 5 Jan 2003 06:16:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22780 invoked from network); 5 Jan 2003 06:16:36 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 5 Jan 2003 06:16:36 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id BAA28028; Sun, 5 Jan 2003 01:16:24 -0500 (EST) Date: Sun, 5 Jan 2003 01:16:24 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301050616.BAA28028@caip.rutgers.edu> To: bkoz@redhat.com Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Cc: gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, gdr@integrable-solutions.net, libstdc++@gcc.gnu.org References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> > From: Benjamin Kosnik > > >2002-12-25 Kaveh R. Ghazi > > > > * testsuite/27_io/istream_extractor_arith.cc (test12): Move to ... > > * testsuite/27_io/istream_extractor_arith2.cc: ... here, new file. > > I think I'd rather the subdirectory approach, on reflection. > > Thus: > > testsuite/27_io/istream_extractor_arith > > and > > testsuite/27_io/istream_extractor_arith/01.cc > testsuite/27_io/istream_extractor_arith/02.cc > testsuite/27_io/istream_extractor_arith/03.cc > ... > testsuite/27_io/istream_extractor_arith/12.cc > > I realize this contradicts what I'd said before. Sorry for the confusion. > > I'd like to try splitting tests out into separate files. This seems > like a good place to try this idea out. > -benjamin Ok, but does pushing files down one directory level require hacking the test framework or will it "just work" merely by splitting and moving the files? If the former, would you please point me at the .exp file that needs updating? Thanks, --Kaveh -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75039-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 08:28:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18974 invoked by alias); 5 Jan 2003 08:28:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18965 invoked from network); 5 Jan 2003 08:28:47 -0000 Received: from unknown (HELO smtp3.cp.tin.it) (212.216.176.223) by 209.249.29.67 with SMTP; 5 Jan 2003 08:28:47 -0000 Received: from unitus.it (62.211.200.106) by smtp3.cp.tin.it (6.5.029) id 3E17DD9600001A77 for gcc-patches@gcc.gnu.org; Sun, 5 Jan 2003 09:28:35 +0100 Message-ID: <3E17ED1C.4060202@unitus.it> Date: Sun, 05 Jan 2003 09:30:20 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: libstdc++/9168 Content-Type: multipart/mixed; boundary="------------050401080309090708050804" This is a multi-part message in MIME format. --------------050401080309090708050804 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, the below fixes the PR by implementing the resolution of DR19 (TC). Tested x86-linux, approved by Benjamin. Paolo. //////// --------------050401080309090708050804 Content-Type: text/plain; name="CL_9168" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="CL_9168" 2003-01-05 Paolo Carlini PR libstdc++/9168 * src/codecvt.cc (codecvt::do_in, do_out): Implement the resolution of DR19 (TC). * testsuite/22_locale/codecvt_members_char_char.cc (test01): Tweak. --------------050401080309090708050804 Content-Type: text/plain; name="patch_9168" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch_9168" diff -urN libstdc++-v3-orig/src/codecvt.cc libstdc++-v3/src/codecvt.cc --- libstdc++-v3-orig/src/codecvt.cc 2002-12-16 19:23:00.000000000 +0100 +++ libstdc++-v3/src/codecvt.cc 2003-01-04 17:24:34.000000000 +0100 @@ -64,8 +64,9 @@ extern_type* __to, extern_type* __to_end, extern_type*& __to_next) const { - size_t __len = std::min(__from_end - __from, __to_end - __to); - memcpy(__to, __from, __len); + // _GLIBCPP_RESOLVE_LIB_DEFECTS + // According to the resolution of DR19, "If returns noconv [...] + // there are no changes to the values in [to, to_limit)." __from_next = __from; __to_next = __to; return noconv; @@ -86,9 +87,10 @@ const extern_type* __from_end, const extern_type*& __from_next, intern_type* __to, intern_type* __to_end, intern_type*& __to_next) const - { - size_t __len = std::min(__from_end - __from, __to_end - __to); - memcpy(__to, __from, __len); + { + // _GLIBCPP_RESOLVE_LIB_DEFECTS + // According to the resolution of DR19, "If returns noconv [...] + // there are no changes to the values in [to, to_limit)." __from_next = __from; __to_next = __to; return noconv; diff -urN libstdc++-v3-orig/testsuite/22_locale/codecvt_members_char_char.cc libstdc++-v3/testsuite/22_locale/codecvt_members_char_char.cc --- libstdc++-v3-orig/testsuite/22_locale/codecvt_members_char_char.cc 2002-06-21 22:20:57.000000000 +0200 +++ libstdc++-v3/testsuite/22_locale/codecvt_members_char_char.cc 2003-01-04 18:51:34.000000000 +0100 @@ -36,25 +36,33 @@ const char* from_next; int size = 25; char* c_arr = new char[size]; + char* c_ref = new char[size]; char* to_next; locale loc; c_codecvt::state_type state; const c_codecvt* cvt = &use_facet(loc); + // According to the resolution of DR19 (see also libstd++/9168), in + // case of degenerate conversion ('noconv'), "there are no changes to + // the values in [to, to_limit)." + memset(c_ref, 'X', size); + // in + memset(c_arr, 'X', size); result r1 = cvt->in(state, c_lit, c_lit + size, from_next, c_arr, c_arr + size, to_next); VERIFY( r1 == codecvt_base::noconv ); - VERIFY( !strcmp(c_arr, c_lit) ); + VERIFY( !memcmp(c_arr, c_ref, size) ); VERIFY( from_next == c_lit ); VERIFY( to_next == c_arr ); // out + memset(c_arr, 'X', size); result r2 = cvt->out(state, c_lit, c_lit + size, from_next, c_arr, c_arr + size, to_next); VERIFY( r2 == codecvt_base::noconv ); - VERIFY( !strcmp(c_arr, c_lit) ); + VERIFY( !memcmp(c_arr, c_ref, size) ); VERIFY( from_next == c_lit ); VERIFY( to_next == c_arr ); @@ -77,6 +85,7 @@ VERIFY( k == 1 ); delete [] c_arr; + delete [] c_ref; } // libstdc++/5280 --------------050401080309090708050804-- From gcc-patches-return-75040-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 10:00:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26248 invoked by alias); 5 Jan 2003 10:00:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26098 invoked from network); 5 Jan 2003 10:00:00 -0000 Received: from unknown (HELO ngate.noida.hcltech.com) (202.54.110.230) by 209.249.29.67 with SMTP; 5 Jan 2003 10:00:00 -0000 Received: from exch-01.noida.hcltech.com (exch-01 [204.160.254.29]) by ngate.noida.hcltech.com (8.9.3/8.9.3) with ESMTP id PAA20722; Sun, 5 Jan 2003 15:25:30 +0530 Received: by exch-01.noida.hcltech.com with Internet Mail Service (5.5.2656.59) id ; Sun, 5 Jan 2003 15:24:17 +0530 Message-ID: From: "Naveen Sharma, Noida" To: jbuck@synopsys.com Cc: gcc-patches@gcc.gnu.org, Zack Weinberg , Jan Hubicka , Joern Rennecke , Alexandre Oliva , Gary Funck Subject: RE: Stack Reorganization Patch Date: Sun, 5 Jan 2003 15:24:16 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Hi, > On Wed, Jan 01, 2003 at 08:08:51PM +0530, Naveen Sharma, Noida wrote: > > Some time back we had a discussion on layout of locals > > on stack at (http://gcc.gnu.org/ml/gcc/2002-05/threads.html#02838). > > With that in mind, here is a patch which delays assignment of hard > > stack slots till after register allocation. It works as follows. > > > > A call to assign_stack_local_1 is intercepted and we return a rtx > > of the form (mem:mode reg/f/c:Pmode regno) for each > requested stack slot > > instead of normal form (mem:mode (plus:Pmode fp const_int offset)). > > Note that the special flag /c is used to tell that this is > > stack address pseudo. The register allocator should not try to > > allocate any hard reg for this because it is already a known > > stack slot.After register allocation, we sort the allocated stack > > slots by size and number of references and convert it to normal > > "fp + offset" form. We also have to mark them live at end of > > each basic block. > > The concept sounds promising, though you get into areas of > the compiler I don't know that well. The concept, somewhat, already exists in one form in new register allocator. It regards a psuedo greater than max_normal_pseudo as a spill location (and a stack slot later on). I have tried to extend it right back to rtl generation with slightly different semantics.Basic idea that emerged from earlier discussion was that it is possible to change normal stack-slot form to something more abstract and later it would give us more control on how do we assign hard stack slots. Although this is somewhat fundamental change, I am hopeful that the concept should be beneficial in general (and particularly targets with short displacements). > How does this affect the allocation for structs? It seems > that, unless you also want to rewrite the debugger information, Yes, Actually I have tried to present correct rtx in DECL information to final debugger output pass.As I understood, when a rtx is associated for an allocated struct which encapsulates its initial offset in frame. I update this rtx. > and also ensure that the address of a struct doesn't reach other > functions, the stack slots for fields in structs have to follow > their original alignment. Right? Of course dead stores can still > go away. > > > I get some improvements in some benchmarks (5-6%) > > (but unfortunately some regressions too)with this patch > > and would like that people have a look at it and It would > > be great if it makes a useful feature. > > My quick-and-dirty attempt to apply your patch failed to > boot; I probably Thanks for trying it. I would be glad to fix the problem. If you still have the failure message, please let me know it. > messed something up, but I won't get around to trying again > for a while. > In the meantime, I suggest looking at PR 8967 and seeing how you do on > that case (it's a case where we generate really bad code, worse in every > release). Thanks for pointing to this PR. I will test it and let you know the result. Best Regards, Naveen Sharma. From gcc-patches-return-75041-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 10:21:48 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31744 invoked by alias); 5 Jan 2003 10:21:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31737 invoked from network); 5 Jan 2003 10:21:44 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 5 Jan 2003 10:21:44 -0000 Received: from koffie.nl (unknown [62.234.210.120]) by smtp1.euronet.nl (Postfix) with ESMTP id E7F4A67383; Sun, 5 Jan 2003 11:21:29 +0100 (MET) Message-ID: <3E16FEDD.5A18B672@koffie.nl> Date: Sat, 04 Jan 2003 16:33:50 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: Gerald Pfeifer Cc: gcc-patches@gcc.gnu.org Subject: Re: PATCH: mirrors.html References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Gerald Pfeifer wrote: > > Index: mirrors.html > =================================================================== While you're at it, may I suggest changing "Nijmegen, Netherlands" to "The Netherlands (Nijmegen)", like the other entries (and getting the name of the country correct ;) ) Segher From gcc-patches-return-75042-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 10:29:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1101 invoked by alias); 5 Jan 2003 10:29:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1054 invoked from network); 5 Jan 2003 10:29:26 -0000 Received: from unknown (HELO book.moene.indiv.nluug.nl) (195.109.255.217) by 209.249.29.67 with SMTP; 5 Jan 2003 10:29:26 -0000 Received: from local ([127.0.0.1] helo=moene.indiv.nluug.nl) by book.moene.indiv.nluug.nl with esmtp (Exim 3.36 #1 (Debian)) id 18V5LH-0007ql-00; Sun, 05 Jan 2003 08:37:07 +0100 Message-ID: <3E17E0A2.8070404@moene.indiv.nluug.nl> Date: Sun, 05 Jan 2003 08:37:06 +0100 From: Toon Moene Organization: Moene Computational Physics, Maartensdijk, The Netherlands User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020622 Debian/1.0.0-0.woody.1 MIME-Version: 1.0 To: Toon Moene CC: gcc-patches@gcc.gnu.org Subject: Re: Fix for PR Fortran/9038 applied. References: <3E175F30.1020809@moene.indiv.nluug.nl> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit I wrote: > I plan to apply this patch to the 3.3 branch too, as it fixes a regression. Unfortunately, that didn't work: g77: spec failure: unrecognized spec option '<'. So this stays unfixed on 3.3. -- Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290 Saturnushof 14, 3738 XG Maartensdijk, The Netherlands Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction) From gcc-patches-return-75043-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 10:44:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3238 invoked by alias); 5 Jan 2003 10:44:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3218 invoked from network); 5 Jan 2003 10:44:23 -0000 Received: from unknown (HELO disaster.jaj.com) (66.93.21.106) by 209.249.29.67 with SMTP; 5 Jan 2003 10:44:23 -0000 Received: (from phil@localhost) by disaster.jaj.com (8.11.4/8.11.4) id h05Ai4Q24248; Sun, 5 Jan 2003 05:44:04 -0500 Date: Sun, 5 Jan 2003 05:44:04 -0500 From: Phil Edwards To: "Kaveh R. Ghazi" Cc: bkoz@redhat.com, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, gdr@integrable-solutions.net, libstdc++@gcc.gnu.org Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Message-ID: <20030105054404.A24241@disaster.jaj.com> References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> <200301050616.BAA28028@caip.rutgers.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <200301050616.BAA28028@caip.rutgers.edu>; from ghazi@caip.rutgers.edu on Sun, Jan 05, 2003 at 01:16:24AM -0500 On Sun, Jan 05, 2003 at 01:16:24AM -0500, Kaveh R. Ghazi wrote: > Ok, but does pushing files down one directory level require hacking > the test framework or will it "just work" merely by splitting and > moving the files? If the former, would you please point me at the > .exp file that needs updating? lib/libstdc++-v3-dg.exp: proc libstdc++-v3-init, location of the .txt and .tst files proc libstdc++-v3-list-sourcefiles, building the list of .cc files -- I would therefore like to posit that computing's central challenge, viz. "How not to make a mess of it," has /not/ been met. - Edsger Dijkstra, 1930-2002 From gcc-patches-return-75044-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 13:12:00 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28356 invoked by alias); 5 Jan 2003 13:11:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28349 invoked from network); 5 Jan 2003 13:11:58 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 5 Jan 2003 13:11:58 -0000 Received: from [128.130.111.39] (acrux [128.130.111.39]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h05DBiB5003935; Sun, 5 Jan 2003 14:11:46 +0100 (CET) Date: Sun, 5 Jan 2003 14:11:46 +0100 (CET) From: Gerald Pfeifer To: Segher Boessenkool cc: gcc-patches@gcc.gnu.org Subject: Re: PATCH: mirrors.html In-Reply-To: <3E16FEDD.5A18B672@koffie.nl> Message-ID: References: <3E16FEDD.5A18B672@koffie.nl> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Sat, 4 Jan 2003, Segher Boessenkool wrote: > While you're at it, may I suggest changing "Nijmegen, Netherlands" to > "The Netherlands (Nijmegen)", like the other entries (and getting the > name of the country correct ;) ) Done. Gerald Index: mirrors.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/mirrors.html,v retrieving revision 1.133 diff -u -3 -p -r1.133 mirrors.html --- mirrors.html 3 Jan 2003 11:44:41 -0000 1.133 +++ mirrors.html 5 Jan 2003 13:10:43 -0000 @@ -45,7 +45,7 @@ sites.

  • Japan: core.ring.gr.jp
  • Japan: ftp.ring.gr.jp
  • Korea (Seoul): linux.sarang.net
  • -
  • Nijmegen, Netherlands: ftp.nluug.nl, thanks to Jan Cristiaan van Winkel (jc at ATComputing dot nl)
  • +
  • The Netherlands (Nijmegen): ftp.nluug.nl, thanks to Jan Cristiaan van Winkel (jc at ATComputing dot nl)
  • Poland: ftp.task.gda.pl, thanks to ftpadmin at task dot gda dot pl
  • Poland (Warsaw): sunsite.icm.edu.pl, thanks to sunsite at icm dot edu dot pl
  • Russia (Moscow, no snapshots): linux.ihep.su
  • From gcc-patches-return-75045-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 14:16:48 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28599 invoked by alias); 5 Jan 2003 14:16:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28589 invoked from network); 5 Jan 2003 14:16:44 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 5 Jan 2003 14:16:44 -0000 Received: from tantra.cambridge.redhat.com (tantra.cambridge.redhat.com [172.16.18.34]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 6002BABB67; Sun, 5 Jan 2003 14:16:32 +0000 (GMT) Received: (from rsandifo@localhost) by tantra.cambridge.redhat.com (8.11.6/8.11.0) id h05EGUd14858; Sun, 5 Jan 2003 14:16:30 GMT X-Authentication-Warning: tantra.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: Toon Moene Cc: gcc-patches@gcc.gnu.org Subject: Re: Fix for PR Fortran/9038 applied. References: <3E175F30.1020809@moene.indiv.nluug.nl> <3E17E0A2.8070404@moene.indiv.nluug.nl> From: Richard Sandiford Date: 05 Jan 2003 14:16:30 +0000 In-Reply-To: <3E17E0A2.8070404@moene.indiv.nluug.nl> Message-ID: Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Toon Moene writes: > > I plan to apply this patch to the 3.3 branch too, as it fixes a regression. > > Unfortunately, that didn't work: > > g77: spec failure: unrecognized spec option '<'. > > So this stays unfixed on 3.3. I think the syntax was %{ Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2168 invoked by alias); 5 Jan 2003 14:42:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2160 invoked from network); 5 Jan 2003 14:42:09 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 5 Jan 2003 14:42:09 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 0440544FD; Sun, 5 Jan 2003 15:41:56 +0100 (CET) Date: Sun, 5 Jan 2003 15:41:56 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: [patch] add necessary dependencies Message-ID: <20030105144156.GA16943@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, basic-block.h includes hard-reg-set.h and partition.h but the dependencies were not specified in Makefile.in. This patch adds the dependencies. Bootstrapped mainline i386 (pentium 4). I'm going to create a patch that will remove unneeded includes of hard-reg-set.h where basic-block.h is included and remove the superfluous dependencies on hard-reg-set.h when this patch is approved. Josef Sun Jan 5 15:37:16 CET 2003 Josef Zlomek * Makefile.in (PARTITION_H): New. (BASIC_BLOCK_H): Added hard-reg-set.h and $(PARTITION_H). Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v retrieving revision 1.962 diff -c -3 -p -r1.962 Makefile.in *** Makefile.in 5 Jan 2003 04:37:08 -0000 1.962 --- Makefile.in 5 Jan 2003 11:32:25 -0000 *************** HASHTAB_H = $(srcdir)/../include/hasht *** 254,259 **** --- 254,260 ---- OBSTACK_H = $(srcdir)/../include/obstack.h SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h FIBHEAP_H = $(srcdir)/../include/fibheap.h + PARTITION_H = $(srcdir)/../include/partition.h # Default native SYSTEM_HEADER_DIR, to be overridden by targets. NATIVE_SYSTEM_HEADER_DIR = /usr/include *************** RTL_H = $(RTL_BASE_H) genrtl.h *** 576,582 **** PARAMS_H = params.h params.def TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ location.h ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h DEMANGLE_H = $(srcdir)/../include/demangle.h RECOG_H = recog.h EXPR_H = expr.h --- 577,584 ---- PARAMS_H = params.h params.def TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ location.h ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \ ! hard-reg-set.h DEMANGLE_H = $(srcdir)/../include/demangle.h RECOG_H = recog.h EXPR_H = expr.h From gcc-patches-return-75047-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 15:08:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12242 invoked by alias); 5 Jan 2003 15:08:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12187 invoked from network); 5 Jan 2003 15:08:34 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 5 Jan 2003 15:08:34 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id KAA08924; Sun, 5 Jan 2003 10:08:21 -0500 (EST) Date: Sun, 5 Jan 2003 10:08:21 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301051508.KAA08924@caip.rutgers.edu> To: aj@suse.de Subject: Re: Remove warning in unwind-d2-fde.h Cc: gcc-patches@gcc.gnu.org References: > 2002-12-30 Andreas Jaeger > > * unwind-dw2-fde.h (last_fde): Add unused attribute for obj. Would you please put this in the 3.3 branch too? Thanks, --Kaveh -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75048-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 15:18:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13981 invoked by alias); 5 Jan 2003 15:18:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13972 invoked from network); 5 Jan 2003 15:18:17 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 5 Jan 2003 15:18:17 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 39E6E454B; Sun, 5 Jan 2003 16:18:05 +0100 (CET) Date: Sun, 5 Jan 2003 16:18:05 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: Fix latent bug in optabs Message-ID: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, when emiting a libcall whose parameter is large (for example "struct { unsigned char b[128]; } bitvec;" ) the loop is created to copy the parameter. When compiling my testcase, the REG_LIBCALL note was tried to attach to NOTE_INSN_LOOP_BEG which of course did not success and the missing REG_LIBCALL note caused a segfault in gcse. However if the REG_LIBCALL note was attached to some "normal" instruction it would be wrong because the block between REG_LIBCALL and REG_RETVAL must be in a single basic block but the loop copying the parameters was inside too. This patch checks whether the insns between REG_LIBCALL and REG_RETVAL will be contained in a single basic block (by checking whether all instructions are not control_flow_insn_p) and if the insns will not be in a single basic block the REG_LIBCALL and REG_RETVAL notes will not be emitted. This fixes the problem with a source which made gcse to segfault. Bootstrapped/regtested mainline i386 (athlon). OK for mainline and 3_3-branch? Josef Sun Jan 5 15:47:06 CET 2003 Josef Zlomek * Makefile.in (optabs.o): Add dependencies on basic-block.h and hard-reg-set.h. * basic-block.h (control_flow_insn_p): Fuction was exported. * cfgbuild.c (control_flow_insn_p): Fuction was made non-static. * optabs.c (emit_libcall_block): Emit REG_LIBCALL and REG_RETVAL notes only when the region is contained in a single basic block. Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v retrieving revision 1.961 diff -u -c -3 -p -r1.961 Makefile.in *** Makefile.in 19 Dec 2002 15:53:46 -0000 1.961 --- Makefile.in 5 Jan 2003 15:08:15 -0000 *************** explow.o : explow.c $(CONFIG_H) $(SYSTEM *** 1460,1466 **** toplev.h function.h ggc.h $(TM_P_H) gt-explow.h optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ flags.h insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \ ! toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \ flags.h $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \ insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h --- 1460,1467 ---- toplev.h function.h ggc.h $(TM_P_H) gt-explow.h optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ flags.h insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \ ! toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h hard-reg-set.h \ ! $(BASIC_BLOCK_H) dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \ flags.h $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \ insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h Index: basic-block.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/basic-block.h,v retrieving revision 1.163 diff -u -c -3 -p -r1.163 basic-block.h *** basic-block.h 19 Dec 2002 02:59:15 -0000 1.163 --- basic-block.h 5 Jan 2003 15:08:16 -0000 *************** extern void fixup_abnormal_edges PARAMS *** 805,810 **** --- 805,811 ---- extern bool can_hoist_insn_p PARAMS ((rtx, rtx, regset)); extern rtx hoist_insn_after PARAMS ((rtx, rtx, rtx, rtx)); extern rtx hoist_insn_to_edge PARAMS ((rtx, edge, rtx, rtx)); + extern bool control_flow_insn_p PARAMS ((rtx)); /* In dominance.c */ Index: cfgbuild.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cfgbuild.c,v retrieving revision 1.29 diff -u -c -3 -p -r1.29 cfgbuild.c *** cfgbuild.c 16 Dec 2002 18:19:06 -0000 1.29 --- cfgbuild.c 5 Jan 2003 15:08:16 -0000 *************** static void make_eh_edge PARAMS ((sbitm *** 59,65 **** static void find_bb_boundaries PARAMS ((basic_block)); static void compute_outgoing_frequencies PARAMS ((basic_block)); static bool inside_basic_block_p PARAMS ((rtx)); - static bool control_flow_insn_p PARAMS ((rtx)); /* Return true if insn is something that should be contained inside basic block. */ --- 59,64 ---- *************** inside_basic_block_p (insn) *** 97,103 **** /* Return true if INSN may cause control flow transfer, so it should be last in the basic block. */ ! static bool control_flow_insn_p (insn) rtx insn; { --- 96,102 ---- /* Return true if INSN may cause control flow transfer, so it should be last in the basic block. */ ! bool control_flow_insn_p (insn) rtx insn; { Index: optabs.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/optabs.c,v retrieving revision 1.154 diff -u -c -3 -p -r1.154 optabs.c *** optabs.c 16 Dec 2002 18:19:44 -0000 1.154 --- optabs.c 5 Jan 2003 15:08:16 -0000 *************** Software Foundation, 59 Temple Place - S *** 42,47 **** --- 42,49 ---- #include "reload.h" #include "ggc.h" #include "real.h" + #include "hard-reg-set.h" + #include "basic-block.h" /* Each optab contains info on how this target machine can perform a particular operation *************** emit_libcall_block (insns, target, resul *** 3309,3318 **** /* Encapsulate the block so it gets manipulated as a unit. */ if (!flag_non_call_exceptions || !may_trap_p (equiv)) { ! REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last, ! REG_NOTES (first)); ! REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, ! REG_NOTES (last)); } } --- 3311,3336 ---- /* Encapsulate the block so it gets manipulated as a unit. */ if (!flag_non_call_exceptions || !may_trap_p (equiv)) { ! /* We can't attach the REG_LIBCALL and REG_RETVAL notes ! when the encapsulated region would not be in one basic block, ! i.e. when there is a control_flow_insn_p insn between FIRST and LAST. ! */ ! bool attach_libcall_retval_notes = true; ! next = NEXT_INSN (last); ! for (insn = first; insn != next; insn = NEXT_INSN (insn)) ! if (control_flow_insn_p (insn)) ! { ! attach_libcall_retval_notes = false; ! break; ! } ! ! if (attach_libcall_retval_notes) ! { ! REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last, ! REG_NOTES (first)); ! REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, ! REG_NOTES (last)); ! } } } From gcc-patches-return-75049-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 15:27:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15574 invoked by alias); 5 Jan 2003 15:27:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15554 invoked from network); 5 Jan 2003 15:27:02 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.78.1) by 209.249.29.67 with SMTP; 5 Jan 2003 15:27:02 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id 42A8B5DA5; Sun, 5 Jan 2003 16:27:39 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id C84F9F867 for ; Sun, 5 Jan 2003 16:27:38 +0100 (CET) Date: Sun, 5 Jan 2003 16:27:35 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Re: [3.4] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-185789815-1041780455=:2215" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-185789815-1041780455=:2215 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello again, one (hopefully last) update for DESTDIR support that has not occurred to be necessary until today. "make DESTDIR=... install" tried to install libiberty/ stuff (not $(target_alias)/libiberty/ stuff) first and failed due to a missing $(DESTDIR)$(libdir). Relative Changes: * libiberty/Makefile.in (install_to_libdir, install_to_tooldir): Add mkinstalldir command. I have attached a patch relative to destdir4.diff as well as the complete patch and the corresponding ChangeLog entries, in *.tar.gz archives. The ChangeLog entries are available as context-free diff and in plain text files. The long file/target lists have been reformatted according to `http://www.gnu.org/prep/standards_42.html'. When you test it, be aware of an unrelated phenomenon: If you configure with --program-suffix=-3.4 (i.e. -$(version)), then you may get an additional $(target_alias)-gcc-tmp installed. See `http://gcc.gnu.org/ml/gcc/2003-01/msg00089.html' for details. Regards, Christian Cornelssen --8323584-185789815-1041780455=:2215 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir4-5-update.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir4-5-update.diff" LS0tIGxpYmliZXJ0eS9NYWtlZmlsZS5pbn4JMSBKYW4gMjAwMyAxNzozMjow NSAtMDAwMA0KKysrIGxpYmliZXJ0eS9NYWtlZmlsZS5pbgk1IEphbiAyMDAz IDEzOjE2OjI5IC0wMDAwDQpAQCAtMjYyLDYgKzI2Miw3IEBADQogaW5zdGFs bDogaW5zdGFsbF90b18kKElOU1RBTExfREVTVCkgaW5zdGFsbC1zdWJkaXIN CiANCiBpbnN0YWxsX3RvX2xpYmRpcjogYWxsDQorCSR7bWtpbnN0YWxsZGly c30gJChERVNURElSKSQobGliZGlyKSQoTVVMVElTVUJESVIpDQogCSQoSU5T VEFMTF9EQVRBKSAkKFRBUkdFVExJQikgJChERVNURElSKSQobGliZGlyKSQo TVVMVElTVUJESVIpLyQoVEFSR0VUTElCKW4NCiAJKCBjZCAkKERFU1RESVIp JChsaWJkaXIpJChNVUxUSVNVQkRJUikgOyAkKFJBTkxJQikgJChUQVJHRVRM SUIpbiApDQogCW12IC1mICQoREVTVERJUikkKGxpYmRpcikkKE1VTFRJU1VC RElSKS8kKFRBUkdFVExJQiluICQoREVTVERJUikkKGxpYmRpcikkKE1VTFRJ U1VCRElSKS8kKFRBUkdFVExJQikNCkBAIC0yNzgsNiArMjc5LDcgQEANCiAJ QCQoTVVMVElETykgJChGTEFHU19UT19QQVNTKSBtdWx0aS1kbyBETz1pbnN0 YWxsDQogDQogaW5zdGFsbF90b190b29sZGlyOiBhbGwNCisJJHtta2luc3Rh bGxkaXJzfSAkKERFU1RESVIpJCh0b29sZGlyKS9saWIkKE1VTFRJU1VCRElS KQ0KIAkkKElOU1RBTExfREFUQSkgJChUQVJHRVRMSUIpICQoREVTVERJUikk KHRvb2xkaXIpL2xpYiQoTVVMVElTVUJESVIpLyQoVEFSR0VUTElCKW4NCiAJ KCBjZCAkKERFU1RESVIpJCh0b29sZGlyKS9saWIkKE1VTFRJU1VCRElSKSA7 ICQoUkFOTElCKSAkKFRBUkdFVExJQiluICkNCiAJbXYgLWYgJChERVNURElS KSQodG9vbGRpcikvbGliJChNVUxUSVNVQkRJUikvJChUQVJHRVRMSUIpbiAk KERFU1RESVIpJCh0b29sZGlyKS9saWIkKE1VTFRJU1VCRElSKS8kKFRBUkdF VExJQikNCg== --8323584-185789815-1041780455=:2215 Content-Type: APPLICATION/x-gunzip; name="destdir5-changelog.tar.gz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir5-changelog.tar.gz" H4sIAN1LGD4CA+1a3W/iOBDnlfwVVtWHsm0ghBCk1el03e3eXSWuuyq9h3tC xjHgbbCj2PRDq/vfb5wPCAE29K5sj9a/lygTT8Zx5jeemaTZmhDSwgFufZxi PqF9MWkGVKqAxbXngtN2HN/zag6g56fHdnau4bX9GlxwfMfzvK4D472e160h p/YDMJcKxwjVyDRm8rvjaCxrrw6u43Rsp207XYQ+6iVQDHP0UcSchlJSjtBP hMDZL0Q21dwe0ThkHDzkZ8uqv0N/4Ftqh+A3TcbRCXgRHGE9w9BmfCzOUFFC xGwmeMOqJ+PmPJM33qMvMY0oD9DxycWnwc3F5XUDKYHUlCLtiYxjxQS36uCS lCgRPyIwBproZM4b2V2SIUibwDyQzXxuYxbSZGr5JCZws5CNzlAuiJWEGVww pUTTsmpvDs2E/yTaI/2r+a9lq/z3XcP/g+M/OT0tsf0MFWXATU1/Laqmf4H6 KMJqKoGyVr2K9hvmABau6X3MFAUL/avGYri2IudRJGJl1TPT6J6pKToK+RHC Et1TMKePmRDZ8uiVRYmU/+N90r+S/x2vXea/57mG/4fG/3Gvt8b/okznBDoA FGXAxHRQZUSABGBDSKhKBN7glv4v+P8V3+2xAKjif7ftlvjfbXd8w/9D47/2 orUAkAiX5Ab6rwxL64QVkU4TNsUAq74lLagsBjbNbFta8MaygpT/KqZUv8b9 xIDq/b9b4r/vuGb/Pzj+516UM62ZMq0ZCE418cvXM/IvxBtSAKteXRVspL9V NznA7vzfZ/ZfyX+355T3f891HcP/w+D/osf2+fri8ur8+q/hr/3z3wbDm8/D L+eDAXD5PJQC2Colyqist+RFR44QWwkRgtMtu3IkihYncEE2Cgp5YpGfBzG7 owXdNKiUeg756ZTiAN5jcTQJ5wG1V8xno2zwjA3KMDsm1geTqGD1NpOuTjwM KVHuGdpTrbM0la7JLp2P/JVY9R1ynIWB5J28RwM2i8JHBNRAs9vCpeJUQjaC V1xYmnmoGAi3+MU7uFOqAj61rTd0fAJD5HwEthp6XdSUWvWVRSku3x2OGR6F FOm5JSaI4GM2aeEwmuKWsoUce+hk8Hv/8sPw8mpwc97vF19MKQOFcwnmC7bR 9iZ0bimegR1O1UgG65b67JbeM0mLGgz7HqhMo/nDbgozFklQYEDhru3vphPh zIQtp/BIuynF0oegDYqYPXidp+t03d10lC1TR7BpOLbBnZ+qJsMd1xrHRE8t JsvvBLmXaul2km7ww+/4QiBIK8+MFH1gQIAg0NL5jHKVKoxFvHoHxrWhLEBK pAuUhJMLxlj/df+HRxi75CX7/x23vd7/N/v/oe3/T9n2d9gDVz/+mX7fvvJ/ 4D+D16oe9xYCqvjv+r1y/8/rmu9/r5n/QyWGaRK1yAy1KNvnGunWiFezykVJ b1j+zPwXo6/kBf//6XTK3/+7DoQEw//Xy39dFsq1Gtp8+nsZ/gPdyempfdd5 mf6/33HK/O/6pv9/APzPumetRRzAs2UNHWCF7VAQ/Mz9fIT+lBQdfyPDEZZ0 OJqzMABP/Tspjo+/gdsuZVYdyxUjabWe/EfIaNIIw2TK6B3VzQAJj085eUxK bKg5YBwNGJ+s5iGoMJMrgeh4DLdDI0qwboSNhFbNe056MNT28FBHzSMkePjY 3Lhuutd1TSeU0xgr+gNjV3PPvf+d9v+1/387nt8x/D+g/V9FQNkP54NPT2v+ p7163ZZN/g3a3u/Vl3VhUP6z94VYY2BgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGDw/8E/Ktf1wABQAAA= --8323584-185789815-1041780455=:2215 Content-Type: APPLICATION/x-gunzip; name="destdir5-diffs.tar.gz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir5-diffs.tar.gz" H4sIALNLGD4CA+w9a3fbxo75av2K2USntiJR74ejND12HTf1HsfOsd1tuze9 Kk2NJDYUqUtSfqzj/77AzJCc4UuUYsfdu3F7ImsIYEAAA2CAIT2mnj823Z5m zHR7Si1nWh+bk8mzh/xptprNfrf7rAk/gz7/bInv8NugOeg9gwvNfrPbbfaa z/Bie/CMNJ99hZ+l5+suIc+MmWt6uXDU9Z792/0c2WN6MyQHTPvHzrT05st/ SmcH52RiWnRIGkvPbViOoVsNzzUaxpXXmBqGJj4b4bS1q5JLfdekV6Y9JS58 eKZjk1a9390toUES7Zcm0Vw2IHGraVr0bavTIm+pQdrNZhv+Gbaaw16HaGhk W5xStVqVwcl/6jZCd0hrMGy3h81dDl3a24Nfak1SbdX6ZG+vVEUgrdnSmj0C BMBSfBNQDxzXppbnUZuQ7w0Dvu0ZXt1fapfUtUy7PqY/lKql6tZL8l7/RFEi dX9hkZ0f988PRz8d7787H12cjj7sn59XhmTf8hyy0D2PvD08v3h7dFYHzB3T Bvu0LM20J06NwEqt428A/sGlC2qPSXlHgFeI78A3vAxglbo6r2kPyRmdUpu6 uk/hYkloXlHD19V+MQto9dvdrmoDbChmBQoxRbVgCP1hKzIEThBNIRsn0xw6 zYe1B9MmO6dnb49O9s9+X9MkUJS+41ig7RoJBo3FIvwCF7yKjGE487ljR8Bj 17yiEjI3suDbXLcV7BnVx+ADZXDDWo6ppjAgoDTwqmnYwKDpJKGNhTTvJzEa 492yqOG3a2Rpi7GsVQBoYwhrpq37aEIL3Z95QJ0ACtlZ2hWBzq+iTHR77Cmi 5YKp4JK5dk2fAv3jk0oIiyvNWy4WjusHmgHsa9OfkeeW/ZzoHrmmMBl+ikGi ec/lKZhuhuTcnC+sWwLBhcw/SZcUbizzEnQtCWhp+SYMZlnIS6DFcdiyz/IU AOItL9FXoHD8GQVURTSyEK9019QvLUqQPT6J4dgTc9rQrcVMb/ia4026ZOf8 5+OjH0dHJ+cX+8fHsoKi2QEZ5y/veMCBND3J1Es0lzuHmWzqX3rj5FzH5id6 bXpUQTH1fhdwZovlTUGMubnwAMOEVd3T+gWRFrqYRPNmcFsFsVyvD/4FMHXz ptvZAKnXLojkax43CY1aEw2Me208zyoqch18PXDnGmQnbrI4mrNsU4wyzyrG jtEQl+s+vTFhPYzHOLqcU9vnGBPHVUmYNptKeE6PADm+SqMVJMdGfaw/ZXxU ps+Mke1BT42QMJASHxViW+1dKVtqDTu7w14rDJJIMQiRKloyTL5KhsnBg0VJ zYKJWZgENupqpJJHeGxjIQOHVwYJZluSh8OgYboQYRz3tlCwiAXxMCoDOTDi yFu7Pjr6t6bvOzHTMhZPaVny7JmG1Wm1W6pl4UiKacnUZBNptoetlmxYjGJg WVlY2Ya1+wiGZVSr9XiKJI8FiRCOrbartNQDsFcnH0k2iiQggClmJ0USENn+ Jk9pfpMC1tdrNVXjg4EU25NIbbUkI+oN2/1hcxCaHpILLG+yruH1H8HwJoNB wvDkMbbVQ9OQB8EAONSj5cGyjfylXz1p/FPnz94ktpqD2B4RRlJsRaW31ZZU DyHwleypGM3AXmJ4CZMBw/wqvgr5SNgMG4zMAS1GgePRUhlCn5ZmNjw533D7 lMJclgt7GA/mu5SiaJ7SQpM8ZKdpMXfWTvNmSXppmVo3ytQip5aCmjTU1tfJ 1gJeAnuoc3uojx2bMguNAwgrDYdT3BvbIayKtal2CpgpDg7ytEn7ycpf8dmz ndturAYKAzHDidPaakkm0+oPO4NhKzIZJIg2k8AqZC39h6+ArVX4KlABiiX2 a0c+EIwJHPu3T2gbcQayc/RXMfOAgaR5xMltdSMDaUKGDuqOMiUkKQwkgdeT bKQz7A6Gvebfz0ZGvjPi1aVwI4ZDYtNf4YUCXa25RT5CtQTn8q+n9BHq9JlW EPcRaS5CJbXV6ks+YheXu9QuiVxEDCvpI9p/P/1jzdRLlJkfK1HGyfwx7N+0 q84TWkoKD9kxpbsbKxnhSNJkUmjKSTOov7s7bEWeg9EVhpOGW8h6Wg/TZBH9 iUZoRvo8qtOMdV/XmDgfOr8g5BcPst07Y3Spe3R0uTStMfiXe1ZpLN+BVKIx LAx4yjS8+snqUCZlG33dmIH+KFZXPZABtY1blhNjYANAOkbVKp6MSLycOIRO JkCPXFJDx0bDpcNwg4o+Qtu+Djf2vP6cOLZ1W0+XXrKF+Ozbz//1n3Fw/mPs GA9/8qPI+Y9mr90eiPMfnW63CeOtTrvb+Xb+4yue/8AIEu+mfP2tdJyDnDMB wU56KQ4ENInCerCZjlNMHgzoNKWDAdFWOhexjelyU057W51XmPRU2We3h+EL Aobre8SZsE4DeOQFiAF7UWQPBXK3Bw74jueo90wS8Pv961j3yrRLBPfF2Maa 634MW5z1uL8nOzZet6xb+TJEh4l5c99AsPtKvURK1SObOC6kQnIHm/XmsDE3 M32IE0tXt4h3C4FmDhnUu4ODbciM6Q01lj4PF7pLie34LFQEUqdj1leTZ780 bcZbrVT1Z8g6UJMuI0Ut4BBg72vkcukTHcIi3jm7F96qy0JiI7B4p9TXdMvU vYCOiSKHGcN+DvIPkRPD4cXtwjSQeA3u35iRvfHEvgt6gfdkBr8QQdNbUMOc mEapCmSXvmmxhBKDIlojJJ50fokaxbAOiccnin1xFHGs2Qj7DJAliFp3bwlc mzJ0l+qEtSYZAHgfB0T6l25axAA7u6Slqoj7ojspjAjDOoiE3ujzhQVAc4jO QQL8hmsd8hTNdzQkyNIOoSLEAk5DzD3bAQ2BpZHrGQWVZiB7bGb90nOspU9Z FoQ2rcvSdSneLqQocC/XMxPEijmSkjXz7OnahPFL7On61AU9+pTttaq/eCiT PcMZ0ztxM6ALyIw8EADaoz6+0mFNTMH8HGxeBwI1LZieHV2MCAj7IOOli4My G2AA7x0PbBGxfaBY4+cePOr7CAs3FmMC7t9GHoIFLOwcLELH/KwGK8GFNUth jZg+AbMBDTsugC0oLEgbxGvxdqJ9K9rjsL6QFbAlsYR0lp4hAVlgO2hWYaFD oDi2QYlYTWSyxDUiVjEdV8BiAIVbDxiUgxmy7l6aPpcTYe5DmsE355QJxKUo 01okhpgMQL3gtn1c+nG1Sqkq6CFIUH1cXiA1bOADG6BFH00DtAKCudKtJZAS 2lFkArbwE4hTmGgtvIiAbBHseXDlTtOE43vDYoo3g8XEnRzB5QCc8BsI3CNB O8f8Ho09VLEwE+52lJviyTWfK3dp3ZNrZwkOAzYhKIbIHTKfXaqi4/ISjjFO JX4TLGn3uZ7Rd9JoqRHhk0CMl7dxNdkUhtExM2dHbqn/mhllsOgMcDk+GvAE QA3qeeCP2Oq7YOsfLErH3YdvwSoH1+ALvyOdkwgEG0w5JEcTcussQwtJHthA B07r0/rekKQINBQkW4f8vIfkVyShhcIqHAfYfYPvpph/WIEbHS8XlmkwOUBo I3Jc4/FsgutSt0BW41suSa8WiRHFK4kSdlLUZedfILLMQILwv0unOoTYMbYu dDIBwKVLgQSisqHL5bQWbsbQaYDnBE9nmdMZmtAc1iPbkrmOFZxTWOjGJ3B+ WKNaMleJgzH1i5lQo4FacJsJk6J6KGxFYe0BCdQKLAK8e06L64UFkkuQsgf+ YnHP9bFgeCXyr6VpfALeMAWj12x2toXFcOYvPeBvStlJG5jVDaarEf0K4hk7 NTZxnXmJ7AF/k7uZ7y+GDUx56lN7WXfcaYMRQ1r1mT+37uvfdpZfff9nO5o+ fZwd4Ir9X7vdl/d/Pdz/9Zqtb/u/r7j/k4o8X3fbJ02cU6vsqLu9bkdhGDd7 0vf8xwCQGG7yZAT50MirYXsA2ztpb9fZ7eHWDj9Yo5RsPT/47TdWjn5T3gl+ rTwnH+VLo59Oz0YX+2fvDi8kKGlUQkjAxsGqW8+DuBkVKAX+2+Pji9PTY5VG cjAAF2c3ASY4xaleGL3dv9iPrrKvDIRtc2GZghCq8DkQwpC7t0PIhDV5IHxg ASbw3vxpYN0drABbMK9J+e7Dr2/v/3wNUZbtQ73XjBGIwP8g2iREJX+Q1zwa fSxpW4TEWIvgomcfGuHYaya8XKRAnFnoZItaEKh9d0nh+8SEbTRh9qwZEObs IRdMuzlggmk3d4VgSuEkCbFIdxnKo4FVBrjWmFKbAeGx+uS950JHt5ACGXCj 4d7JwmTth5DDug1RPZLVikmSEtt0OgLTza9kbbNLOfLH76CDb4H7MeL//Eni f7/V70vxv8/if6v9Lf5/xfivdOtSOj9P2MtM4Sb7wOiukij0dhN5wirSalP8 1RCPRuxGJ0h3k73NNCJd9RTq7rDTlxKK/u5urdMmVfHJUgoCPxol217tny8E RfL840795cfK81o48v2l6XuNj60fatNt4T4J+R4iqe/AVu2KWiPuhllBuVG+ mwKnxmIx8me4nx3N7sEJl6WgHTVBhxBfyjtKFxG8+t305mYkJh+xfmUhKJgZ GVXanEm0KI4kp1kTPjkhRAnYjqI+sPomLotjAKzKnpFNlMt3iHRf5K6QjE2L iwQ28de6q3Z/8zhY54YFLxvILclVQnYByJfLLzHZmjKkN/5DiS+LlfVFqDIV lx5e/WLBKVOsKbP4OYQvElsaI+tLLMFSXGgCQMht5FJbn9Nc8SVoNnIkGjK+ JqH17krMQrZidwMydPWRkNeb7fJO2vXK9uuPcbGU8wjl2hYjsY4bySaygVdC CWD/RPfNS9My/dvwDhQhpIPkSSOX6CYCWXNpxc/ybCS1jVeROnt8CeHVddaP Qq3A4ikqI16ZXyWmzOnXEMHGgkywGJelAAjceGKEG+k9T8ngIk+3YlgbO/84 e7mLtJjcMkiSEnlBfrxlXXjeZfBY+4R6BHtENaIvfYd1Clg3xKVz54o1feas +r/NLrGyyDZQOjg+3D/56ej48Jy8gTsDbYBK5gvv/tv2/W+3/3+ss18r9//t XrfT6UT7/9YA4Nu9VvPb/v8p6v/+wnqiBgDMnPN8u7Kvbw9UhpUGAAxstV+p m/jusNuUHm1XGwCI0FKPJfeHna7SAdjlHYDd//cdgH6ng3Xufqf7rf4v1f/B raFYBv3et+r/41f/pUOrT1ajLNq8fNVvKb4LvieKkjFaWy3ZffWGvc6w2w/d FxIMTqkqXU/JhXWHgNZpxWqOfV5yDFzYj0fnpyewztln4APYl8CzRV9CVxU6 PT4Mqv91/+xkdBBB5XmqdwcHqpdSBwKw47fBNOK34MJPx4e/wSh+hB6p3dll PUn4HISLr/7h59OT34ck5V1ZpbRBXv48//kQvCFuRkQVVX2qorwDGOEzZGyf sRIjWi0KLk+02REafirOcBb4uIczEUdvedZdLxHPny80gIEEfkj4Z92bkSmA WeYcdtv1GRfDYNCvtQYdEMRgMKi1+h0mihfkZ90ewz7GWCzUo5Al+Z1hQ7xe 3qE3FHYywN6WFrgoZvOu43nh1bhbcufclfEDv5UGGMeHD6ODs9Pz89HJ/vvD Soj5OuHCP5ydvjvbf18h2pwMej2Fi8IkqxITkbyL4xZmZ13i6OCYHG/KO1iG D55EZE7zP96QG/KHIsnoNvjZNqQfxysg3jXuaON5qgq7kWC+kOAGqth4RtRO GFwwskvxJs+yAw4f1LaziRax7nzsL7bvbPKPaOH5Yn5IG8+X3kZWvorkY9h5 vpZSLJ3nsi/IATvNmjy7Kx3urpeqL/grA9mE4nGVoPdJTM/e9omxdF1+4N2j +DgJP6UM3EaxBqMixloRXsaReqKoInI9xvD8E086A6DXxJjNnTHRq+6NMgz3 olDFg72jQqQVyBj92LX4JMH7C3PpB0Ax0tFwBtVAyIWoh8Dps0iXcbYX/LAy UlipOe1FDm+hAazDY4iUz6sExiU0wRP/+A2fuDDZk1R/UmMWe5XlZ2CBbDe2 Cfz3p1RyZdhYHg3qy7zsyS+GNyiu596PgFG5DwcnJuFURZFcEp5wqvnCCoBi womG4+YixLSasgwYo65eSs4g9nkryAuoBO1wPE7YK7SAvIwV5KlL6AX5lWIV G8x5GWJrCzxCb0QObqGjobNEe67bLXxBBKIGx/E9Z06Dh98EseAxOdPHxUDw 8S6qj2vkmrJ5fFxJPtihbf5rSWOzmfM5CFX3g3mlaesoCj76JjBjcanyGc/q s9Mge41//LPxx8tyeW8PrRntKrJVQTPXVgVMzFjD0bhGAg7yNRJCxTQijacQ HhQiPMggPIgIr7nxipzDuphi0a2LJq2m9VH5YlkXL1gL6+IFGtsAbxBtZMUj j+qDrvKjNfxBlOCRL9xNCrjEVpS9JGpIbP48YXnn8LeLs/3Rh/2zi/MKUV4X xUHjrbqdg9P3H46OD8/OK8L5hykq5nC8GxvbwEYZXmQqDQ6am26Gvd1UtKzc MQc4b44VBGIpHh8IEj3RhFcFFUj2/PyQ1XHEdz4xG/nl/HB0cHp8fHhw0a6Q ej0u0JvnfP7nLNOv1zNz/X8bsRYSKDPVx5ZW7HRBDo5wpNrNo0g065RDHrbM 0ZfI/wV5yyL0nHriLYH4eKQnnuHDh3Lxavg0ZF0ua3HIjEqWxAqDe53ReuBE suEzRB/CpG/tsyCzZl+NuVLgITTfFEYefeE6vmP+DxUyvda98EFoRZwBnFQk 5OSEdPlJ1aI1xa1k4QVW7sXp0X8f5hS+tlLWeZKvdYkmWfnlZENmlnY+OwUI VyOG0oo1RfALSmlT8nnsFbvBwpLbcApui2GZL8/Y8mpQX2BuuWRzDW5dhtYw ubySVTGjy6XwEGa3MYtFb/OhTC+/FEeiIkFG3D///fwA8M/rRv237OgvQxXB zwhHceAC+UA6ygr+1qC0MmDF0eJxa2o4V6tiFsJkxStVM4GOFYzcHFalLVvJ u4PT/9qg4pzJQrUoC2kmu4IZJlVNWhXnB2dHHy6QtnG5nMbu6+DHX96pxNiu MhM3naEUKok9Jv/zPOg/pq4+x7cqlHfEiUb2AoiKxv5eDqIFF7ToglbeEe9B qCAEvjRFx3dJAhlq4gsdkEWyg6/JYLvQCr6nR+3f4gsm2AsMSrG/pTSUC93k BkAerKmKrfI1m6op06xDMclDQsiSLCM+8DXfReYpTJok6rRJbdSzd/Vpmiu6 jFMEuJLcqo5dntyra2hyE9p5fK3SLuLvEGOchk6++05yRtwCcvSeq+1wskjd 6ccokorPcp+FdLaJ5FcS3qTLjIJbu8usOJs1yT3kSk+faf21XoQnf75IEc2D cZVGfn61BlKCDX7O6Qu6/fm6rBYzjc0If23XkamyYs5jPXbjqn5khhUjkcjx 45AFzGqlMZGK2uSX8yf+RklxwOxFIm+f45uo8DVX7M1RvBKPLy3DZ4hqBDKl a4qvmcO+sXgdHm8YIC18abIjHyWoJ48IG0qSlPgbENg4CpQXHsnFXjR+eSkP 8r9wCINZKOw9gzZkd6m4cFWgVyP0lOPA8twplyMuVpJJ8pNOL+JMPisMklMm lCrIrNqP1Wheig4gZc7j2C8Z2pYCnORPwgqZkirbsMyobqEpBU3M8oR8JmH/ 8nP9ZePjDuthfqyUy58/tj4HfcyMOrKso3I5oJ5bek4Xo4qMzGLVOHammB/o Zol52P/SDLKtHGLXNOFdtskPjTG9athLWEjtH75rKQlnpCj5IHk8O4mg0g+e y/CiWBDoNdAmCQ1A0gpJqC88/LCVwhmKTW5AIGfqPQOYxhQb408lIgonuXel zlXNnytDKlmEuT63UjIsFF2k8ewkLBxCJyIXHtbwPVloa/if9JLHRj5oNakN /FA8hsx1m732z5McPIypG2CIU4cnh2f7F4dvR+/3Tz7svzuMt3EBZ7OdcdC6 Ttv04LX0dFk4DcUbttakJsu3KF56RrIO9up72IxuurUUpZC6k4khxxKUL1bO Cno56snBLKSgFfhfoKIVlAspKYeGqORpCQ2x46YBJEJk3wO6oFYubqrkE1AJ HnilshgTCKtykcROZSMJJvHBzrI0Jt5EmyxtfPSZj65mR0KpDwrRijG3AjrB 43Qytooyh7AqV0nsVHaSYEk+FsXZWMS5WBRiQoFKTa0zbKxaxIqLUFmx6hLw ORzGzK9ayMYL0VnBZBIhlcs8O6yuswLWoZrJ+gq8nDuImW610PooRGcFs0mE PC4XxZlcZPO4WJNFBT6R0Vnm/7b3rF1t5Mjer+Tsj9Bh2OVhbPALsHMyG0KY JDMJZEOyO/fszJrGtMFJ+zHdbQJnkv9+VVI/JLWebRNm7tpnJjbdVaVSqVSS SlLVRUhCgiMmiRYeuEh0OBjARp/SXx47y6PXzzp7e3DBsNFpp7fw8LD15vCn 49N/Hr979wqz8ySZiHPXjFcl94wB6N3hCWSaZy4LruIFXW/Qi1eTITG9ZLgq 3jJEKNsohJf5rmH6OjksCS/Tc5PpK9xgeWXTxAm0fp0Grd9B6/9j/Zq7u/Xt Btwe7HRa8INeHvxheIuiuxGkt6C5qNg8ECQbFuPqIckR6Jn9PGJ9PAE6NKB8 PBHAM7BtElk9jyuevajlx7xIfHtMAk5dvz7pnZGQJCgaQk6Ezz5xRAR3sOYl gCRfLNncG0Oqk4soHsaY8Yicuya+r+Q+OrOrnHAPq0GMV0PV+G6K+wWqTkNg v5Gv/s/pxIwjJN2odiSZuHvW1v6Oqv5vaFdw8UCrnvczMTN36HMX0JAGRyKc MfcfEMky9uQ8iFA1kNcbr6eHqfNmjNajndpW9Xu0szNdP8/9LwIVXaUN9LIz Yf7tNERY/YH0KuqSn8OwtrWKMHQqHmFvT3psgin3MQNJVSH1T6UsrUZf6OH6 Lzu12per1eTxegR/r619+bJ+TlEyzjI8wt+XL6vn2uIrAqMmUbE498qyDSPp OZWi70y4NTaBeP/MlQfYO8e6fQN/p9aAHA5lu3Tu/iEA4P/hHAfplDOUNzB+ zdwtKr6siveKRJAKQ14nDQyYFmQA44vUAkvc8aLRTJI8eCEjqySMVBU/7dJb 4diAVK8viZvl7P2bt70fXv1MTiBtyuSbWPkGuSvf3K13klHsO2w08BwLjMbR 87eH719uk3Qms2mc5pmYzOLpLK4huF/TJ/lOPs6iGLc65Zdk0MFkKBjccMEW ap2mVaHXaa79ANuLADLBTMYZXpppBa5xbWyuR1i1NrBpO09MGnP9i/RkiNJT 7Q9QFdUgYsgwRrtw2WtDacMB4XYKCDA30uPrTTdLCVeUbPNG11AX7rpQ6Mez cEzzJSV5MZLkXwOs0jGQ2U4PnJAcPpCqh0iFnF1+cfKBlJQmUPrs3UWIZE4n eUTA5XwRTPqfyIh4RofBc1qRdRgWh1djyBwyjCNaPcpCLWn3Znt7/wAavnEA P9jILali9afDSSnNAn58UN+oP4tI2AvvAmsDqTpwCSox/Xx5Do9vSDRAZTOn oyQdHb8g4An/dTkbqTqyFmMx/bA/rcmkVUpW1ZX+FG6lVcOsOOGGkuS99C4T Zn8IJw8isE9PRPHQksn7fAY1ZCqb1AN36+xGW/ram07DCZYnmPCoHw6ncZTq bXIZDqRCw8LRKxC3Ca9kjniB52IzrNkYnbVfo09JkWXkBiMP2R9NiaDbLPoF O1ZkEtnkAnpk8WnEG005vGFsYAhXbAjLMHPNE26OfDg7ftd7yV5YKu6qAbDN xhpSB6HMd92KPDHbZYjdbNPVQ8RBK1lgSL78rK3kRWctWdFialnJaCQz6Ntc q16dHKWxCPitteKiO23Nd8eHz98cJ2FX9HKjoEhzMCcP2sIRyB8bcRPYQEYg QGo/elodNlgMT4N7Y93uTJ0r5jpLSfG1r1jWXkMqQGovvEIOUmoFiSQ7HN1k q1jUrsRm6fUrv3emMBjJ+X2GD/69RkVyklgQ5Kx6QU3o0+yMu7TexfIqDuWp GiYvGSmbOBlS1zbI0r+XbvsVRaKG1VdNj8e1b1V2BSAfdASJJY85uyXFUkg8 xccsgJVfP/vfs/fHb3ovcffCAwJx/qyvYlUTH2/ix+tUQN8reKpB7kSQyffG 4iloysPp+5e4EGo2X3/AmFDgGfiS5G82M07MrLjyknav3vPjH16dHBMuxGe2 5VdTGbP9FgjyHRlTcySEpcGSgdHGTMRFGhU3zsuQ1NTBqr1gevghC4ZAzq6R JQkz30wP65/3J0GAp9eNdYSXnZDKFb+Ek2XMG+5COH3WRekvwU8g6XkpJHte jpkcF17L+6+MinQ9UaRncV2BwQePCcwHUzo1ea3EQ5w8BUNl1CdAVWSoj8cb 930h5evFHbr0Az9zD+Te3PREYZa1Fnw6cVDL/qYnP7I/FV4e7rHNAVUNguz4 ObufaRPnSg0vpW7yLSkArCpqg6pjyj2GmA2mtMT0TI9lYLAFhQWbO36e/BjI nPG+FhgmTzy7KFd9w0VEE5au14SOd1PNeA6lae6rcRh2B2N0KNIDT3IE6QEX HiS/QqqHYy+byo6qfNvj0GHJG7/2+A4G1EXlHCiU4kCnhnJcS4W0QparpgFV elZFBSxRQgOGVHH/wKfqv/sLTG/ek/wWdL4aIS+kOazJlM3/6F2NZyj2ozia gQ++BtDUZxfhv2v+7RRIQKJuD9tvdBVMLrwA3XjhkMY8Ii7+dAqY06GZM2aR X2PDWI8+JdvyDxHGmilcGca61eGiWLc6iGU5DWLNPOMT6R10651uq5UFscbk 0hjWLA4fwxpy9x4wMaxbzb3t+i6qJN+wh5FsiVMn6e+j4CvrI915XNta29lZ T/56gvvP8T+wJqyfA+Ig8K4iJep//v2fx79uPc6xn+6gKqA+fpQGMoEdVZjK ZJF8HlXJ1i1wtM7O+NZ3APRRhX0rmxkmcMTRTbdx82BvAbkawIRO4yOnwWs+ Zhp9Mhg+Xn2URLtQsmfBGRHY8FHK2LroqF1HNKDiTnZAaO33gDzgcAqnXghi wGHSpu60aVPTb9rUczS2ssnodjtsXj5JarA2oIIytaRDW4Lw2YJ0JVgRp9Ro g2iaBDbhiCKQViDOecbmeJceCSBfTc7jf3vDI3Kgzv+xy+f/2EUc46n5Eemt NJpcHpDGHhtIHxNNbVABUcgHst9tNth8IJ3WdhNrZ/JNDoPlblEgdjX24l44 SnNMiK+qUXxHovZDNohHCD/mbsB1pRM4QnN21dvSTPLYcreQEoQpH0PpB1ix WAvonAEzMM+KLDVGJk/MxGx8a7j6JsPa4i+8qRpKCcDyuLz89jCX39K2vBlF yd235MHn9AJcQUdIa2Z4t58ZsLRrCq27vDK3oCtzYmttyV5+zubjJjJpk0rJ pC1rIJN1co0Bsrg9J6uZBuyzwx0/WW11HGT1tiTNSMDCGCcDE8fV5c0QdTWm GdL/EDXJQS4n/WzfGM7bExD5azI9IFFdCRSdCO51thv1fTwTTH7Qk9eMjchu DmI+YIkuuz5IIbkDpHgy+kYb/yEhZxkoRlF4Kfp52BNThJvctcjHIFHTduTe TLbCSdMi2IKOiANnc5UkCyxjCiojc+Paiqd03cwFIPaTG3LmVmZR18vptkyr S6lEORXQN75cNitZqD16bpm5Z4zh60UjobIrwSKtSuAg98DRogRz2hONQQmk 5sSFcxPNUrYkcFCjoLQdCRZmRazMSCA1IuXqZaJe2oI46bHSegTutsOpyS3s RnA/VgMvCadpw0TX85oNoJbS0cdPL0zPWNRSpSzGgshpq9tOYFtBb077ITJV KS3Wecq7P1MiL89a6EbKCzAki9dsXcPqLMt9KoOM/r2YmgVMUQpNqzXussJL 0V+kmXGYqsj5v09zYzt6yTmbq6T7tjQO0xZT7e7b4rjot2r64qwU5ZTAPIkp ymZRtmWBdsVe5m725N5siZMdsbAhc9sPe7Upaze+qc1wshdOtmIhdsJeX1X2 wdk22Dew2Sbcjz34FC7QInwK7WVcLLgE7cXYBSlpN85NNMtYBwUJa57mKOX+ bIS0uLL1MlEvaync9FhlLRxVwL3JzTZDlMeirAaEkFmg3QBy9hKXFV6K/mKs h4K4K/9mumVsiJKIA2dzlXR/lkRRYPnamUsoa0/c9VtlU5yVopwSmC1LUTYL sy3RIi1L5CD3yNGqRPdnUyI3ixLZ2JNofmsSOahRVNqSRN/WjkRuViRysyHR YiyIkx4rrUfkbjucmtzCbkT3YzVGcOBzcXYDyNlLXFZ4KfqLsR4K4q78m+mW sSFKIg6czVXS/VkSRYHla2cuoaw9cddvlU1xVopySmC2LEXZLMy2+KNFmhZ/ 5CD5YtFu1Et1UQUNew7LlWOnuY7iU+qto6DKCMZCaSUiWIjOQhCGBSotkLMX u6xwR/pl9FZJxIHJkiVZqa67EFXK6yyucuIx669UEAtR4GnoL3ITHMjZy15W eCn6i5nQKYi78m+mW6bXKYk4cDZXSfc3oVMUWL525hLKTujc9VtlW5yVopwS mG1LUTYLsy1R7C3StmByDrKXFF6K/oJsi5y4K/9muqVsi4qIA2dzlXSPtkVe YPnamUsobVuc9VtpW1yVopwSWNiWgmwWZVtuQ3+wQNsC5OxlLyvckX6Zbqok 4sBkyZKsFNhdiCoFdhZXOfGYFVgqiFSB03gCZXV4sNibdwOn20kD55t3g0Vc Yxs43WEazHGNbSC72WTUYXchqnR4UOaKl7t4zDo8uLcrXvwpS0vV/W88S/od hD16AfsyFyEaRmgyDiBQvn8JCRH++eaMZhzYOzjYPkAV+kXu7Kr2bi/CUmJn 8cz7WxfKIzciHasdrguHQzdC2XYUC2r9HZVqZ59IlXyR7B32Cq8W5WXgcJOL BTbQsRGlCsembDuKqfxINqsx5Ija5gLTJmnPiHz36+3t1h6qJN8gYTY2C+S3 TeO15EFOafZDww1bJVBgBOF6owrICMCKRQXDnP1SgXCHOJRAkRGE23pRAjGu bhUM505UAXF+ASUQO8GXARkvmFsjBc4oRiXQHuW2RfgUumIY9cFwXMMWxagv pt0iWxyjPhndjNZIKn3TX/rXQwZ2cEp1Up+j10KprIvuuK0WTqlXuuMyWjil BhUhFWpTAFTqit5pq4fktKKSQ1rEPLAADxyAeSUxgjuAcupihGZ1xgjMK44Z PHIA5lXIDM7qkRGaVyYjOK9RZnB7tTIPc+7owRzIDmqoHwSdUZnh0BnXQQ9N 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 QlwAuAEA --8323584-185789815-1041780455=:2215-- From gcc-patches-return-75050-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 15:27:20 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15866 invoked by alias); 5 Jan 2003 15:27:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15794 invoked from network); 5 Jan 2003 15:27:19 -0000 Received: from unknown (HELO book.moene.indiv.nluug.nl) (195.109.255.217) by 209.249.29.67 with SMTP; 5 Jan 2003 15:27:19 -0000 Received: from local ([127.0.0.1] helo=moene.indiv.nluug.nl) by book.moene.indiv.nluug.nl with esmtp (Exim 3.36 #1 (Debian)) id 18VCp7-0007nF-00; Sun, 05 Jan 2003 16:36:25 +0100 Message-ID: <3E1850F9.80608@moene.indiv.nluug.nl> Date: Sun, 05 Jan 2003 16:36:25 +0100 From: Toon Moene Organization: Moene Computational Physics, Maartensdijk, The Netherlands User-Agent: Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.0.0) Gecko/20020622 Debian/1.0.0-0.woody.1 MIME-Version: 1.0 To: Richard Sandiford CC: gcc-patches@gcc.gnu.org, s.bosscher@student.tudelft.nl Subject: Re: Fix for PR Fortran/9038 applied. References: <3E175F30.1020809@moene.indiv.nluug.nl> <3E17E0A2.8070404@moene.indiv.nluug.nl> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Richard Sandiford wrote: > Toon Moene writes: >>>I plan to apply this patch to the 3.3 branch too, as it fixes a regression. >> >>Unfortunately, that didn't work: >> >>g77: spec failure: unrecognized spec option '<'. >> >>So this stays unfixed on 3.3. > I think the syntax was %{ Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22601 invoked by alias); 5 Jan 2003 15:49:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22593 invoked from network); 5 Jan 2003 15:49:27 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 5 Jan 2003 15:49:27 -0000 Received: from localhost (IDENT:gFGzfjXS9BJt1fgvlJ1tqOuv6DE6jCPu@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h05FnElU011181 for ; Sun, 5 Jan 2003 10:49:14 -0500 Date: Sun, 05 Jan 2003 10:49:10 -0500 (EST) Message-Id: <20030105.104910.71084425.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300: Optimize a shift by a variable. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to optimize a shift by a variable. On H8/300, a shift by a variable amount is done by a loop. Without the patch, the register containing the shift amount is copied to a scratch register to control the loop even if the register containing the shift amount is dead. mov.b @(17,er7),r5l mov.b r5l,r6l <- Make a copy. ble .Lle37 .Llt37: shll.l er2 add #0xff,r6l <- The copy is used. bne .Llt37 .Lle37: With the patch, gcc avoids the copy if the register containing the shift amount is dead. mov.b @(17,er7),r5l ble .L115 .L114: shll.l er2 add.b #-1,r5l <- The original register is used. bne .L114 .L115: Doing this optimization allows us to omit the test done before "ble" above if the preceding insn sets cc0 in a useful way. The patch does this by converting an insn representing a variable shift into a sequence of insns to form a loop, but it does so very late, namely right before shortening branch, so that this optimization will not interfere with the peepholes or the combiner. Tested on h8300 port. Committed. Kazu Hirata 2003-01-05 Kazu Hirata * config/h8300/h8300.c (output_a_shift): Do not output a variable shift. * config/h8300/h8300.md (two splitters): New. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.196 diff -u -r1.196 h8300.c --- h8300.c 4 Jan 2003 17:46:24 -0000 1.196 +++ h8300.c 5 Jan 2003 15:30:05 -0000 @@ -3197,20 +3197,9 @@ if (GET_CODE (operands[2]) != CONST_INT) { - /* Indexing by reg, so have to loop and test at top. */ - output_asm_insn ("mov.b %X2,%X4", operands); - fprintf (asm_out_file, "\tble .Lle%d\n", loopend_lab); - - /* Get the assembler code to do one shift. */ - get_shift_alg (shift_type, shift_mode, 1, &info); - - fprintf (asm_out_file, ".Llt%d:\n", loopend_lab); - output_asm_insn (info.shift1, operands); - output_asm_insn ("add #0xff,%X4", operands); - fprintf (asm_out_file, "\tbne .Llt%d\n", loopend_lab); - fprintf (asm_out_file, ".Lle%d:\n", loopend_lab); - - return ""; + /* This case must be taken care of by one of the two splitters + that convert a variable shift into a loop. */ + abort (); } else { Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.143 diff -u -r1.143 h8300.md --- h8300.md 4 Jan 2003 17:46:24 -0000 1.143 +++ h8300.md 5 Jan 2003 15:30:05 -0000 @@ -2234,6 +2234,75 @@ [(set (attr "length") (symbol_ref "compute_a_shift_length (insn, operands)")) (set_attr "cc" "clobber")]) + +;; Split a variable shift into a loop. If the register containing +;; the shift count dies, then we just use that register. + +(define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator 2 "nshift_operator" + [(match_dup 0) + (match_operand:QI 1 "register_operand" "")])) + (clobber (match_operand:QI 3 "register_operand" ""))])] + "flow2_completed + && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))" + [(set (cc0) + (match_dup 1)) + (set (pc) + (if_then_else (le (cc0) (const_int 0)) + (label_ref (match_dup 5)) + (pc))) + (match_dup 4) + (parallel + [(set (match_dup 0) + (match_op_dup 2 [(match_dup 0) (const_int 1)])) + (clobber (scratch:QI))]) + (set (match_dup 1) + (plus:QI (match_dup 1) (const_int -1))) + (set (cc0) + (match_dup 1)) + (set (pc) + (if_then_else (ne (cc0) (const_int 0)) + (label_ref (match_dup 4)) + (pc))) + (match_dup 5)] + "operands[4] = gen_label_rtx (); + operands[5] = gen_label_rtx ();") + +(define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator 2 "nshift_operator" + [(match_dup 0) + (match_operand:QI 1 "register_operand" "")])) + (clobber (match_operand:QI 3 "register_operand" ""))])] + "flow2_completed + && !find_regno_note (insn, REG_DEAD, REGNO (operands[1]))" + [(set (match_dup 3) + (match_dup 1)) + (set (cc0) + (match_dup 3)) + (set (pc) + (if_then_else (le (cc0) (const_int 0)) + (label_ref (match_dup 5)) + (pc))) + (match_dup 4) + (parallel + [(set (match_dup 0) + (match_op_dup 2 [(match_dup 0) (const_int 1)])) + (clobber (scratch:QI))]) + (set (match_dup 3) + (plus:QI (match_dup 3) (const_int -1))) + (set (cc0) + (match_dup 3)) + (set (pc) + (if_then_else (ne (cc0) (const_int 0)) + (label_ref (match_dup 4)) + (pc))) + (match_dup 5)] + "operands[4] = gen_label_rtx (); + operands[5] = gen_label_rtx ();") ;; ---------------------------------------------------------------------- ;; ROTATIONS From gcc-patches-return-75052-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 16:26:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30807 invoked by alias); 5 Jan 2003 16:26:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30790 invoked from network); 5 Jan 2003 16:26:43 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 5 Jan 2003 16:26:43 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h05GQUC01588; Sun, 5 Jan 2003 11:26:30 -0500 Date: Sun, 5 Jan 2003 11:26:30 -0500 (EST) From: Jeff Sturm To: Andreas Tobler cc: gcc-patches@gcc.gnu.org, Subject: Re: [libffi] closures for sparc In-Reply-To: <3E16BD22.4090905@pop.agri.ch> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Sat, 4 Jan 2003, Andreas Tobler wrote: > Hm, powerpc-unknown-linux-gnu doesn't like the static: > .libs/ffitest.o: could not read symbols: Bad value Strange. Surely this isn't a problem in libffi though? Can you try a newer ld and see if it fixes the problem? If not, let me know and I'll attempt a cross build (I don't have a powerpc-linux machine handy). Jeff From gcc-patches-return-75053-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 16:30:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31517 invoked by alias); 5 Jan 2003 16:30:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31496 invoked from network); 5 Jan 2003 16:30:01 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 209.249.29.67 with SMTP; 5 Jan 2003 16:30:01 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3DEE86F7000F48AA; Sun, 5 Jan 2003 17:29:47 +0100 Message-ID: <3E185D7A.40705@pop.agri.ch> Date: Sun, 05 Jan 2003 17:29:46 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jeff Sturm CC: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libffi] closures for sparc References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jeff Sturm wrote: > On Sat, 4 Jan 2003, Andreas Tobler wrote: > >>Hm, powerpc-unknown-linux-gnu doesn't like the static: > > >>.libs/ffitest.o: could not read symbols: Bad value > > > Strange. Surely this isn't a problem in libffi though? I set the var back and built the whole gcc (c,c++,java) a few minutes ago. Didn't see any further complaints. > > Can you try a newer ld and see if it fixes the problem? If not, let me > know and I'll attempt a cross build (I don't have a powerpc-linux machine > handy). I tried with this ld : GNU ld version 2.13.90.0.16 20021126 The latest binutils I could find. I'm ready to test. Thx, Andreas From gcc-patches-return-75054-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 16:43:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2861 invoked by alias); 5 Jan 2003 16:43:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2853 invoked from network); 5 Jan 2003 16:43:32 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 5 Jan 2003 16:43:32 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id E266D4633; Sun, 5 Jan 2003 17:43:19 +0100 (CET) Date: Sun, 5 Jan 2003 17:43:19 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: [rtlopt] speed improvement of branch prediction Message-ID: <20030105164319.GA18624@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Hi, this is a corrected patch which speeds up branch prediction by using sreal.c (simple real library) instead of real.c Bootstrapped i386 (athlon) and x86_64. OK for rtlopt branch? Josef Sun Jan 5 16:10:59 CET 2003 Josef Zlomek * Makefile.in (sreal.o): Added. (predict.o): Depends on sreal.h instead of real.h. * sreal.c: New file. * sreal.h: New file. * predict.c: Use sreal.c instead of real.c. diff -c3prN gcc.old/gcc/Makefile.in gcc/gcc/Makefile.in *** gcc.old/gcc/Makefile.in Sun Jan 5 07:27:40 2003 --- gcc/gcc/Makefile.in Sun Jan 5 07:36:59 2003 *************** OBJS = alias.o bb-reorder.o bitmap.o bui *** 760,766 **** real.o recog.o reg-stack.o regclass.o regmove.o regrename.o \ reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o \ sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o \ ! sibcall.o simplify-rtx.o ssa.o ssa-ccp.o ssa-dce.o stmt.o \ stor-layout.o stringpool.o timevar.o toplev.o tracer.o tree.o tree-dump.o \ tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o vpt.o \ alloc-pool.o xcoffout.o et-forest.o web.o $(GGC) $(out_object_file) $(EXTRA_OBJS) --- 760,766 ---- real.o recog.o reg-stack.o regclass.o regmove.o regrename.o \ reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o \ sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o \ ! sibcall.o simplify-rtx.o sreal.o ssa.o ssa-ccp.o ssa-dce.o stmt.o \ stor-layout.o stringpool.o timevar.o toplev.o tracer.o tree.o tree-dump.o \ tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o vpt.o \ alloc-pool.o xcoffout.o et-forest.o web.o $(GGC) $(out_object_file) $(EXTRA_OBJS) *************** recog.o : recog.c $(CONFIG_H) $(SYSTEM_H *** 1685,1693 **** reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ $(RECOG_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \ varray.h function.h $(TM_P_H) $(GGC_H) gt-reg-stack.h predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ flags.h insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \ ! $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) real.h \ $(PARAMS_H) $(TARGET_H) cfgloop.h lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) toplev.h $(RTL_H) $(GGC_H) \ $(TM_H) --- 1685,1694 ---- reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ $(RECOG_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \ varray.h function.h $(TM_P_H) $(GGC_H) gt-reg-stack.h + sreal.o: sreal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) sreal.h predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ flags.h insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \ ! $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) sreal.h \ $(PARAMS_H) $(TARGET_H) cfgloop.h lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) toplev.h $(RTL_H) $(GGC_H) \ $(TM_H) diff -c3prN gcc.old/gcc/predict.c gcc/gcc/predict.c *** gcc.old/gcc/predict.c Sun Jan 5 07:27:48 2003 --- gcc/gcc/predict.c Sun Jan 5 07:36:59 2003 *************** Software Foundation, 59 Temple Place - S *** 48,63 **** #include "expr.h" #include "predict.h" #include "profile.h" ! #include "real.h" #include "params.h" #include "target.h" #include "loop.h" #include "cfgloop.h" /* real constants: 0, 1, 1-1/REG_BR_PROB_BASE, REG_BR_PROB_BASE, 0.5, ! REAL_BB_FREQ_MAX. */ ! static REAL_VALUE_TYPE real_zero, real_one, real_almost_one, real_br_prob_base, ! real_one_half, real_bb_freq_max; /* Random guesstimation given names. */ #define PROB_VERY_UNLIKELY (REG_BR_PROB_BASE / 10 - 1) --- 48,63 ---- #include "expr.h" #include "predict.h" #include "profile.h" ! #include "sreal.h" #include "params.h" #include "target.h" #include "loop.h" #include "cfgloop.h" /* real constants: 0, 1, 1-1/REG_BR_PROB_BASE, REG_BR_PROB_BASE, 0.5, ! BB_FREQ_MAX. */ ! static sreal real_zero, real_one, real_almost_one, real_br_prob_base, ! real_one_half, real_bb_freq_max; /* Random guesstimation given names. */ #define PROB_VERY_UNLIKELY (REG_BR_PROB_BASE / 10 - 1) *************** note_prediction_to_br_prob () *** 905,911 **** typedef struct block_info_def { /* Estimated frequency of execution of basic_block. */ ! REAL_VALUE_TYPE frequency; /* To keep queue of basic blocks to process. */ basic_block next; --- 905,911 ---- typedef struct block_info_def { /* Estimated frequency of execution of basic_block. */ ! sreal frequency; /* To keep queue of basic blocks to process. */ basic_block next; *************** typedef struct edge_info_def *** 923,929 **** /* In case edge is an loopback edge, the probability edge will be reached in case header is. Estimated number of iterations of the loop can be then computed as 1 / (1 - back_edge_prob). */ ! REAL_VALUE_TYPE back_edge_prob; /* True if the edge is an loopback edge in the natural loop. */ int back_edge:1; } *edge_info; --- 923,929 ---- /* In case edge is an loopback edge, the probability edge will be reached in case header is. Estimated number of iterations of the loop can be then computed as 1 / (1 - back_edge_prob). */ ! sreal back_edge_prob; /* True if the edge is an loopback edge in the natural loop. */ int back_edge:1; } *edge_info; *************** propagate_freq (loop) *** 968,974 **** last = head; for (bb = head; bb; bb = nextbb) { ! REAL_VALUE_TYPE cyclic_probability, frequency; memcpy (&cyclic_probability, &real_zero, sizeof (real_zero)); memcpy (&frequency, &real_zero, sizeof (real_zero)); --- 968,974 ---- last = head; for (bb = head; bb; bb = nextbb) { ! sreal cyclic_probability, frequency; memcpy (&cyclic_probability, &real_zero, sizeof (real_zero)); memcpy (&frequency, &real_zero, sizeof (real_zero)); *************** propagate_freq (loop) *** 988,1023 **** for (e = bb->pred; e; e = e->pred_next) if (EDGE_INFO (e)->back_edge) { ! REAL_ARITHMETIC (cyclic_probability, PLUS_EXPR, ! cyclic_probability, ! EDGE_INFO (e)->back_edge_prob); } else if (!(e->flags & EDGE_DFS_BACK)) { ! REAL_VALUE_TYPE tmp; /* frequency += (e->probability * BLOCK_INFO (e->src)->frequency / REG_BR_PROB_BASE); */ ! REAL_VALUE_FROM_INT (tmp, e->probability, 0, ! TYPE_MODE (double_type_node)); ! REAL_ARITHMETIC (tmp, MULT_EXPR, tmp, ! BLOCK_INFO (e->src)->frequency); ! REAL_ARITHMETIC (tmp, RDIV_EXPR, tmp, real_br_prob_base); ! REAL_ARITHMETIC (frequency, PLUS_EXPR, frequency, tmp); } ! if (REAL_VALUES_LESS (real_almost_one, cyclic_probability)) memcpy (&cyclic_probability, &real_almost_one, sizeof (real_zero)); /* BLOCK_INFO (bb)->frequency = frequency / (1 - cyclic_probability) */ ! REAL_ARITHMETIC (cyclic_probability, MINUS_EXPR, real_one, ! cyclic_probability); ! REAL_ARITHMETIC (BLOCK_INFO (bb)->frequency, ! RDIV_EXPR, frequency, cyclic_probability); } BLOCK_INFO (bb)->tovisit = 0; --- 988,1019 ---- for (e = bb->pred; e; e = e->pred_next) if (EDGE_INFO (e)->back_edge) { ! sreal_add (&cyclic_probability, &cyclic_probability, ! &EDGE_INFO (e)->back_edge_prob); } else if (!(e->flags & EDGE_DFS_BACK)) { ! sreal tmp; /* frequency += (e->probability * BLOCK_INFO (e->src)->frequency / REG_BR_PROB_BASE); */ ! sreal_init (&tmp, e->probability, 0); ! sreal_mul (&tmp, &tmp, &BLOCK_INFO (e->src)->frequency); ! sreal_div (&tmp, &tmp, &real_br_prob_base); ! sreal_add (&frequency, &frequency, &tmp); } ! if (sreal_compare (&cyclic_probability, &real_almost_one) > 0) memcpy (&cyclic_probability, &real_almost_one, sizeof (real_zero)); /* BLOCK_INFO (bb)->frequency = frequency / (1 - cyclic_probability) */ ! sreal_sub (&cyclic_probability, &real_one, &cyclic_probability); ! sreal_div (&BLOCK_INFO (bb)->frequency, ! &frequency, &cyclic_probability); } BLOCK_INFO (bb)->tovisit = 0; *************** propagate_freq (loop) *** 1026,1043 **** for (e = bb->succ; e; e = e->succ_next) if (e->dest == head) { ! REAL_VALUE_TYPE tmp; /* EDGE_INFO (e)->back_edge_prob = ((e->probability * BLOCK_INFO (bb)->frequency) / REG_BR_PROB_BASE); */ - REAL_VALUE_FROM_INT (tmp, e->probability, 0, - TYPE_MODE (double_type_node)); - REAL_ARITHMETIC (tmp, MULT_EXPR, tmp, - BLOCK_INFO (bb)->frequency); - REAL_ARITHMETIC (EDGE_INFO (e)->back_edge_prob, - RDIV_EXPR, tmp, real_br_prob_base); } /* Propagate to successor blocks. */ --- 1022,1037 ---- for (e = bb->succ; e; e = e->succ_next) if (e->dest == head) { ! sreal tmp; /* EDGE_INFO (e)->back_edge_prob = ((e->probability * BLOCK_INFO (bb)->frequency) / REG_BR_PROB_BASE); */ + sreal_init (&tmp, e->probability, 0); + sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency); + sreal_div (&EDGE_INFO (e)->back_edge_prob, + &tmp, &real_br_prob_base); } /* Propagate to successor blocks. */ *************** estimate_bb_frequencies (loops) *** 1155,1177 **** struct loops *loops; { basic_block bb; ! REAL_VALUE_TYPE freq_max; ! enum machine_mode double_mode = TYPE_MODE (double_type_node); if (flag_branch_probabilities) counts_to_freqs (); else { ! REAL_VALUE_FROM_INT (real_zero, 0, 0, double_mode); ! REAL_VALUE_FROM_INT (real_one, 1, 0, double_mode); ! REAL_VALUE_FROM_INT (real_br_prob_base, REG_BR_PROB_BASE, 0, double_mode); ! REAL_VALUE_FROM_INT (real_bb_freq_max, BB_FREQ_MAX, 0, double_mode); ! REAL_VALUE_FROM_INT (real_one_half, 2, 0, double_mode); ! REAL_ARITHMETIC (real_one_half, RDIV_EXPR, real_one, real_one_half); ! ! REAL_ARITHMETIC (real_almost_one, RDIV_EXPR, real_one, real_br_prob_base); ! REAL_ARITHMETIC (real_almost_one, MINUS_EXPR, real_one, real_almost_one); mark_dfs_back_edges (); /* Fill in the probability values in flowgraph based on the REG_BR_PROB --- 1149,1168 ---- struct loops *loops; { basic_block bb; ! sreal freq_max; if (flag_branch_probabilities) counts_to_freqs (); else { ! sreal_init (&real_zero, 0, 0); ! sreal_init (&real_one, 1, 0); ! sreal_init (&real_br_prob_base, REG_BR_PROB_BASE, 0); ! sreal_init (&real_bb_freq_max, BB_FREQ_MAX, 0); ! sreal_init (&real_one_half, 1, -1); ! sreal_div (&real_almost_one, &real_one, &real_br_prob_base); ! sreal_sub (&real_almost_one, &real_one, &real_almost_one); mark_dfs_back_edges (); /* Fill in the probability values in flowgraph based on the REG_BR_PROB *************** estimate_bb_frequencies (loops) *** 1212,1222 **** BLOCK_INFO (bb)->tovisit = 0; for (e = bb->succ; e; e = e->succ_next) { ! REAL_VALUE_FROM_INT (EDGE_INFO (e)->back_edge_prob, ! e->probability, 0, double_mode); ! REAL_ARITHMETIC (EDGE_INFO (e)->back_edge_prob, ! RDIV_EXPR, EDGE_INFO (e)->back_edge_prob, ! real_br_prob_base); } } --- 1203,1211 ---- BLOCK_INFO (bb)->tovisit = 0; for (e = bb->succ; e; e = e->succ_next) { ! sreal_init (&EDGE_INFO (e)->back_edge_prob, e->probability, 0); ! sreal_div (&EDGE_INFO (e)->back_edge_prob, ! &EDGE_INFO (e)->back_edge_prob, &real_br_prob_base); } } *************** estimate_bb_frequencies (loops) *** 1226,1245 **** memcpy (&freq_max, &real_zero, sizeof (real_zero)); FOR_EACH_BB (bb) ! if (REAL_VALUES_LESS ! (freq_max, BLOCK_INFO (bb)->frequency)) ! memcpy (&freq_max, &BLOCK_INFO (bb)->frequency, ! sizeof (freq_max)); FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb) { ! REAL_VALUE_TYPE tmp; ! REAL_ARITHMETIC (tmp, MULT_EXPR, BLOCK_INFO (bb)->frequency, ! real_bb_freq_max); ! REAL_ARITHMETIC (tmp, RDIV_EXPR, tmp, freq_max); ! REAL_ARITHMETIC (tmp, PLUS_EXPR, tmp, real_one_half); ! bb->frequency = REAL_VALUE_UNSIGNED_FIX (tmp); } free_aux_for_blocks (); --- 1215,1231 ---- memcpy (&freq_max, &real_zero, sizeof (real_zero)); FOR_EACH_BB (bb) ! if (sreal_compare (&freq_max, &BLOCK_INFO (bb)->frequency) < 0) ! memcpy (&freq_max, &BLOCK_INFO (bb)->frequency, sizeof (freq_max)); FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb) { ! sreal tmp; ! sreal_mul (&tmp, &BLOCK_INFO (bb)->frequency, &real_bb_freq_max); ! sreal_div (&tmp, &tmp, &freq_max); ! sreal_add (&tmp, &tmp, &real_one_half); ! bb->frequency = sreal_to_int (&tmp); } free_aux_for_blocks (); diff -c3prN gcc.old/gcc/sreal.c gcc/gcc/sreal.c *** gcc.old/gcc/sreal.c Thu Jan 1 01:00:00 1970 --- gcc/gcc/sreal.c Sun Jan 5 10:50:18 2003 *************** *** 0 **** --- 1,587 ---- + /* Simple data type for positive real numbers for the GNU compiler. + Copyright (C) 2002 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This library supports positive real numbers and 0; + inf and nan are NOT supported. + The precission is (at least) 31-bit. + It is written to be simple and fast. + + Value of sreal is + x = sig * 2 ^ exp + where + sig = significant + (for < 64-bit machines sig = sig_lo + sig_hi * 2 ^ SREAL_PART_BITS) + exp = exponent + + + Invariant: Before and after each call of sreal_* the numbers are normalized. + + Normalized sreals: + All numbers (except zero) meet following conditions: + SREAL_MIN_SIG <= sig && sig <= SREAL_MAX_SIG + -SREAL_MAX_EXP <= exp && exp <= SREAL_MAX_EXP + + If the number would be too large, it is set to upper bounds of these + conditions. + + If the number is zero or would be too small it meets following conditions: + sig == 0 && exp == -SREAL_MAX_EXP + */ + + #include "config.h" + #include "system.h" + #include "coretypes.h" + #include "tm.h" + #include "rtl.h" + #include "sreal.h" + + void dump_sreal PARAMS ((FILE *, sreal *)); + static inline void copy PARAMS ((sreal *, sreal *)); + static inline void shift_right PARAMS ((sreal *, int)); + static void normalize PARAMS ((sreal *)); + + /* Print the content of struct sreal. */ + + void + dump_sreal (file, x) + FILE *file; + sreal *x; + { + #if SREAL_PART_BITS < 32 + fprintf (file, "(("); + fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED, x->sig_hi); + fprintf (file, " * 2^16 + "); + fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED, x->sig_lo); + fprintf (file, ") * 2^%d)", x->exp); + #else + fprintf (file, "("); + fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED, x->sig); + fprintf (file, " * 2^%d)", x->exp); + #endif + } + + /* Copy the sreal number. */ + + static inline void + copy (r, a) + sreal *r; + sreal *a; + { + #if SREAL_PART_BITS < 32 + r->sig_lo = a->sig_lo; + r->sig_hi = a->sig_hi; + #else + r->sig = a->sig; + #endif + r->exp = a->exp; + } + + /* Shift X right by S bits. Needed: 0 < S <= SREAL_BITS. + When the most significant bit shifted out is 1, add 1 to X (rounding). */ + + static inline void + shift_right (x, s) + sreal *x; + int s; + { + #ifdef ENABLE_CHECKING + #endif + if (s <= 0 || s > SREAL_BITS) + abort (); + if (x->exp + s > SREAL_MAX_EXP) + { + /* Exponent should never be so large because shift_right is used only by + sreal_add and sreal_sub ant thus the number cannot be shifted out from + exponent range. */ + abort (); + } + + x->exp += s; + + #if SREAL_PART_BITS < 32 + if (s > SREAL_PART_BITS) + { + s -= SREAL_PART_BITS; + x->sig_hi += (uhwi) 1 << (s - 1); + x->sig_lo = x->sig_hi >> s; + x->sig_hi = 0; + } + else + { + x->sig_lo += (uhwi) 1 << (s - 1); + if (x->sig_lo & ((uhwi) 1 << SREAL_PART_BITS)) + { + x->sig_hi++; + x->sig_lo -= (uhwi) 1 << SREAL_PART_BITS; + } + x->sig_lo >>= s; + x->sig_lo |= (x->sig_hi & (((uhwi) 1 << s) - 1)) << (SREAL_PART_BITS - s); + x->sig_hi >>= s; + } + #else + x->sig += (uhwi) 1 << (s - 1); + x->sig >>= s; + #endif + } + + /* Normalize *X. */ + + static void + normalize (x) + sreal *x; + { + #if SREAL_PART_BITS < 32 + int shift; + HOST_WIDE_INT mask; + + if (x->sig_lo == 0 && x->sig_hi == 0) + { + x->exp = -SREAL_MAX_EXP; + } + else if (x->sig_hi < SREAL_MIN_SIG) + { + if (x->sig_hi == 0) + { + /* Move lower part of significant to higher part. */ + x->sig_hi = x->sig_lo; + x->sig_lo = 0; + x->exp -= SREAL_PART_BITS; + } + shift = 0; + while (x->sig_hi < SREAL_MIN_SIG) + { + x->sig_hi <<= 1; + x->exp--; + shift++; + } + /* Check underflow. */ + if (x->exp < -SREAL_MAX_EXP) + { + x->exp = -SREAL_MAX_EXP; + x->sig_hi = 0; + x->sig_lo = 0; + } + else if (shift) + { + mask = (1 << SREAL_PART_BITS) - (1 << (SREAL_PART_BITS - shift)); + x->sig_hi |= (x->sig_lo & mask) >> (SREAL_PART_BITS - shift); + x->sig_lo = (x->sig_lo << shift) & (((uhwi) 1 << SREAL_PART_BITS) - 1); + } + } + else if (x->sig_hi > SREAL_MAX_SIG) + { + unsigned HOST_WIDE_INT tmp = x->sig_hi; + + /* Find out how many bits will be shifted. */ + shift = 0; + do + { + tmp >>= 1; + shift++; + } + while (tmp > SREAL_MAX_SIG); + + /* Round the number. */ + x->sig_lo += (uhwi) 1 << (shift - 1); + + x->sig_lo >>= shift; + x->sig_lo += ((x->sig_hi & (((uhwi) 1 << shift) - 1)) + << (SREAL_PART_BITS - shift)); + x->sig_hi >>= shift; + x->exp += shift; + if (x->sig_lo & ((uhwi) 1 << SREAL_PART_BITS)) + { + x->sig_lo -= (uhwi) 1 << SREAL_PART_BITS; + x->sig_hi++; + if (x->sig_hi > SREAL_MAX_SIG) + { + /* x->sig_hi was SREAL_MAX_SIG before increment + so now last bit is zero. */ + x->sig_hi >>= 1; + x->sig_lo >>= 1; + x->exp++; + } + } + + /* Check overflow. */ + if (x->exp > SREAL_MAX_EXP) + { + x->exp = SREAL_MAX_EXP; + x->sig_hi = SREAL_MAX_SIG; + x->sig_lo = SREAL_MAX_SIG; + } + } + #else + if (x->sig == 0) + { + x->exp = -SREAL_MAX_EXP; + } + else if (x->sig < SREAL_MIN_SIG) + { + do + { + x->sig <<= 1; + x->exp--; + } + while (x->sig < SREAL_MIN_SIG); + + /* Check underflow. */ + if (x->exp < -SREAL_MAX_EXP) + { + x->exp = -SREAL_MAX_EXP; + x->sig = 0; + } + } + else if (x->sig > SREAL_MAX_SIG) + { + int last_bit; + do + { + last_bit = x->sig & 1; + x->sig >>= 1; + x->exp++; + } + while (x->sig > SREAL_MAX_SIG); + + /* Round the number. */ + x->sig += last_bit; + if (x->sig > SREAL_MAX_SIG) + { + x->sig >>= 1; + x->exp++; + } + + /* Check overflow. */ + if (x->exp > SREAL_MAX_EXP) + { + x->exp = SREAL_MAX_EXP; + x->sig = SREAL_MAX_SIG; + } + } + #endif + } + + /* Set *R to SIG * 2 ^ EXP. Return R. */ + + sreal * + sreal_init (r, sig, exp) + sreal *r; + unsigned HOST_WIDE_INT sig; + signed int exp; + { + #if SREAL_PART_BITS < 32 + r->sig_lo = 0; + r->sig_hi = sig; + r->exp = exp - 16; + #else + r->sig = sig; + r->exp = exp; + #endif + normalize (r); + return r; + } + + /* Return integer value of *R. */ + + HOST_WIDE_INT + sreal_to_int (r) + sreal *r; + { + #if SREAL_PART_BITS < 32 + if (r->exp <= -SREAL_BITS) + return 0; + if (r->exp >= 0) + return MAX_HOST_WIDE_INT; + return ((r->sig_hi << SREAL_PART_BITS) + r->sig_lo) >> -r->exp; + #else + if (r->exp <= -SREAL_BITS) + return 0; + if (r->exp >= SREAL_PART_BITS) + return MAX_HOST_WIDE_INT; + if (r->exp > 0) + return r->sig << r->exp; + if (r->exp < 0) + return r->sig >> -r->exp; + return r->sig; + #endif + } + + /* Compare *A and *B. Return -1 if *A < *B, 1 if *A > *B and 0 if *A == *B. */ + + int + sreal_compare (a, b) + sreal *a; + sreal *b; + { + if (a->exp > b->exp) + return 1; + if (a->exp < b->exp) + return -1; + #if SREAL_PART_BITS < 32 + if (a->sig_hi > b->sig_hi) + return 1; + if (a->sig_hi < b->sig_hi) + return -1; + if (a->sig_lo > b->sig_lo) + return 1; + if (a->sig_lo < b->sig_lo) + return -1; + #else + if (a->sig > b->sig) + return 1; + if (a->sig < b->sig) + return -1; + #endif + return 0; + } + + /* *R = *A + *B. Return R. */ + + sreal * + sreal_add (r, a, b) + sreal *r; + sreal *a; + sreal *b; + { + int dexp; + sreal tmp; + sreal *bb; + + if (sreal_compare (a, b) < 0) + { + sreal *swap; + swap = a; + a = b; + b = swap; + } + + dexp = a->exp - b->exp; + r->exp = a->exp; + if (dexp > SREAL_BITS) + { + #if SREAL_PART_BITS < 32 + r->sig_hi = a->sig_hi; + r->sig_lo = a->sig_lo; + #else + r->sig = a->sig; + #endif + return r; + } + + if (dexp == 0) + bb = b; + else + { + copy (&tmp, b); + shift_right (&tmp, dexp); + bb = &tmp; + } + + #if SREAL_PART_BITS < 32 + r->sig_hi = a->sig_hi + bb->sig_hi; + r->sig_lo = a->sig_lo + bb->sig_lo; + if (r->sig_lo & ((uhwi) 1 << SREAL_PART_BITS)) + { + r->sig_hi++; + r->sig_lo -= (uhwi) 1 << SREAL_PART_BITS; + } + #else + r->sig = a->sig + bb->sig; + #endif + normalize (r); + return r; + } + + /* *R = *A - *B. Return R. */ + + sreal * + sreal_sub (r, a, b) + sreal *r; + sreal *a; + sreal *b; + { + int dexp; + sreal tmp; + sreal *bb; + + if (sreal_compare (a, b) < 0) + { + abort (); + } + + dexp = a->exp - b->exp; + r->exp = a->exp; + if (dexp > SREAL_BITS) + { + #if SREAL_PART_BITS < 32 + r->sig_hi = a->sig_hi; + r->sig_lo = a->sig_lo; + #else + r->sig = a->sig; + #endif + return r; + } + if (dexp == 0) + bb = b; + else + { + copy (&tmp, b); + shift_right (&tmp, dexp); + bb = &tmp; + } + + #if SREAL_PART_BITS < 32 + if (a->sig_lo < bb->sig_lo) + { + r->sig_hi = a->sig_hi - bb->sig_hi - 1; + r->sig_lo = a->sig_lo + ((uhwi) 1 << SREAL_PART_BITS) - bb->sig_lo; + } + else + { + r->sig_hi = a->sig_hi - bb->sig_hi; + r->sig_lo = a->sig_lo - bb->sig_lo; + } + #else + r->sig = a->sig - bb->sig; + #endif + normalize (r); + return r; + } + + /* *R = *A * *B. Return R. */ + + sreal * + sreal_mul (r, a, b) + sreal *r; + sreal *a; + sreal *b; + { + #if SREAL_PART_BITS < 32 + if (a->sig_hi < SREAL_MIN_SIG || b->sig_hi < SREAL_MIN_SIG) + { + r->sig_lo = 0; + r->sig_hi = 0; + r->exp = -SREAL_MAX_EXP; + } + else + { + unsigned HOST_WIDE_INT tmp1, tmp2, tmp3; + if (sreal_compare (a, b) < 0) + { + sreal *swap; + swap = a; + a = b; + b = swap; + } + + r->exp = a->exp + b->exp + SREAL_PART_BITS; + + tmp1 = a->sig_lo * b->sig_lo + ((uhwi) 1 << (SREAL_PART_BITS - 1)); + tmp2 = a->sig_lo * b->sig_hi; + tmp3 = a->sig_hi * b->sig_lo + (tmp1 >> SREAL_PART_BITS); + + r->sig_hi = a->sig_hi * b->sig_hi; + r->sig_hi += (tmp2 >> SREAL_PART_BITS) + (tmp3 >> SREAL_PART_BITS); + tmp2 &= ((uhwi) 1 << SREAL_PART_BITS) - 1; + tmp3 &= ((uhwi) 1 << SREAL_PART_BITS) - 1; + tmp1 = tmp2 + tmp3; + + r->sig_lo = tmp1 & (((uhwi) 1 << SREAL_PART_BITS) - 1); + r->sig_hi += tmp1 >> SREAL_PART_BITS; + + normalize (r); + } + #else + if (a->sig < SREAL_MIN_SIG || b->sig < SREAL_MIN_SIG) + { + r->sig = 0; + r->exp = -SREAL_MAX_EXP; + } + else + { + r->sig = a->sig * b->sig; + r->exp = a->exp + b->exp; + normalize (r); + } + #endif + return r; + } + + /* *R = *A / *B. Return R. */ + + sreal * + sreal_div (r, a, b) + sreal *r; + sreal *a; + sreal *b; + { + #if SREAL_PART_BITS < 32 + unsigned HOST_WIDE_INT tmp, tmp1, tmp2; + + if (b->sig_hi < SREAL_MIN_SIG) + { + abort (); + } + else if (a->sig_hi < SREAL_MIN_SIG) + { + r->sig_hi = 0; + r->sig_lo = 0; + r->exp = -SREAL_MAX_EXP; + } + else + { + /* Since division by the whole number is pretty ugly to write + we are dividing by first 3/4 of bits of number. */ + + tmp1 = (a->sig_hi << SREAL_PART_BITS) + a->sig_lo; + tmp2 = ((b->sig_hi << (SREAL_PART_BITS / 2)) + + (b->sig_lo >> (SREAL_PART_BITS / 2))); + if (b->sig_lo & ((uhwi) 1 << ((SREAL_PART_BITS / 2) - 1))) + tmp2++; + + r->sig_lo = 0; + tmp = tmp1 / tmp2; + tmp1 = (tmp1 % tmp2) << (SREAL_PART_BITS / 2); + r->sig_hi = tmp << SREAL_PART_BITS; + + tmp = tmp1 / tmp2; + tmp1 = (tmp1 % tmp2) << (SREAL_PART_BITS / 2); + r->sig_hi += tmp << (SREAL_PART_BITS / 2); + + tmp = tmp1 / tmp2; + r->sig_hi += tmp; + + r->exp = a->exp - b->exp - SREAL_BITS - SREAL_PART_BITS / 2; + normalize (r); + } + #else + if (b->sig == 0) + { + abort (); + } + else + { + r->sig = (a->sig << SREAL_PART_BITS) / b->sig; + r->exp = a->exp - b->exp - SREAL_PART_BITS; + normalize (r); + } + #endif + return r; + } diff -c3prN gcc.old/gcc/sreal.h gcc/gcc/sreal.h *** gcc.old/gcc/sreal.h Thu Jan 1 01:00:00 1970 --- gcc/gcc/sreal.h Sun Jan 5 10:47:37 2003 *************** *** 0 **** --- 1,67 ---- + /* Definitions for simple data type for positive real numbers. + Copyright (C) 2002 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #ifndef GCC_SREAL_H + #define GCC_SREAL_H + + /* SREAL_PART_BITS has to be an even number. */ + #if (HOST_BITS_PER_WIDE_INT / 2) % 2 == 1 + #define SREAL_PART_BITS (HOST_BITS_PER_WIDE_INT / 2 - 1) + #else + #define SREAL_PART_BITS (HOST_BITS_PER_WIDE_INT / 2) + #endif + + #define uhwi unsigned HOST_WIDE_INT + #define MAX_HOST_WIDE_INT (((uhwi) 1 << (HOST_BITS_PER_WIDE_INT - 1)) - 1) + + #define SREAL_MIN_SIG ((uhwi) 1 << (SREAL_PART_BITS - 1)) + #define SREAL_MAX_SIG (((uhwi) 1 << SREAL_PART_BITS) - 1) + #define SREAL_MAX_EXP (INT_MAX / 4) + + #if SREAL_PART_BITS < 32 + #define SREAL_BITS (SREAL_PART_BITS * 2) + #else + #define SREAL_BITS SREAL_PART_BITS + #endif + + /* Structure for holding a simple real number. */ + typedef struct sreal + { + #if SREAL_PART_BITS < 32 + unsigned HOST_WIDE_INT sig_lo; /* Significant (lower part). */ + unsigned HOST_WIDE_INT sig_hi; /* Significant (higher part). */ + #else + unsigned HOST_WIDE_INT sig; /* Significant. */ + #endif + signed int exp; /* Exponent. */ + } sreal; + + extern void dump_sreal PARAMS ((FILE *, sreal *)); + extern sreal *sreal_init PARAMS ((sreal *, + unsigned HOST_WIDE_INT, + signed int)); + extern HOST_WIDE_INT sreal_to_int PARAMS ((sreal *)); + extern int sreal_compare PARAMS ((sreal *, sreal *)); + extern sreal *sreal_add PARAMS ((sreal *, sreal *, sreal *)); + extern sreal *sreal_sub PARAMS ((sreal *, sreal *, sreal *)); + extern sreal *sreal_mul PARAMS ((sreal *, sreal *, sreal *)); + extern sreal *sreal_div PARAMS ((sreal *, sreal *, sreal *)); + + #endif From gcc-patches-return-75055-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 18:49:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14196 invoked by alias); 5 Jan 2003 18:49:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14189 invoked from network); 5 Jan 2003 18:49:49 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 5 Jan 2003 18:49:49 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18VFq4-0005FN-00; Sun, 05 Jan 2003 10:49:36 -0800 To: Josef Zlomek Cc: gcc-patches@gcc.gnu.org Subject: Re: [rtlopt] speed improvement of branch prediction From: Zack Weinberg Date: Sun, 05 Jan 2003 10:49:36 -0800 In-Reply-To: <20030105164319.GA18624@artax.karlin.mff.cuni.cz> (Josef Zlomek's message of "Sun, 5 Jan 2003 17:43:19 +0100") Message-ID: <877kdjo2in.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <20030105164319.GA18624@artax.karlin.mff.cuni.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Josef Zlomek writes: > Hi, > > this is a corrected patch which speeds up branch prediction by using > sreal.c (simple real library) instead of real.c Speed up real.c instead. zw From gcc-patches-return-75056-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 18:51:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14811 invoked by alias); 5 Jan 2003 18:51:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14789 invoked from network); 5 Jan 2003 18:51:33 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 5 Jan 2003 18:51:33 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id NAA11376; Sun, 5 Jan 2003 13:51:20 -0500 (EST) Date: Sun, 5 Jan 2003 13:51:20 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301051851.NAA11376@caip.rutgers.edu> To: phil@jaj.com Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Cc: bkoz@redhat.com, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, gdr@integrable-solutions.net, libstdc++@gcc.gnu.org References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> <200301050616.BAA28028@caip.rutgers.edu> <20030105054404.A24241@disaster.jaj.com> > From: Phil Edwards > > On Sun, Jan 05, 2003 at 01:16:24AM -0500, Kaveh R. Ghazi wrote: > > Ok, but does pushing files down one directory level require hacking > > the test framework or will it "just work" merely by splitting and > > moving the files? If the former, would you please point me at the > > .exp file that needs updating? > > lib/libstdc++-v3-dg.exp: > proc libstdc++-v3-init, location of the .txt and .tst files > proc libstdc++-v3-list-sourcefiles, building the list of .cc files Thanks, that's exactly what I needed. I've got something testing now. -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75057-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 18:58:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21790 invoked by alias); 5 Jan 2003 18:58:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21776 invoked from network); 5 Jan 2003 18:58:05 -0000 Received: from unknown (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by 209.249.29.67 with SMTP; 5 Jan 2003 18:58:05 -0000 Received: from hiauly1.hia.nrc.ca (localhost [127.0.0.1]) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) with ESMTP id h05Ivqot018831; Sun, 5 Jan 2003 13:57:53 -0500 (EST) Received: (from dave@localhost) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) id h05IvqLN018830; Sun, 5 Jan 2003 13:57:52 -0500 (EST) Message-Id: <200301051857.h05IvqLN018830@hiauly1.hia.nrc.ca> Subject: Re: HP-UX 11.x patch to call C++ static constructors at dlopen() To: dave@hiauly1.hia.nrc.ca (John David Anglin) Date: Sun, 5 Jan 2003 13:57:51 -0500 (EST) From: "John David Anglin" Cc: gcc-patches@gcc.gnu.org In-Reply-To: <200301042214.h04MEIpj017057@hiauly1.hia.nrc.ca> from "John David Anglin" at Jan 4, 2003 05:14:18 pm MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit > 2002-01-04 John David Anglin > > * config.gcc (hppa*64*-*-hpux11*): Define extra_parts. Don't use > collect2. > * pa-hpux11.h (LDD_SUFFIX, PARSE_LDD_OUTPUT): Undefine. > (HAS_INIT_SECTION, LD_INIT_SWITCH, LD_FINI_SWITCH): Define. > * pa64-hpux.h (HP_INIT_ARRAY_SECTION_ASM_OP, > GNU_INIT_ARRAY_SECTION_ASM_OP, HP_FINI_ARRAY_SECTION_ASM_OP, > GNU_FINI_ARRAY_SECTION_ASM_OP): Define. > (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Define when not using > elfos.h. > (EH_FRAME_IN_DATA_SECTION): Delete define. > (HAS_INIT_SECTION, LD_INIT_SWITCH, LD_FINI_SWITCH): Undefine. > (STARTFILE_SPEC): Use crtbegin.o. > (ENDFILE_SPEC): Use crtend.o. > (INIT_SECTION_ASM_OP, FINI_SECTION_ASM_OP, CRT_CALL_STATIC_FUNCTION, > SUPPORTS_INIT_PRIORITY, PA_CXA_FINALIZE_STUB, PA_INIT_FINI_HACK, > PA_INIT_FRAME_DUMMY_ASM_OP, PA_JV_REGISTERCLASSES_STUB, > DTOR_LIST_BEGIN): Define. > * pa.c (TARGET_ASM_CONSTRUCTOR): Define. > (pa_asm_out_constructor, pa_asm_out_destructor): New functions. > * som.h (SUPPORTS_INIT_PRIORITY): Delete define. This patches fixes a bootstrap problem introduced yesterday. I got the order of defines wrong :-( Tested on hppa64-hp-hpux11.11 with HP ld with no regressions. Installed on main and 3.3. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) 2003-01-05 John David Anglin * pa64-hpux.h (JCR_SECTION_NAME): Define. (PA_INIT_FRAME_DUMMY_ASM_OP): Check EH_FRAME_SECTION_NAME instead of USE_EH_FRAME_REGISTRY when defining. Index: config/pa/pa64-hpux.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/pa/pa64-hpux.h,v retrieving revision 1.21 diff -u -3 -p -r1.21 pa64-hpux.h --- config/pa/pa64-hpux.h 4 Jan 2003 21:13:45 -0000 1.21 +++ config/pa/pa64-hpux.h 5 Jan 2003 05:30:13 -0000 @@ -112,6 +112,8 @@ do { \ #define DATA_SECTION_ASM_OP "\t.data" #define BSS_SECTION_ASM_OP "\t.section\t.bss" +#define JCR_SECTION_NAME ".jcr" + #define HP_INIT_ARRAY_SECTION_ASM_OP "\t.section\t.init" #define GNU_INIT_ARRAY_SECTION_ASM_OP "\t.section\t.init_array" #define HP_FINI_ARRAY_SECTION_ASM_OP "\t.section\t.fini" @@ -346,9 +348,9 @@ _Jv_RegisterClasses (void *p __attribute #define PA_JV_REGISTERCLASSES_STUB #endif -/* We need to add frame_dummy to the initializer list if USE_EH_FRAME_REGISTRY +/* We need to add frame_dummy to the initializer list if EH_FRAME_SECTION_NAME or JCR_SECTION_NAME is defined. */ -#if defined(USE_EH_FRAME_REGISTRY) || defined(JCR_SECTION_NAME) +#if defined(EH_FRAME_SECTION_NAME) || defined(JCR_SECTION_NAME) #define PA_INIT_FRAME_DUMMY_ASM_OP ".dword P%frame_dummy" #else #define PA_INIT_FRAME_DUMMY_ASM_OP "" From gcc-patches-return-75058-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 19:18:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25536 invoked by alias); 5 Jan 2003 19:18:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25525 invoked from network); 5 Jan 2003 19:18:12 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 5 Jan 2003 19:18:12 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id E20E9149F9; Sun, 5 Jan 2003 20:18:00 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18VGHX-0000Vz-00; Sun, 05 Jan 2003 20:17:59 +0100 Mail-Copies-To: never To: "Kaveh R. Ghazi" Cc: gcc-patches@gcc.gnu.org Subject: Re: Remove warning in unwind-d2-fde.h From: Andreas Jaeger Date: Sun, 05 Jan 2003 20:17:59 +0100 In-Reply-To: <200301051508.KAA08924@caip.rutgers.edu> ("Kaveh R. Ghazi"'s message of "Sun, 5 Jan 2003 10:08:21 -0500 (EST)") Message-ID: User-Agent: Gnus/5.090011 (Oort Gnus v0.11) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: <200301051508.KAA08924@caip.rutgers.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii "Kaveh R. Ghazi" writes: > > 2002-12-30 Andreas Jaeger > > > > * unwind-dw2-fde.h (last_fde): Add unused attribute for obj. > > Would you please put this in the 3.3 branch too? Ok, I'll do this right now, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75059-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 21:47:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 496 invoked by alias); 5 Jan 2003 21:47:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 486 invoked from network); 5 Jan 2003 21:47:39 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 5 Jan 2003 21:47:39 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h05LlJM01730; Sun, 5 Jan 2003 13:47:19 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org Subject: Re: [altivec] tidy up assembler code References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> <3E1687E1.D23E33F2@koffie.nl> From: Geoff Keating Date: 05 Jan 2003 13:47:19 -0800 In-Reply-To: <3E1687E1.D23E33F2@koffie.nl> Message-ID: Lines: 14 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Segher Boessenkool writes: > This just removes some unneeded/unwanted spaces from output templates. > > > 2002-12-29 Segher Boessenkool > > * config/rs6000/altivec.md: Remove spaces from assembler > instruction argument lists. This is OK. -- - Geoffrey Keating From gcc-patches-return-75060-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 21:48:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 902 invoked by alias); 5 Jan 2003 21:48:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 895 invoked from network); 5 Jan 2003 21:48:32 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 5 Jan 2003 21:48:32 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h05LmIe01734; Sun, 5 Jan 2003 13:48:18 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org Subject: Re: [altivec] fix crashes when using -dXXX References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> <3E16898E.F681C63E@koffie.nl> From: Geoff Keating Date: 05 Jan 2003 13:48:18 -0800 In-Reply-To: <3E16898E.F681C63E@koffie.nl> Message-ID: Lines: 20 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Segher Boessenkool writes: > vscr and the spe registers were missing from some tables; this causes > randomish crashes (and garbage in output) when using -da or the likes. > This happens since a few months already at least, so maybe apply to the > 3.3/3.2 branches too? > > I also tidied up these tables. > > > 2002-12-29 Segher Boessenkool > > * config/rs6000/rs6000.c (rs6000_reg_names): Add missing registers. > (alt_reg_names): Ditto, fix formatting. > * config/rs6000/rs6000.h (DEBUG_REGISTER_NAMES): Fix formatting. This is OK. Yes, please apply it to the 3.3 branch too. -- - Geoffrey Keating From gcc-patches-return-75061-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 23:05:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28636 invoked by alias); 5 Jan 2003 23:05:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28612 invoked from network); 5 Jan 2003 23:05:31 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 5 Jan 2003 23:05:31 -0000 Received: from localhost (IDENT:9VdWGMJQOkW54ZtZemAkeBZPJqt3BeEp@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h05N5IlU010756 for ; Sun, 5 Jan 2003 18:05:18 -0500 Date: Sun, 05 Jan 2003 18:05:15 -0500 (EST) Message-Id: <20030105.180515.78703930.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.md: Add a new pattern. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to add a new pattern. The new pattern is very useful for extracting the exponent of a floating point number. Currently, one extracts the exponent like (A & (0xff << 23)) >> 23 mov.b #23,r3l .Llt3: shlr.l er2 add #0xff,r3l bne .Llt3 and #0,r2h sub.w e2,e2 The patch converts the extraction to (A << 1) >> 24 shll.l er2 mov.w e2,r2 mov.b r2h,r2l extu.w r2 extu.l er2 The new sequence takes less space and time with fewer registers. Tested on h8300 port. Committed. Kazu Hirata 2003-01-05 Kazu Hirata * config/h8300/h8300.md (*extzv_8_23): New. Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.144 diff -u -r1.144 h8300.md --- h8300.md 5 Jan 2003 15:47:36 -0000 1.144 +++ h8300.md 5 Jan 2003 22:35:18 -0000 @@ -2534,6 +2534,8 @@ ;; COMBINE PATTERNS ;; ----------------------------------------------------------------- +;; extzv:SI + (define_insn "*extzv_8_8" [(set (match_operand:SI 0 "register_operand" "=r") (zero_extract:SI (match_operand:SI 1 "register_operand" "r") @@ -2553,6 +2555,26 @@ "mov.w\\t%e1,%f0\;extu.w\\t%f0\;extu.l\\t%S0" [(set_attr "cc" "set_znv") (set_attr "length" "6")]) + +;; Extract the exponent of a float. + +(define_insn_and_split "*extzv_8_23" + [(set (match_operand:SI 0 "register_operand" "=r") + (zero_extract:SI (match_operand:SI 1 "register_operand" "0") + (const_int 8) + (const_int 23)))] + "(TARGET_H8300H || TARGET_H8300S)" + "#" + "&& reload_completed" + [(parallel [(set (match_dup 0) + (ashift:SI (match_dup 0) + (const_int 1))) + (clobber (scratch:QI))]) + (parallel [(set (match_dup 0) + (lshiftrt:SI (match_dup 0) + (const_int 24))) + (clobber (scratch:QI))])] + "") ;; plus:SI From gcc-patches-return-75062-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 23:13:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1272 invoked by alias); 5 Jan 2003 23:13:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1259 invoked from network); 5 Jan 2003 23:13:12 -0000 Received: from unknown (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by 209.249.29.67 with SMTP; 5 Jan 2003 23:13:12 -0000 Received: from hiauly1.hia.nrc.ca (localhost [127.0.0.1]) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) with ESMTP id h05ND0ot019006; Sun, 5 Jan 2003 18:13:00 -0500 (EST) Received: (from dave@localhost) by hiauly1.hia.nrc.ca (8.12.0.Beta16/8.12.0.Beta16) id h05NCxL2019005; Sun, 5 Jan 2003 18:12:59 -0500 (EST) Message-Id: <200301052312.h05NCxL2019005@hiauly1.hia.nrc.ca> Subject: Re: (top level patch) Autoconfiscate. (Woo!) To: gcc-patches@gcc.gnu.org Date: Sun, 5 Jan 2003 18:12:59 -0500 (EST) From: "John David Anglin" Cc: neroden@twcny.rr.com MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit I just noticed that contrib/test_summary no longer generates on the main LAST_UPDATED and configure flags info. I seems to have disappeared about the time the autoconfiscation patch was installed. As the code is still there, I presume this info isn't being extracted correctly. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) From gcc-patches-return-75063-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 23:24:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4284 invoked by alias); 5 Jan 2003 23:24:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4271 invoked from network); 5 Jan 2003 23:24:07 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 5 Jan 2003 23:24:07 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18VK7U-0005Je-00; Sun, 05 Jan 2003 15:23:52 -0800 To: kenner@vlsi1.ultra.nyu.edu (Richard Kenner) Cc: segher@koffie.nl, gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] From: Zack Weinberg Date: Sun, 05 Jan 2003 15:23:52 -0800 In-Reply-To: <10212311201.AA11307@vlsi1.ultra.nyu.edu> (kenner@vlsi1.ultra.nyu.edu's message of "Tue, 31 Dec 02 07:01:46 EST") Message-ID: <87n0mfgozb.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <10212311201.AA11307@vlsi1.ultra.nyu.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii kenner@vlsi1.ultra.nyu.edu (Richard Kenner) writes: > Without it, lots of simplifications don't ever get applied. > This results in worse code. For example, with the patch > applied, bootstrap time goes down by a few percent > (powerpc-unknown-linux-gnu), as well as code size. > > One common example is, without the patch, computations involving > bitfields use mfcr insns; with it, they use logic instructions. > > But that's not what combine is supposed to do! The purpose of > combine is what it's name says, to *combine* insns. That's what it has historically done, but that is not adequate reason to refuse to make it do something else, if the something else is a more effective optimization. It sounds like you are reacting negatively to this patch without even considering what merit it might have. The alternative you and others have suggested -- adding splitters to the machine description -- neglects to consider that this change potentially benefits *all* architectures, and without requiring backend authors to jump through even more hoops than they already do. I am not saying that this patch should definitely be applied; I just think it is worthy of serious consideration on its technical merits, rather than being blown off because it makes the name "combine.c" marginally inaccurate. zw From gcc-patches-return-75064-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 23:31:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5324 invoked by alias); 5 Jan 2003 23:31:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5317 invoked from network); 5 Jan 2003 23:31:15 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 5 Jan 2003 23:31:15 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18VKEQ-0005Jr-00; Sun, 05 Jan 2003 15:31:02 -0800 To: "Joseph S. Myers" Cc: Subject: Re: gcc.pot regenerated From: Zack Weinberg Date: Sun, 05 Jan 2003 15:31:02 -0800 In-Reply-To: ("Joseph S. Myers"'s message of "Mon, 30 Dec 2002 19:18:19 +0000 (GMT)") Message-ID: <87k7hjgond.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii "Joseph S. Myers" writes: > 3. I hope Zack's patch to regenerate gcc.pot > can be > resurrected (but deriving the list of active branches automatically like > update_version now does). It's on my list - but my list is a year or so long and has lots of higher priority items, so don't be holding your breath. Feel free to pick up the ball. zw From gcc-patches-return-75065-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 23:58:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13080 invoked by alias); 5 Jan 2003 23:58:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13068 invoked from network); 5 Jan 2003 23:57:57 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.76.41) by 209.249.29.67 with SMTP; 5 Jan 2003 23:57:57 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id E6A465D92; Mon, 6 Jan 2003 00:56:08 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id 5D4F8F867 for ; Mon, 6 Jan 2003 00:56:08 +0100 (CET) Date: Mon, 6 Jan 2003 00:56:07 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Re: [3.4] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-1001541680-1041810967=:30406" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-1001541680-1041810967=:30406 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello, I have updated the tooldir-related paragraph in `gcc/doc/install.texi' to make clear that this applies to cross-compilers only. Simply replace `destdir-*doc.diff' (e.g. from the previous posting to this thread) with the attached `destdir6-doc.diff'. The diff consists of one insertion hunk only, so you can review it directly. Note that I have not actually tested any cross-compiler feature; the description of the installation into tooldirs is derived from `Makefile.in' fragments only. Could interested reviewers with cross-compiler setups (e.g. ix86 -> ppc) check whether "make DESTDIR=/some/root/dir install" installs compiler executables in `${DESTDIR}${exec_prefix}/${target_alias}/bin' if and only if that directory already exists? Indeed, there might be a problem due to the definition of gcc_tooldir relative to ${libsubdir}. Therefore, it might be necessary that `${DESTDIR}${libsubdir}' be created in advance, too, which shouldn't be. Is there interest for an adaptation of the DESTDIR patch to the 3.3 branch? Regards, Christian Cornelssen --8323584-1001541680-1041810967=:30406 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir6-doc.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir6-doc.diff" SW5kZXg6IGdjYy9kb2MvaW5zdGFsbC50ZXhpDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMv Z2NjL2djYy9kb2MvaW5zdGFsbC50ZXhpLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4xNjANCmRpZmYgLXUgLXIxLjE2MCBpbnN0YWxsLnRleGkNCi0tLSBn Y2MvZG9jL2luc3RhbGwudGV4aQkzIEphbiAyMDAzIDEwOjE2OjMwIC0wMDAw CTEuMTYwDQorKysgZ2NjL2RvYy9pbnN0YWxsLnRleGkJNSBKYW4gMjAwMyAx NzoxMDo0MSAtMDAwMA0KQEAgLTEzOTEsNiArMTM5MSw0NyBAQA0KIHBhcnRz IG9mIHRoZSBjb21waWxlciBpbiBAZmlsZXtAdmFye2xpYmRpcn0vZ2NjLWxp Yn07IGRvY3VtZW50YXRpb24gaW4NCiBpbmZvIGZvcm1hdCBpbiBAZmlsZXtA dmFye2luZm9kaXJ9fSAobm9ybWFsbHkgQGZpbGV7QHZhcntwcmVmaXh9L2lu Zm99KS4NCiANCitXaGVuIGluc3RhbGxpbmcgY3Jvc3MtY29tcGlsZXJzLCBH Q0MncyBleGVjdXRhYmxlcw0KK2FyZSBub3Qgb25seSBpbnN0YWxsZWQgaW50 byBAZmlsZXtAdmFye2JpbmRpcn19LCB0aGF0DQoraXMsIEBmaWxle0B2YXJ7 ZXhlYy1wcmVmaXh9L2Jpbn0sIGJ1dCBhZGRpdGlvbmFsbHkgaW50bw0KK0Bm aWxle0B2YXJ7ZXhlYy1wcmVmaXh9L0B2YXJ7dGFyZ2V0LWFsaWFzfS9iaW59 LCBpZiB0aGF0IGRpcmVjdG9yeQ0KK2V4aXN0cy4gIFR5cGljYWxseSwgc3Vj aCBAZGZue3Rvb2xkaXJzfSBob2xkIHRhcmdldC1zcGVjaWZpYw0KK2JpbnV0 aWxzLCBpbmNsdWRpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIuDQorDQorSW5z dGFsbGF0aW9uIGludG8gYSB0ZW1wb3Jhcnkgc3RhZ2luZyBhcmVhIG9yIGlu dG8gYSBjaHJvb3QgamFpbCBjYW4gYmUNCithY2hpZXZlZCB3aXRoIHRoZSBj b21tYW5kDQorDQorQGV4YW1wbGUNCittYWtlIERFU1RESVI9QHZhcntwYXRo LXRvLXJvb3RkaXJ9IGluc3RhbGwNCitAZW5kIGV4YW1wbGUNCisNCitAbm9p bmRlbnQgd2hlcmUgQHZhcntwYXRoLXRvLXJvb3RkaXJ9IGlzIHRoZSBhYnNv bHV0ZSBwYXRoIG9mIGEgZGlyZWN0b3J5DQorcmVsYXRpdmUgdG8gd2hpY2gg YWxsIGluc3RhbGxhdGlvbiBwYXRocyB3aWxsIGJlIGludGVycHJldGVkLg0K Kw0KK1VzaW5nIEBjb2Rle0RFU1RESVJ9IGhhcyBzZXZlcmFsIGFkdmFudGFn ZXMgb3ZlciB0ZW1wb3JhcmlseQ0KK2NoYW5naW5nIEBjb2Rle3ByZWZpeH0g ZHVyaW5nIGluc3RhbGxhdGlvbi4gIE1vc3QgaW1wb3J0YW50LCB0aGUNCitz ZXR0aW5nIG9mIEBjb2Rle0RFU1RESVJ9IGlzIG5ldmVyIGNvbXBpbGVkIGlu dG8gYmluYXJpZXMsIG5vciBkb2VzDQoraXQgZ2V0IHN0b3JlZCBwZXJtYW5l bnRseSBpbiBhbnkgY29uZmlndXJhdGlvbiwgaXQgb25seSBhZmZlY3RzDQor aW5zdGFsbGF0aW9uIChhbmQgdW5pbnN0YWxsYXRpb24sIG9uY2UgdGhhdCBp cyBmdWxseSBzdXBwb3J0ZWQpDQorYW5kIGNhbiBiZSBjaG9zZW4gYXJiaXRy YXJpbHkgYXQgaW5zdGFsbGF0aW9uIHRpbWUuICBNb3Jlb3ZlciwNCitzZXR0 aW5nIEBjb2Rle0RFU1RESVJ9IHJlbG9jYXRlcyBhbGwgaW5zdGFsbGF0aW9u IGRpcmVjdG9yaWVzDQorY29uc2lzdGVudGx5LCBldmVuIHRob3NlIHNldCB0 byBmaXhlZCB2YWx1ZXMgZHVyaW5nIGNvbmZpZ3VyYXRpb24uDQorRm9yIGV4 YW1wbGUsIGNvbmZpZ3VyaW5nIHdpdGggQHNhbXB7LS1pbmZvZGlyPS91c3Iv c2hhcmUvaW5mb30gbWFrZXMNCitAY29kZXtpbmZvZGlyfSBpbmRlcGVuZGVu dCBvZiBAY29kZXtwcmVmaXh9LCBidXQgaW5zdGFsbGF0aW9uIHdpdGgNCitA c2FtcHtERVNURElSPUB2YXJ7cGF0aC10by1yb290ZGlyfX0gd291bGQgY29y cmVjdGx5IGluc3RhbGwgaW5mbw0KK2ZpbGVzIGludG8gQGZpbGV7QHZhcntw YXRoLXRvLXJvb3RkaXJ9L3Vzci9zaGFyZS9pbmZvfS4gIE5vdGUgdGhhdA0K K3RoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IEBjb2Rle0RFU1RESVJ9IG5l ZWQgbm90IGV4aXN0IHlldDsNCitpdCB3aWxsIGJlIGNyZWF0ZWQgaWYgbmVj ZXNzYXJ5Lg0KKw0KK1RoZXJlIGlzIGEgc3VidGxlIHBvaW50IHdpdGggdG9v bGRpcnMgYW5kIEBjb2Rle0RFU1RESVJ9Og0KK0lmIHlvdSByZWxvY2F0ZSBh IGNyb3NzLWNvbXBpbGVyIGluc3RhbGxhdGlvbiB3aXRoDQorZS5nLkA6IEBz YW1we0RFU1RESVI9QHZhcntyb290ZGlyfX0sIHRoZW4gdGhlIGRpcmVjdG9y eQ0KK0BmaWxle0B2YXJ7cm9vdGRpcn0vQHZhcntleGVjLXByZWZpeH0vQHZh cnt0YXJnZXQtYWxpYXN9L2Jpbn0gd2lsbA0KK2JlIGZpbGxlZCB3aXRoIGR1 cGxpY2F0ZWQgR0NDIGV4ZWN1dGFibGVzIG9ubHkgaWYgaXQgYWxyZWFkeSBl eGlzdHMsDQoraXQgd2lsbCBub3QgYmUgY3JlYXRlZCBvdGhlcndpc2UuICBU aGlzIGlzIHJlZ2FyZGVkIGFzIGEgZmVhdHVyZSwNCitub3QgYXMgYSBidWcs IGJlY2F1c2UgaXQgZ2l2ZXMgc2xpZ2h0bHkgbW9yZSBjb250cm9sIHRvIHRo ZSBwYWNrYWdlcnMNCit1c2luZyB0aGUgQGNvZGV7REVTVERJUn0gZmVhdHVy ZS4NCisNCiBJZiB5b3UgYnVpbHQgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEdD QyB1c2luZyBAc2FtcHttYWtlIGJvb3RzdHJhcH0gdGhlbiBwbGVhc2UNCiBx dWlja2x5IHJldmlldyB0aGUgYnVpbGQgc3RhdHVzIHBhZ2UgZm9yIHlvdXIg cmVsZWFzZSwgYXZhaWxhYmxlIGZyb20NCiBAdXJlZntodHRwOi8vZ2NjLmdu dS5vcmcvYnVpbGRzdGF0Lmh0bWx9Lg0K --8323584-1001541680-1041810967=:30406-- From gcc-patches-return-75066-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 00:31:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21147 invoked by alias); 6 Jan 2003 00:31:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21137 invoked from network); 6 Jan 2003 00:31:23 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 209.249.29.67 with SMTP; 6 Jan 2003 00:31:23 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18VL9d-0006ZN-00 for ; Mon, 06 Jan 2003 01:30:09 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: gcc-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18VKjx-0005K9-00 for ; Mon, 06 Jan 2003 01:03:37 +0100 Path: not-for-mail From: Ben Elliston Subject: Re: (toplevel) Fix dramatic breakage for ordinary crosses (related to program_transform_name) Date: 06 Jan 2003 11:04:25 +1100 Organization: Red Hat Asia-Pacific Pty Ltd Lines: 25 Message-ID: References: <200212282057.gBSKva103446@duracef.shout.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Complaints-To: usenet@main.gmane.org User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Honest Recruiter) Cache-Post-Path: scooby.brisbane.redhat.com!unknown@scooby.brisbane.redhat.com X-Cache: nntpcache 3.0.1 (see http://www.nntpcache.org/) Cache-Post-Path: webdevap.brisbane.redhat.com!unknown@scooby.brisbane.redhat.com X-Cache: nntpcache 3.0.1 (see http://www.nntpcache.org/) Cc: gdb-patches@sources.redhat.com,binutils@sources.redhat.com Cc: gdb-patches@sources.redhat.com,gcc-patches@gcc.gnu.org >>>>> "Michael" == Michael Elizabeth Chastain writes: Michael> I would also prefer no locks, because I don't want to deal Michael> with locking mechanism headaches when a user with, say, an Michael> SMP Irix NFS client and an HP/UX NFS server has funny build Michael> problems. I have been pondering this problem. It's a shame Autoconf just can't be fixed (and patches even backported to 2.13, if necessary) to change the structure of the cache. These locking problems exist because the cache values are kept in a single file and to control access via a single lock would be too coarse grained. If, instead, the cache were a "dot" directory that contained files whose filenames had the form "key=value", then test results could be examined or updated using atomic file system operations and there should be no races. Michael> So I'm in favor of a dumb, simple, and reliable mechanism Michael> to serialize the configures. I think the performance of large configure runs is becoming too poor to take this line for much longer. Ben From gcc-patches-return-75067-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 00:49:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24469 invoked by alias); 6 Jan 2003 00:49:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24424 invoked from network); 6 Jan 2003 00:49:49 -0000 Received: from unknown (HELO duracef.shout.net) (204.253.184.12) by 209.249.29.67 with SMTP; 6 Jan 2003 00:49:49 -0000 Received: (from mec@localhost) by duracef.shout.net (8.11.6/8.11.6) id h060nOh25125; Sun, 5 Jan 2003 18:49:24 -0600 Date: Sun, 5 Jan 2003 18:49:24 -0600 From: Michael Elizabeth Chastain Message-Id: <200301060049.h060nOh25125@duracef.shout.net> To: bje@redhat.com, gdb-patches@sources.redhat.com Subject: Re: (toplevel) Fix dramatic breakage for ordinary crosses (related to program_transform_name) Cc: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Ben Elliston writes: > If, instead, the cache were a "dot" directory that contained files > whose filenames had the form "key=value", then test results could be > examined or updated using atomic file system operations and there > should be no races. The Linux kernel does something similar for its configuration variables (which are different than autoconf cache entries): one file per variable. The kernel does this to achieve fine-grained dependencies on the configuration, so that changing CONFIG_DRIVER_FOO causes recompilation of only the files that depend on CONFIG_DRIVER_FOO. With a little care I think this would be thread safe. One tricky point is that you have to be prepared for a file to not exist at the moment you open it because some other thread is doing an "unlink / rename" at that moment. Since this is a cache, that will simply cause some extra cache misses. There is a potential for a thundering-herd performance problem where every thread wants to compute HAVE_FOO_H, they all deposit identical copies into the cache, and then they move on and see that HAVE_BAR_H is not in the cache either, lockstepping their way through similar configure scripts. It would actually improve efficiency for autoconf to randomize the order of tests in the configure script. :) Also, I think that you could mix the two cache styles in a single tree. All the old-style subdirectories would use config.cache, and all the new-style subdirectories would use the new fine-grained cache. Serialization would be needed only for old-style "config.cache" subdirectories. New-style subdirectories could somehow say to autogen "I am new-style, I use the new fine-grained cache, don't serialize my configure goal with other configure goals." There would be a performance penalty for a mixed tree, which would go away when the last old-style subdirectory got upgraded. Michael C back-seat driver :) From gcc-patches-return-75068-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 00:58:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30194 invoked by alias); 6 Jan 2003 00:58:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30185 invoked from network); 6 Jan 2003 00:58:13 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.76.54) by 209.249.29.67 with SMTP; 6 Jan 2003 00:58:13 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id 74AE75D92; Mon, 6 Jan 2003 01:59:10 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id E25DDF867 for ; Mon, 6 Jan 2003 01:59:10 +0100 (CET) Date: Mon, 6 Jan 2003 01:59:09 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Subject: Ping: [3.4] DESTDIR support completed In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi, thanks for the initial feedback to this thread. However, you may have got the impression that I'm a maintainer who can commit patches once he has got your OK. That's not the case. I have to update and resubmit the entire patch on changes to CVS head and hope that some privileged people are so nice to review it and agree on it before another check-in requires new verification, which, to be thorough, takes about two days every time on my slow (but quota-free) machines. For reference, the previous thread message was `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00248.html'. I cannot afford keeping the patches constantly up to date for an indefinite amount of time. Would someone be brave and adopt the case? Best regards, Christian Cornelssen From gcc-patches-return-75069-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 02:26:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24249 invoked by alias); 6 Jan 2003 02:26:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24235 invoked from network); 6 Jan 2003 02:26:33 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 6 Jan 2003 02:26:33 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h062OM323146; Sun, 5 Jan 2003 21:24:22 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h062OMT40530; Sun, 5 Jan 2003 21:24:22 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id VAA24602; Sun, 5 Jan 2003 21:24:22 -0500 Message-Id: <200301060224.VAA24602@makai.watson.ibm.com> To: Zack Weinberg cc: kenner@vlsi1.ultra.nyu.edu (Richard Kenner), segher@koffie.nl, gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <87n0mfgozb.fsf@egil.codesourcery.com> Date: Sun, 05 Jan 2003 21:24:22 -0500 From: David Edelsohn I don't think that anyone is objecting to the concept and the benefit. If I understand correctly, the patch violates the semantics of the combiner algorithm which requires a declining cost calculated as the number of instructions. Allowing combinations that do not decrease the cost would make the algorithm non-deterministic and possibly not converge, right? David From gcc-patches-return-75070-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 02:41:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10695 invoked by alias); 6 Jan 2003 02:41:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10687 invoked from network); 6 Jan 2003 02:41:56 -0000 Received: from unknown (HELO gandalf.codesourcery.com) (66.60.148.227) by 209.249.29.67 with SMTP; 6 Jan 2003 02:41:56 -0000 Received: (from mitchell@localhost) by gandalf.codesourcery.com (8.11.6/8.11.6) id h062Xwi02381; Sun, 5 Jan 2003 18:33:58 -0800 Date: Sun, 5 Jan 2003 18:33:58 -0800 Message-Id: <200301060233.h062Xwi02381@gandalf.codesourcery.com> X-Authentication-Warning: gandalf.codesourcery.com: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org, bangerth@ticam.utexas.edu Subject: C++ PATCH: Fix more parser regressions Reply-to: mark@codesourcery.com Wolfgang found two problems caused by the new parser, fixed with this patch. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-05 Mark Mitchell * g++.dg/template/defarg-1.C: New test. * g++.dg/template/local2.C: Likewise. 2003-01-05 Mark Mitchell * parser.c (cp_parser_template_parameter): Adjust call to cp_parser_parameter_declaration. (cp_parser_parameter_declaration_list): Likewise. (cp_parser_parameter_declaration): Replace greater_than_is_operator_p with template_parm_p parameter. Do not cache tokens for template default arguments. * pt.c (retrieve_local_specialization): Use htab_find, not htab_find_with_hash. (register_local_specialization): Use htab_find_slot, not htab_find_slot_with_hash. (instantiate_decl): Pass a hash function to htab_create. Index: cp/parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.18 diff -c -p -r1.18 parser.c *** cp/parser.c 5 Jan 2003 04:38:58 -0000 1.18 --- cp/parser.c 6 Jan 2003 02:35:24 -0000 *************** cp_parser_template_parameter (parser) *** 7911,7918 **** of the template parameter-list rather than a greater-than operator. */ return ! cp_parser_parameter_declaration (parser, ! /*greater_than_is_operator_p=*/false); } /* Parse a type-parameter. --- 7911,7917 ---- of the template parameter-list rather than a greater-than operator. */ return ! cp_parser_parameter_declaration (parser, /*template_parm_p=*/true); } /* Parse a type-parameter. *************** cp_parser_parameter_declaration_list (pa *** 10792,10799 **** tree parameter; /* Parse the parameter. */ parameter ! = cp_parser_parameter_declaration (parser, ! /*greater_than_is_operator_p=*/true); /* If a parse error ocurred parsing the parameter declaration, then the entire parameter-declaration-list is erroneous. */ if (parameter == error_mark_node) --- 10791,10798 ---- tree parameter; /* Parse the parameter. */ parameter ! = cp_parser_parameter_declaration (parser, /*template_parm_p=*/false); ! /* If a parse error ocurred parsing the parameter declaration, then the entire parameter-declaration-list is erroneous. */ if (parameter == error_mark_node) *************** cp_parser_parameter_declaration_list (pa *** 10842,10850 **** decl-specifier-seq abstract-declarator [opt] decl-specifier-seq abstract-declarator [opt] = assignment-expression ! If GREATER_THAN_IS_OPERATOR_P is FALSE, then a non-nested `>' token ! encountered during the parsing of the assignment-expression is not ! interpreted as a greater-than operator. Returns a TREE_LIST representing the parameter-declaration. The TREE_VALUE is a representation of the decl-specifier-seq and --- 10841,10850 ---- decl-specifier-seq abstract-declarator [opt] decl-specifier-seq abstract-declarator [opt] = assignment-expression ! If TEMPLATE_PARM_P is TRUE, then this parameter-declaration ! declares a template parameter. (In that case, a non-nested `>' ! token encountered during the parsing of the assignment-expression ! is not interpreted as a greater-than operator.) Returns a TREE_LIST representing the parameter-declaration. The TREE_VALUE is a representation of the decl-specifier-seq and *************** cp_parser_parameter_declaration_list (pa *** 10853,10863 **** TREE_VALUE represents the declarator. */ static tree ! cp_parser_parameter_declaration (parser, greater_than_is_operator_p) ! cp_parser *parser; ! bool greater_than_is_operator_p; { bool declares_class_or_enum; tree decl_specifiers; tree attributes; tree declarator; --- 10853,10863 ---- TREE_VALUE represents the declarator. */ static tree ! cp_parser_parameter_declaration (cp_parser *parser, ! bool template_parm_p) { bool declares_class_or_enum; + bool greater_than_is_operator_p; tree decl_specifiers; tree attributes; tree declarator; *************** cp_parser_parameter_declaration (parser, *** 10866,10871 **** --- 10866,10881 ---- cp_token *token; const char *saved_message; + /* In a template parameter, `>' is not an operator. + + [temp.param] + + When parsing a default template-argument for a non-type + template-parameter, the first non-nested `>' is taken as the end + of the template parameter-list rather than a greater-than + operator. */ + greater_than_is_operator_p = !template_parm_p; + /* Type definitions may not appear in parameter types. */ saved_message = parser->type_definition_forbidden_message; parser->type_definition_forbidden_message *************** cp_parser_parameter_declaration (parser, *** 10930,10936 **** /* If we are defining a class, then the tokens that make up the default argument must be saved and processed later. */ ! if (at_class_scope_p () && TYPE_BEING_DEFINED (current_class_type)) { unsigned depth = 0; --- 10940,10947 ---- /* If we are defining a class, then the tokens that make up the default argument must be saved and processed later. */ ! if (!template_parm_p && at_class_scope_p () ! && TYPE_BEING_DEFINED (current_class_type)) { unsigned depth = 0; Index: cp/pt.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/pt.c,v retrieving revision 1.642 diff -c -p -r1.642 pt.c *** cp/pt.c 3 Jan 2003 19:48:55 -0000 1.642 --- cp/pt.c 6 Jan 2003 02:35:25 -0000 *************** static tree *** 745,753 **** retrieve_local_specialization (tmpl) tree tmpl; { ! tree spec = ! (tree) htab_find_with_hash (local_specializations, tmpl, ! htab_hash_pointer (tmpl)); return spec ? TREE_PURPOSE (spec) : NULL_TREE; } --- 745,751 ---- retrieve_local_specialization (tmpl) tree tmpl; { ! tree spec = (tree) htab_find (local_specializations, tmpl); return spec ? TREE_PURPOSE (spec) : NULL_TREE; } *************** register_local_specialization (spec, tmp *** 934,941 **** { void **slot; ! slot = htab_find_slot_with_hash (local_specializations, tmpl, ! htab_hash_pointer (tmpl), INSERT); *slot = build_tree_list (spec, tmpl); } --- 932,938 ---- { void **slot; ! slot = htab_find_slot (local_specializations, tmpl, INSERT); *slot = build_tree_list (spec, tmpl); } *************** instantiate_decl (d, defer_ok) *** 10311,10317 **** /* Set up the list of local specializations. */ local_specializations = htab_create (37, ! NULL, eq_local_specializations, NULL); --- 10308,10314 ---- /* Set up the list of local specializations. */ local_specializations = htab_create (37, ! htab_hash_pointer, eq_local_specializations, NULL); Index: testsuite/g++.dg/template/defarg1.C =================================================================== RCS file: testsuite/g++.dg/template/defarg1.C diff -N testsuite/g++.dg/template/defarg1.C *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/g++.dg/template/defarg1.C 6 Jan 2003 02:35:26 -0000 *************** *** 0 **** --- 1,7 ---- + struct Outer { + template struct Inner {}; + }; + + void f() { + Outer::Inner<2> i; + } Index: testsuite/g++.dg/template/local2.C =================================================================== RCS file: testsuite/g++.dg/template/local2.C diff -N testsuite/g++.dg/template/local2.C *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/g++.dg/template/local2.C 6 Jan 2003 02:35:26 -0000 *************** *** 0 **** --- 1,61 ---- + template + struct X { + double & f (const unsigned int i, + const unsigned int j); + void g (X &M); + }; + + template + void X::g (X &x) { + double t14 = x.f(0,0)*x.f(1,1); + double t15 = x.f(2,2)*x.f(3,3); + double t17 = x.f(2,3)*x.f(3,2); + double t19 = x.f(0,0)*x.f(2,1); + double t20 = x.f(1,2)*x.f(3,3); + double t22 = x.f(1,3)*x.f(3,2); + double t24 = x.f(0,0)*x.f(3,1); + double t25 = x.f(1,2)*x.f(2,3); + double t27 = x.f(1,3)*x.f(2,2); + double t29 = x.f(1,0)*x.f(0,1); + double t32 = x.f(1,0)*x.f(2,1); + double t33 = x.f(0,2)*x.f(3,3); + double t35 = x.f(0,3)*x.f(3,2); + double t37 = x.f(1,0)*x.f(3,1); + double t38 = x.f(0,2)*x.f(2,3); + double t40 = x.f(0,3)*x.f(2,2); + double t42 = t14*t15-t14*t17-t19*t20+t19*t22+ + t24*t25-t24*t27-t29*t15+t29*t17+ + t32*t33-t32*t35-t37*t38+t37*t40; + double t43 = x.f(2,0)*x.f(0,1); + double t46 = x.f(2,0)*x.f(1,1); + double t49 = x.f(2,0)*x.f(3,1); + double t50 = x.f(0,2)*x.f(1,3); + double t52 = x.f(0,3)*x.f(1,2); + double t54 = x.f(3,0)*x.f(0,1); + double t57 = x.f(3,0)*x.f(1,1); + double t60 = x.f(3,0)*x.f(2,1); + double t63 = t43*t20-t43*t22-t46*t33+t46*t35+ + t49*t50-t49*t52-t54*t25+t54*t27+ + t57*t38-t57*t40-t60*t50+t60*t52; + double t65 = 1/(t42+t63); + double t71 = x.f(0,2)*x.f(2,1); + double t73 = x.f(0,3)*x.f(2,1); + double t75 = x.f(0,2)*x.f(3,1); + double t77 = x.f(0,3)*x.f(3,1); + double t81 = x.f(0,1)*x.f(1,2); + double t83 = x.f(0,1)*x.f(1,3); + double t85 = x.f(0,2)*x.f(1,1); + double t87 = x.f(0,3)*x.f(1,1); + double t101 = x.f(1,0)*x.f(2,2); + double t103 = x.f(1,0)*x.f(2,3); + double t105 = x.f(2,0)*x.f(1,2); + double t107 = x.f(2,0)*x.f(1,3); + double t109 = x.f(3,0)*x.f(1,2); + double t111 = x.f(3,0)*x.f(1,3); + double t115 = x.f(0,0)*x.f(2,2); + double t117 = x.f(0,0)*x.f(2,3); + double t119 = x.f(2,0)*x.f(0,2); + double t121 = x.f(2,0)*x.f(0,3); + } + + template void X::g (X&); From gcc-patches-return-75071-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 04:02:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9405 invoked by alias); 6 Jan 2003 04:02:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9398 invoked from network); 6 Jan 2003 04:02:39 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 6 Jan 2003 04:02:39 -0000 Received: from koffie.nl (p2489.vwr.wanadoo.nl [194.134.217.194]) by smtp1.euronet.nl (Postfix) with ESMTP id 462F567177; Mon, 6 Jan 2003 05:01:54 +0100 (MET) Message-ID: <3E18FFA3.37F681F7@koffie.nl> Date: Mon, 06 Jan 2003 05:01:39 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: David Edelsohn Cc: Zack Weinberg , Richard Kenner , gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <87n0mfgozb.fsf@egil.codesourcery.com> <200301060224.VAA24602@makai.watson.ibm.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit David Edelsohn wrote: > > I don't think that anyone is objecting to the concept and the > benefit. If I understand correctly, the patch violates the semantics of > the combiner algorithm which requires a declining cost calculated as the > number of instructions. Allowing combinations that do not decrease the > cost would make the algorithm non-deterministic and possibly not converge, > right? Only if the "canonicalizations" don't actually canonicalize... but yes, in that (hypothetical) case that could happen. Some documentation might be needed to that extend if this patch ever gets accepted. Segher From gcc-patches-return-75072-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 04:07:53 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11163 invoked by alias); 6 Jan 2003 04:07:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11149 invoked from network); 6 Jan 2003 04:07:51 -0000 Received: from unknown (HELO smtp1.euronet.nl) (194.134.35.133) by 209.249.29.67 with SMTP; 6 Jan 2003 04:07:51 -0000 Received: from koffie.nl (p2489.vwr.wanadoo.nl [194.134.217.194]) by smtp1.euronet.nl (Postfix) with ESMTP id CBC116715E; Mon, 6 Jan 2003 05:07:36 +0100 (MET) Message-ID: <3E19010F.D399E5C2@koffie.nl> Date: Mon, 06 Jan 2003 05:07:44 +0100 From: Segher Boessenkool X-Accept-Language: en MIME-Version: 1.0 To: David Edelsohn , Zack Weinberg , Richard Kenner , gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <87n0mfgozb.fsf@egil.codesourcery.com> <200301060224.VAA24602@makai.watson.ibm.com> <3E18FFA3.37F681F7@koffie.nl> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Segher Boessenkool wrote: > > David Edelsohn wrote: > > > > I don't think that anyone is objecting to the concept and the > > benefit. If I understand correctly, the patch violates the semantics of > > the combiner algorithm which requires a declining cost calculated as the > > number of instructions. Allowing combinations that do not decrease the > > cost would make the algorithm non-deterministic and possibly not converge, > > right? > > Only if the "canonicalizations" don't actually canonicalize... but yes, in > that (hypothetical) case that could happen. Some documentation might be > needed to that extend if this patch ever gets accepted. I should add that this would require two simplifications that do exactly the opposite transform, and would maybe already recurse -- in a subroutine of combine. Segher From gcc-patches-return-75073-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 04:08:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12035 invoked by alias); 6 Jan 2003 04:08:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11995 invoked from network); 6 Jan 2003 04:08:30 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 6 Jan 2003 04:08:30 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id XAA01032; Sun, 5 Jan 2003 23:08:17 -0500 (EST) Date: Sun, 5 Jan 2003 23:08:17 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301060408.XAA01032@caip.rutgers.edu> To: phil@jaj.com Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Cc: bkoz@redhat.com, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, gdr@integrable-solutions.net, libstdc++@gcc.gnu.org References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> <200301050616.BAA28028@caip.rutgers.edu> <20030105054404.A24241@disaster.jaj.com> > From: Phil Edwards > > On Sun, Jan 05, 2003 at 01:16:24AM -0500, Kaveh R. Ghazi wrote: > > Ok, but does pushing files down one directory level require hacking > > the test framework or will it "just work" merely by splitting and > > moving the files? If the former, would you please point me at the > > .exp file that needs updating? > > lib/libstdc++-v3-dg.exp: > proc libstdc++-v3-init, location of the .txt and .tst files > proc libstdc++-v3-list-sourcefiles, building the list of .cc files Thanks again, here's the patch. Note, there was no test 4 and 5 in the file so there's no 04.cc and 05.cc. Tested on sparc-solaris2.7. Ok to install? Thanks, --Kaveh 2003-01-05 Kaveh R. Ghazi * testsuite/lib/libstdc++-v3-dg.exp (libstdc++-v3-init, libstdc++-v3-list-sourcefiles): Additionally handle files one level deeper in glob patterns. * testsuite/27_io/istream_extractor_arith.cc: Delete, split... * testsuite/27_io/istream_extractor_arith/01.cc, testsuite/27_io/istream_extractor_arith/02.cc, testsuite/27_io/istream_extractor_arith/03.cc, testsuite/27_io/istream_extractor_arith/06.cc, testsuite/27_io/istream_extractor_arith/07.cc, testsuite/27_io/istream_extractor_arith/08.cc, testsuite/27_io/istream_extractor_arith/09.cc, testsuite/27_io/istream_extractor_arith/10.cc, testsuite/27_io/istream_extractor_arith/11.cc, testsuite/27_io/istream_extractor_arith/12.cc, testsuite/27_io/istream_extractor_arith/13.cc: ... to new files. * testsuite/27_io/istream_extractor_arith/12.cc: Add XFAIL for sparc*-*-solaris2*. diff -rup orig/egcc-CVS20030105/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp egcc-CVS20030105/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 2002-06-04 16:02:36.000000000 -0400 +++ egcc-CVS20030105/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 2003-01-05 13:47:39.449566426 -0500 @@ -54,8 +54,8 @@ proc libstdc++-v3-init { args } { set dg-do-what-default run # Copy any required data files. - libstdc++-v3-copy-files [glob -nocomplain "$srcdir/*/*.tst"] $outdir - libstdc++-v3-copy-files [glob -nocomplain "$srcdir/*/*.txt"] $outdir + libstdc++-v3-copy-files [glob -nocomplain "$srcdir/{,*/}*/*.tst"] $outdir + libstdc++-v3-copy-files [glob -nocomplain "$srcdir/{,*/}*/*.txt"] $outdir # set LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found. # locate libgcc.a so we don't need to account for different values of @@ -233,7 +233,7 @@ proc libstdc++-v3-list-sourcefiles { } { set f [open $files_file "w"] set where_we_were [pwd] cd $srcdir - foreach s [lsort [glob -nocomplain */*.cc]] { + foreach s [lsort [glob -nocomplain {,*/}*/*.cc]] { lappend sfiles ${srcdir}/${s} puts $f $s } diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/01.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/01.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/01.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/01.cc 2003-01-05 13:36:02.654397947 -0500 @@ -0,0 +1,134 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +// minimal sanity check +bool test01() { + + bool test = true; + + // Integral Types: + bool b1 = false; + bool b2 = false; + short s1 = 0; + int i1 = 0; + long l1 = 0; + unsigned short us1 = 0; + unsigned int ui1 = 0; + unsigned long ul1 = 0; + + // Floating-point Types: + float f1 = 0; + double d1 = 0; + long double ld1 = 0; + + // process alphanumeric versions of bool values + std::ios_base::fmtflags fmt = is_02.flags(); + bool testfmt = fmt & std::ios_base::boolalpha; + is_02.setf(std::ios_base::boolalpha); + fmt = is_02.flags(); + testfmt = fmt & std::ios_base::boolalpha; + is_02 >> b1; + VERIFY( b1 == 1 ); + is_02 >> b1; + VERIFY( b1 == 0 ); + + // process numeric versions of of bool values + is_02.unsetf(std::ios_base::boolalpha); + fmt = is_02.flags(); + testfmt = fmt & std::ios_base::boolalpha; + is_02 >> b1; + VERIFY( b1 == 0 ); + is_02 >> b1; + VERIFY( b1 == 1 ); + + // is_03 == "-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5" + is_03 >> l1; + VERIFY( l1 == -19999999 ); + is_03 >> ul1; + VERIFY( ul1 == 777777 ); + is_03 >> i1; + VERIFY( i1 == -234234 ); + is_03 >> ui1; + VERIFY( ui1 == 233 ); + is_03 >> s1; + VERIFY( s1 == -234 ); + is_03 >> us1; + VERIFY( us1 == 33 ); + is_03 >> b1; + VERIFY( b1 == 1 ); + is_03 >> ld1; + VERIFY( ld1 == 66300.25 ); + is_03 >> d1; + VERIFY( d1 == .315 ); + is_03 >> f1; + VERIFY( f1 == 1.5 ); + + is_04 >> std::hex >> i1; + std::printf ("%d %d %d\n", i1, i1 == 0x123, test); + VERIFY( i1 == 0x123 ); + std::printf ("%d %d %d\n", i1, i1 == 0x123, test); + + // test void pointers + int i = 55; + void* po = &i; + void* pi; + + ss_01 << po; + ss_01 >> pi; + std::printf ("%x %x\n", pi, po); + VERIFY( po == pi ); + +#ifdef DEBUG_ASSERT + assert(test); +#endif + + return test; +} + +int main() +{ + test01(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/02.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/02.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/02.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/02.cc 2003-01-05 13:35:54.175218605 -0500 @@ -0,0 +1,71 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +// elaborated test for ints +bool test02() { + + bool test = true; + const std::string str_01("20000AB"); + std::stringbuf strb_01(str_01, std::ios_base::in); + std::istream is(&strb_01); + + int n = 15; + is >> n; + VERIFY( n == 20000 ); + char c = is.peek(); + VERIFY( c == 65 ); + +#ifdef DEBUG_ASSERT + assert(test); +#endif + + return test; +} + +int main() +{ + test02(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/03.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/03.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/03.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/03.cc 2003-01-05 13:36:08.483848182 -0500 @@ -0,0 +1,70 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +bool test03() +{ + std::stringbuf sbuf; + std::istream istr(&sbuf); + std::ostream ostr(&sbuf); + + bool test = true; + long l01; + ostr << "12220101"; + istr >> l01; // _M_in_end set completely incorrectly here. + VERIFY( l01 == 12220101 ); + VERIFY( istr.rdstate() == std::ios_base::eofbit ); + +#ifdef DEBUG_ASSERT + assert(test); +#endif + + return test; +} + +int main() +{ + test03(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/06.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/06.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/06.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/06.cc 2003-01-05 13:36:16.943118340 -0500 @@ -0,0 +1,83 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00081.html +// Jim Parsons +void test06() +{ + // default locale, grouping is turned off + bool test = true; + unsigned int h4, h3, h2; + char c; + std::string s("205,199,144"); + std::istringstream is(s); + + is >> h4; // 205 + VERIFY( h4 == 205 ); + is >> c; // ',' + VERIFY( c == ',' ); + + is >> h4; // 199 + VERIFY( h4 == 199 ); + is >> c; // ',' + VERIFY( c == ',' ); + + is >> h4; // 144 + VERIFY( is.rdstate() == std::ios_base::eofbit ); + VERIFY( h4 == 144 ); + is >> c; // EOF + VERIFY( c == ',' ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + +#ifdef DEBUG_ASSERT + assert(test); +#endif +} + +int main() +{ + test06(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/07.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/07.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/07.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/07.cc 2003-01-05 13:37:07.808438895 -0500 @@ -0,0 +1,169 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +namespace std { + class test_numpunct1 : public numpunct + { + protected: + string + do_grouping() const + { return string(1, '\003'); } + }; +} // namespace std + +void test07() +{ + // manufactured locale, grouping is turned on + bool test = true; + unsigned int h4 = 0, h3 = 0, h2 = 0; + float f1 = 0.0; + const std::string s1("205,199 23,445.25 1,024,365 123,22,24"); + std::istringstream is(s1); + is.imbue(std::locale(std::locale(), new std::test_numpunct1)); + + // Basic operation. + is >> h4; + VERIFY( h4 == 205199 ); + VERIFY( is.good() ); + + is.clear(); + is >> f1; + VERIFY( f1 == 23445.25 ); + VERIFY( is.good() ); + + is.clear(); + is >> h3; + VERIFY( h3 == 1024365 ); + VERIFY( is.good() ); + + is.clear(); + is >> h2; + VERIFY( h2 == 0 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + VERIFY( static_cast(is.rdstate() & std::ios_base::eofbit) ); + + // Stress tests for explicit errors in grouping corner cases. The + // validity of these tests and results have been hammered out in + // private email between bkoz and ncm between Jan 25 and Jan 27, 2000. + // Thanks nate -- benjamin + const std::string s2(",111 4,,4 0.25,345 5..25 156,, 1,000000 1000000 1234,567"); + h3 = h4 = h2 = 0; + f1 = 0.0; + const char c_control = '?'; + char c = c_control; + is.clear(); + is.str(s2); + + is >> h4; + VERIFY( h4 == 0 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + is.clear(); + is >> c; + VERIFY( c == ',' ); + VERIFY( is.good() ); + + is.ignore(3); + is >> f1; + VERIFY( f1 == 0.0 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + is.clear(); + is >> c; + VERIFY( c == ',' ); + is >> c; + VERIFY( c == '4' ); + VERIFY( is.good() ); + + is >> f1; + VERIFY( f1 == 0.25 ); + VERIFY( is.good() ); + is >> c; + VERIFY( c == ',' ); + is >> h2; + VERIFY( h2 == 345 ); + VERIFY( is.good() ); + f1 = 0.0; + h2 = 0; + + is >> f1; + VERIFY( f1 == 5.0 ); + VERIFY( is.good() ); + is >> f1; + VERIFY( f1 == .25 ); + VERIFY( is.good() ); + + is >> h3; + VERIFY( h3 == 0 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + is.clear(); + is >> c; + VERIFY( c == ',' ); // second one + VERIFY( is.good() ); + + is >> h2; + VERIFY( h2 == 0 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + is.clear(); + + is >> h2; + VERIFY( h2 == 1000000 ); + VERIFY( is.good() ); + h2 = 0; + + is >> h2; + VERIFY( h2 == 0 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::failbit) ); + VERIFY( static_cast(is.rdstate() & std::ios_base::eofbit) ); + is.clear(); + +#ifdef DEBUG_ASSERT + assert(test); +#endif +} + +int main() +{ + test07(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/08.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/08.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/08.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/08.cc 2003-01-05 13:38:37.942623071 -0500 @@ -0,0 +1,93 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +namespace std { + class test_numpunct2 : public numpunct + { + protected: + string + do_grouping() const + { return string("\002\003"); } + }; +} // namespace std + +void test08() +{ + // manufactured locale, grouping is turned on + bool test = true; + unsigned int h4 = 0, h3 = 0, h2 = 0; + float f1 = 0.0; + const std::string s1("1,22 205,19 22,123,22"); + const std::string s2("1,220 2050,19 202,123,22"); + + std::istringstream is(s1); + is.imbue(std::locale(std::locale(), new std::test_numpunct2)); + + // Basic operation. + is >> h4; + VERIFY( h4 == 122 ); + VERIFY( is.good() ); + + is.clear(); + is >> h3; + VERIFY( h3 == 20519 ); + VERIFY( is.good() ); + + is.clear(); + is >> h2; + VERIFY( h2 == 2212322 ); + VERIFY( static_cast(is.rdstate() & std::ios_base::eofbit) ); + + +#ifdef DEBUG_ASSERT + assert(test); +#endif +} + +int main() +{ + test08(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/09.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/09.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/09.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/09.cc 2003-01-05 13:43:35.271138765 -0500 @@ -0,0 +1,72 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +bool test09() +{ + bool test = true; + + std::string st("2.456e3-+0.567e-2"); + std::stringbuf sb(st); + std::istream is(&sb); + double f1 = 0, f2 = 0; + char c; + (is>>std::ws) >> f1; + (is>>std::ws) >> c; + (is>>std::ws) >> f2; + test = f1 == 2456; + VERIFY( f2 == 0.00567 ); + VERIFY( c == '-' ); +#ifdef DEBUG_ASSERT + assert(test); +#endif + + return test; +} + +int main() +{ + test09(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/10.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/10.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/10.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/10.cc 2003-01-05 13:40:26.195881385 -0500 @@ -0,0 +1,154 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +bool test10() { + std::string str_01("0 00 000 +0 +0 -0"); + std::stringbuf isbuf_01(str_01); + std::istream is_01(&isbuf_01); + + bool test = true; + + int n = 365; + is_01 >> n; + VERIFY( n == 0 ); + n = 364; + is_01 >> n; + VERIFY( n == 0 ); + n = 363; + is_01 >> n; + VERIFY( n == 0 ); + n = 362; + is_01 >> n; + VERIFY( n == 0 ); + n = 361; + is_01 >> n; + VERIFY( n == 0 ); + n = 360; + is_01 >> n; + VERIFY( n == 0 ); + VERIFY( is_01.rdstate() == std::ios_base::eofbit ); + + std::string str_02("0x32 0X33 033 33"); + std::stringbuf isbuf_02(str_02); + std::istream is_02(&isbuf_02); + is_02.unsetf(std::ios_base::basefield); + is_02 >> n; + VERIFY( n == 50 ); + is_02 >> n; + VERIFY( n == 51 ); + is_02 >> n; + VERIFY( n == 27 ); + is_02 >> n; + VERIFY( n == 33 ); + VERIFY( is_02.rdstate() == std::ios_base::eofbit ); + + std::stringbuf isbuf_03(str_02); + std::istream is_03(&isbuf_03); + char c; + int m; + + is_03 >> std::dec >> n >> c >> m; + VERIFY( n == 0 ); + VERIFY( c == 'x' ); + VERIFY( m == 32 ); + + is_03 >> std::oct >> m >> c >> n; + VERIFY( m == 0 ); + VERIFY( c == 'X' ); + VERIFY( n == 27 ); + + is_03 >> std::dec >> m >> n; + VERIFY( m == 33 ); + VERIFY( n == 33 ); + VERIFY( is_03.rdstate() == std::ios_base::eofbit ); + + std::string str_04("3. 4.5E+2a5E-3 .6E1"); + std::stringbuf isbuf_04(str_04); + std::istream is_04(&isbuf_04); + + double f; + is_04 >> f; + VERIFY( f == 3.0 ); + is_04 >> f; + VERIFY( f == 450.0 ); + is_04.ignore(); + is_04 >> f; + VERIFY( f == 0.005 ); + is_04 >> f; + VERIFY( f == 6 ); + VERIFY( is_03.rdstate() == std::ios_base::eofbit ); + + std::string str_05("0E20 5Ea E16"); + std::stringbuf isbuf_05(str_05); + std::istream is_05(&isbuf_05); + + is_05 >> f; + VERIFY( f == 0 ); + is_05 >> f; + VERIFY( f == 0 ); + VERIFY( is_05.rdstate() == std::ios_base::failbit ); + is_05.clear(); + is_05 >> c; + VERIFY( c == 'a' ); + is_05 >> f; + VERIFY( f == 0 ); + VERIFY( is_05.rdstate() == std::ios_base::failbit ); + is_05.clear(); + is_05.ignore(); + is_05 >> n; + VERIFY( n == 16 ); + +#ifdef DEBUG_ASSERT + assert(test); +#endif + + return test; +} + +int main() +{ + test10(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/11.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/11.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/11.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/11.cc 2003-01-05 13:41:05.543312523 -0500 @@ -0,0 +1,73 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +// In the presence of no fmtflags, the input operator should behave +// like strtol(x, y, 0) +// libstdc++/90 +bool test11() +{ + bool test = true; + const char* cstrlit = "0x2a"; + + // sanity check via 'C' library call + char* err; + long l = std::strtol(cstrlit, &err, 0); + + std::istringstream iss(cstrlit); + iss.setf(std::ios::fmtflags(0), std::ios::basefield); + int i; + iss >> i; + + VERIFY (!iss.fail()); + VERIFY (l == i); + + return test; +} + +int main() +{ + test11(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/12.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/12.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/12.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/12.cc 2003-01-05 13:52:16.113028576 -0500 @@ -0,0 +1,94 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +// XXX This test fails on sparc-solaris2 because of a bug in libc +// XXX sscanf for very long input. See: +// XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html +// { dg-do run { xfail sparc*-*-solaris2* } } + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +// libstdc++/3720 +// excess input should not cause a core dump +template +bool test12_aux(bool integer_type) +{ + bool test = true; + + int digits_overflow; + if (integer_type) + // This many digits will overflow integer types in base 10. + digits_overflow = std::numeric_limits::digits10 + 2; + else + // This might do it, unsure. + digits_overflow = std::numeric_limits::max_exponent10 + 1; + + std::string st; + std::string part = "1234567890123456789012345678901234567890"; + for (int i = 0; i < digits_overflow / part.size() + 1; ++i) + st += part; + std::stringbuf sb(st); + std::istream is(&sb); + T t; + is >> t; + VERIFY(is.fail()); + return test; +} + +bool test12() +{ + bool test = true; + VERIFY(test12_aux(true)); + VERIFY(test12_aux(true)); + VERIFY(test12_aux(true)); + VERIFY(test12_aux(false)); + VERIFY(test12_aux(false)); + VERIFY(test12_aux(false)); + return test; +} + +int main() +{ + test12(); + return 0; +} diff -rupN orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/13.cc egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/13.cc --- orig/egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/13.cc 1969-12-31 19:00:00.000000000 -0500 +++ egcc-CVS20030105/libstdc++-v3/testsuite/27_io/istream_extractor_arith/13.cc 2003-01-05 13:43:08.673574383 -0500 @@ -0,0 +1,88 @@ +// 1999-04-12 bkoz + +// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 27.6.1.2.2 arithmetic extractors + +#include // for printf +#include +#include +#include +#include +#include + +std::string str_01; +std::string str_02("true false 0 1 110001"); +std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); +std::string str_04("0123"); + +std::stringbuf isbuf_01(std::ios_base::in); +std::stringbuf isbuf_02(str_02, std::ios_base::in); +std::stringbuf isbuf_03(str_03, std::ios_base::in); +std::stringbuf isbuf_04(str_04, std::ios_base::in); + +std::istream is_01(NULL); +std::istream is_02(&isbuf_02); +std::istream is_03(&isbuf_03); +std::istream is_04(&isbuf_04); +std::stringstream ss_01(str_01); + +// libstdc++/3720 part two +void test13() +{ + using namespace std; + bool test = true; + const char* l1 = "12345678901234567890123456789012345678901234567890123456"; + const char* l2 = "1.2345678901234567890123456789012345678901234567890123456" + " " + "1246.9"; + + // 1 + // used to core. + double d; + istringstream iss1(l2); + iss1 >> d; + iss1 >> d; + VERIFY (d > 1246 && d < 1247); + + // 2 + // quick test for failbit on maximum length extraction. + int i; + int max_digits = numeric_limits::digits10 + 1; + string digits; + for (int j = 0; j < max_digits; ++j) + digits += '1'; + istringstream iss2(digits); + iss2 >> i; + VERIFY( !iss2.fail() ); + + digits += '1'; + i = 0; + iss2.str(digits); + iss2.clear(); + iss2 >> i; + VERIFY( i == 0 ); + VERIFY( iss2.fail() ); +} + +int main() +{ + test13(); + return 0; +} From gcc-patches-return-75074-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 05:04:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20899 invoked by alias); 6 Jan 2003 05:04:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20860 invoked from network); 6 Jan 2003 05:04:20 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 6 Jan 2003 05:04:20 -0000 Received: from roscoe.constant.com (tooth.toronto.redhat.com [172.16.14.29]) by touchme.toronto.redhat.com (Postfix) with SMTP id ED1E6800041; Mon, 6 Jan 2003 00:04:07 -0500 (EST) Date: Sun, 5 Jan 2003 23:01:33 -0600 From: Benjamin Kosnik To: "Kaveh R. Ghazi" Cc: phil@jaj.com, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, gdr@integrable-solutions.net, libstdc++@gcc.gnu.org Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures Message-Id: <20030105230133.2ca961f1.bkoz@redhat.com> In-Reply-To: <200301060408.XAA01032@caip.rutgers.edu> References: <200212261347.IAA14641@caip.rutgers.edu> <200212261708.MAA10791@caip.rutgers.edu> <20030104183632.51820821.bkoz@redhat.com> <200301050616.BAA28028@caip.rutgers.edu> <20030105054404.A24241@disaster.jaj.com> <200301060408.XAA01032@caip.rutgers.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sun, 5 Jan 2003 23:08:17 -0500 (EST) "Kaveh R. Ghazi" wrote: > >2003-01-05 Kaveh R. Ghazi > > * testsuite/lib/libstdc++-v3-dg.exp (libstdc++-v3-init, > libstdc++-v3-list-sourcefiles): Additionally handle files one > level deeper in glob patterns. > > * testsuite/27_io/istream_extractor_arith.cc: Delete, split... > * testsuite/27_io/istream_extractor_arith/01.cc, > testsuite/27_io/istream_extractor_arith/02.cc, > testsuite/27_io/istream_extractor_arith/03.cc, > testsuite/27_io/istream_extractor_arith/06.cc, > testsuite/27_io/istream_extractor_arith/07.cc, > testsuite/27_io/istream_extractor_arith/08.cc, > testsuite/27_io/istream_extractor_arith/09.cc, > testsuite/27_io/istream_extractor_arith/10.cc, > testsuite/27_io/istream_extractor_arith/11.cc, > testsuite/27_io/istream_extractor_arith/12.cc, > testsuite/27_io/istream_extractor_arith/13.cc: ... to new files. > * testsuite/27_io/istream_extractor_arith/12.cc: Add XFAIL for > sparc*-*-solaris2*. > This looks fine to me, thanks. From gcc-patches-return-75075-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 13:31:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14712 invoked by alias); 6 Jan 2003 13:31:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13909 invoked from network); 6 Jan 2003 13:30:30 -0000 Received: from unknown (HELO talisman.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 6 Jan 2003 13:30:30 -0000 Received: (from rsandifo@localhost) by talisman.cambridge.redhat.com (8.11.6/8.11.6) id h06DV6430844; Mon, 6 Jan 2003 13:31:06 GMT X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: gcc-patches@gcc.gnu.org Cc: echristo@redhat.com Subject: MIPS patch: fix EABI64 va_arg handling From: Richard Sandiford Date: 06 Jan 2003 13:31:05 +0000 Message-ID: Lines: 54 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes a va_arg() bug for -EB -mabi=eabi -mlong32. If an argument is passed by reference, we need to read its address from the least significant half of a 64-bit save slot. Tested on mips64vrel-elf. Fixes several test cases, such as va-arg-22.c. OK to install? Richard * config/mips/mips.c (mips_va_arg): In the EABI code, apply the big-endian correction to indirect arguments too. Index: config/mips/mips.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v retrieving revision 1.243 diff -c -d -p -F^[(a-zA-Z0-9_^#] -r1.243 mips.c *** config/mips/mips.c 20 Dec 2002 04:30:51 -0000 1.243 --- config/mips/mips.c 6 Jan 2003 13:19:09 -0000 *************** mips_va_arg (valist, type) *** 4989,5005 **** emit_queue(); emit_label (lab_over); } if (indirect) { addr_rtx = force_reg (Pmode, addr_rtx); r = gen_rtx_MEM (Pmode, addr_rtx); set_mem_alias_set (r, get_varargs_alias_set ()); emit_move_insn (addr_rtx, r); - } - else - { - if (BYTES_BIG_ENDIAN && rsize != size) - addr_rtx = plus_constant (addr_rtx, rsize - size); } return addr_rtx; } --- 4989,5002 ---- emit_queue(); emit_label (lab_over); } + if (BYTES_BIG_ENDIAN && rsize != size) + addr_rtx = plus_constant (addr_rtx, rsize - size); if (indirect) { addr_rtx = force_reg (Pmode, addr_rtx); r = gen_rtx_MEM (Pmode, addr_rtx); set_mem_alias_set (r, get_varargs_alias_set ()); emit_move_insn (addr_rtx, r); } return addr_rtx; } From gcc-patches-return-75076-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 13:37:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18460 invoked by alias); 6 Jan 2003 13:37:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18345 invoked from network); 6 Jan 2003 13:37:24 -0000 Received: from unknown (HELO talisman.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 6 Jan 2003 13:37:24 -0000 Received: (from rsandifo@localhost) by talisman.cambridge.redhat.com (8.11.6/8.11.6) id h06Dc1L31043; Mon, 6 Jan 2003 13:38:01 GMT X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: gcc-patches@gcc.gnu.org Cc: echristo@redhat.com Subject: [applied] Patch to mips.md leadi pattern From: Richard Sandiford Date: 06 Jan 2003 13:38:01 +0000 Message-ID: Lines: 26 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm sure this patch has been posted & approved before now, but I think it qualifies as obvious anyway. Tested on mips64vrel-elf, fixes execute/930529-1.c for EABI64. Applied to trunk. Richard * config/mips/mips.md (leadi): Use dla rather than la. Index: config/mips/mips.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v retrieving revision 1.159 diff -u -d -p -F^[(a-zA-Z0-9_^#] -r1.159 mips.md --- config/mips/mips.md 5 Jan 2003 12:02:22 -0000 1.159 +++ config/mips/mips.md 6 Jan 2003 13:31:29 -0000 @@ -11202,7 +11202,7 @@ (define_insn "leadi" [(set (match_operand:DI 0 "register_operand" "=d") (match_operand:DI 1 "address_operand" "p"))] "Pmode == DImode" - "la %0,%a1" + "dla %0,%a1" [(set_attr "type" "arith") (set_attr "mode" "DI") (set_attr "length" "40")]) From gcc-patches-return-75077-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 14:17:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17234 invoked by alias); 6 Jan 2003 14:17:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16993 invoked from network); 6 Jan 2003 14:17:03 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 6 Jan 2003 14:17:03 -0000 Received: from localhost (IDENT:CejhuHeqVurocGAxyjFqMWeeP6PdHK0i@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h06EGjlU013785 for ; Mon, 6 Jan 2003 09:16:45 -0500 Date: Mon, 06 Jan 2003 09:16:42 -0500 (EST) Message-Id: <20030106.091642.59650096.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.md: Add a new pattern. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to add a new pattern. The new pattern optimizes unsigned short A; ((unsigned long) A) << 15; into (A << 16) >> 1 This occurs in newlib. Tested on h8300 port. Committed. Kazu Hirata 2003-01-06 Kazu Hirata * config/h8300/h8300.md (*twoshifts_l16_r1): New. Index: h8300.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.md,v retrieving revision 1.145 diff -u -r1.145 h8300.md --- h8300.md 5 Jan 2003 23:04:48 -0000 1.145 +++ h8300.md 6 Jan 2003 14:00:33 -0000 @@ -2576,6 +2576,28 @@ (clobber (scratch:QI))])] "") +;; and:SI + +;; ((SImode) HImode) << 15 + +(define_insn_and_split "*twoshifts_l16_r1" + [(set (match_operand:SI 0 "register_operand" "=r") + (and:SI (ashift:SI (match_operand:SI 1 "register_operand" "0") + (const_int 15)) + (const_int 2147450880)))] + "(TARGET_H8300H || TARGET_H8300S)" + "#" + "&& reload_completed" + [(parallel [(set (match_dup 0) + (ashift:SI (match_dup 0) + (const_int 16))) + (clobber (scratch:QI))]) + (parallel [(set (match_dup 0) + (lshiftrt:SI (match_dup 0) + (const_int 1))) + (clobber (scratch:QI))])] + "") + ;; plus:SI (define_insn "*addsi3_lshiftrt_16_zexthi" From gcc-patches-return-75078-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 15:01:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9579 invoked by alias); 6 Jan 2003 15:01:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9495 invoked from network); 6 Jan 2003 15:01:04 -0000 Received: from unknown (HELO garibaldi.home) (62.30.75.143) by 209.249.29.67 with SMTP; 6 Jan 2003 15:01:04 -0000 Received: from codesourcery.com (localhost.localdomain [127.0.0.1]) by garibaldi.home (8.12.5/8.12.5) with ESMTP id h06F0i1p000626; Mon, 6 Jan 2003 15:00:45 GMT Message-ID: <3E199A1C.6010108@codesourcery.com> Date: Mon, 06 Jan 2003 15:00:44 +0000 From: Nathan Sidwell User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20021003 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Mark Mitchell CC: gcc-patches@gcc.gnu.org Subject: [C++ PATCH]: Fix 9109 Content-Type: multipart/mixed; boundary="------------000404090406080900070805" This is a multi-part message in MIME format. --------------000404090406080900070805 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Mark, this fixes bug 9109 that I stumbled over. If 'int (T)' is parseable as both a declaration 'T of type int' or an abstract declaration 'function returning int taking parameter T' (T being a template type parm), we must prefer the abstract declarator. It also fixes void (foo) (int i = 0); which I believe is well formed. Rather than have to call cp_parser_declarator twice, once for each kind of declaration, I made its abstract_p argument tri-valued. built and tested on i686-pc-linux-gnu, ok? nathan -- Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC The voices in my head said this was stupid too nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org --------------000404090406080900070805 Content-Type: text/plain; name="9109-3.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="9109-3.patch" 2003-01-06 Nathan Sidwell PR c++/9109 * parser.c (cp_parser_declarator_kind): New enum. (cp_parser_declarator): Adjust. (cp_parser_direct_declarator): Adjust. Allow for either named or abstract declarator. Prefer abstract, if possible. Allow parenthesized function name. (cp_parser_condition): Adjust cp_parser_declarator call. (cp_parser_explicit_instantiation): Likewise. (cp_parser_init_declarator): Likewise. (cp_parser_type_id): Likewise. (cp_parser_function_definition): Likewise. (cp_parser_member_declaration): Likewise. (cp_parser_parameter_declaration): Use cp_parser_declarator to do the tentative parsing. (cp_parser_exception_declaration): Likewise. Index: cp/parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.19 diff -c -3 -p -r1.19 parser.c *** cp/parser.c 6 Jan 2003 02:40:30 -0000 1.19 --- cp/parser.c 6 Jan 2003 12:53:48 -0000 *************** typedef enum cp_parser_id_kind *** 1124,1129 **** --- 1124,1141 ---- CP_PARSER_ID_KIND_QUALIFIED } cp_parser_id_kind; + /* The different kinds of declarators we want to parse. */ + + typedef enum cp_parser_declarator_kind + { + /* We want an abstract declartor. */ + CP_PARSER_DECLARATOR_ABSTRACT, + /* We want a named declarator. */ + CP_PARSER_DECLARATOR_NAMED, + /* We don't mind. */ + CP_PARSER_DECLARATOR_EITHER + } cp_parser_declarator_kind; + /* A mapping from a token type to a corresponding tree node type. */ typedef struct cp_parser_token_tree_map_node *************** static void cp_parser_linkage_specificat *** 1540,1548 **** static tree cp_parser_init_declarator PARAMS ((cp_parser *, tree, tree, tree, bool, bool, bool *)); static tree cp_parser_declarator ! PARAMS ((cp_parser *, bool, bool *)); static tree cp_parser_direct_declarator ! PARAMS ((cp_parser *, bool, bool *)); static enum tree_code cp_parser_ptr_operator PARAMS ((cp_parser *, tree *, tree *)); static tree cp_parser_cv_qualifier_seq_opt --- 1552,1560 ---- static tree cp_parser_init_declarator PARAMS ((cp_parser *, tree, tree, tree, bool, bool, bool *)); static tree cp_parser_declarator ! PARAMS ((cp_parser *, cp_parser_declarator_kind, bool *)); static tree cp_parser_direct_declarator ! PARAMS ((cp_parser *, cp_parser_declarator_kind, bool *)); static enum tree_code cp_parser_ptr_operator PARAMS ((cp_parser *, tree *, tree *)); static tree cp_parser_cv_qualifier_seq_opt *************** cp_parser_condition (parser) *** 6123,6130 **** tree initializer = NULL_TREE; /* Parse the declarator. */ ! declarator = cp_parser_declarator (parser, ! /*abstract_p=*/false, /*ctor_dtor_or_conv_p=*/NULL); /* Parse the attributes. */ attributes = cp_parser_attributes_opt (parser); --- 6135,6141 ---- tree initializer = NULL_TREE; /* Parse the declarator. */ ! declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, /*ctor_dtor_or_conv_p=*/NULL); /* Parse the attributes. */ attributes = cp_parser_attributes_opt (parser); *************** cp_parser_explicit_instantiation (parser *** 8506,8513 **** /* Parse the declarator. */ declarator ! = cp_parser_declarator (parser, ! /*abstract_p=*/false, /*ctor_dtor_or_conv_p=*/NULL); decl = grokdeclarator (declarator, decl_specifiers, NORMAL, 0, NULL); --- 8517,8523 ---- /* Parse the declarator. */ declarator ! = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, /*ctor_dtor_or_conv_p=*/NULL); decl = grokdeclarator (declarator, decl_specifiers, NORMAL, 0, NULL); *************** cp_parser_init_declarator (parser, *** 9720,9727 **** cp_parser_start_deferring_access_checks (parser); /* Parse the declarator. */ declarator ! = cp_parser_declarator (parser, ! /*abstract_p=*/false, &ctor_dtor_or_conv_p); /* Gather up the deferred checks. */ declarator_access_checks --- 9730,9736 ---- cp_parser_start_deferring_access_checks (parser); /* Parse the declarator. */ declarator ! = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, &ctor_dtor_or_conv_p); /* Gather up the deferred checks. */ declarator_access_checks *************** cp_parser_init_declarator (parser, *** 10020,10028 **** expression, not a declaration.) */ static tree ! cp_parser_declarator (parser, abstract_p, ctor_dtor_or_conv_p) cp_parser *parser; ! bool abstract_p; bool *ctor_dtor_or_conv_p; { cp_token *token; --- 10029,10037 ---- expression, not a declaration.) */ static tree ! cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p) cp_parser *parser; ! cp_parser_declarator_kind dcl_kind; bool *ctor_dtor_or_conv_p; { cp_token *token; *************** cp_parser_declarator (parser, abstract_p *** 10054,10069 **** { /* The dependent declarator is optional if we are parsing an abstract-declarator. */ ! if (abstract_p) cp_parser_parse_tentatively (parser); /* Parse the dependent declarator. */ ! declarator = cp_parser_declarator (parser, abstract_p, /*ctor_dtor_or_conv_p=*/NULL); /* If we are parsing an abstract-declarator, we must handle the case where the dependent declarator is absent. */ ! if (abstract_p && !cp_parser_parse_definitely (parser)) declarator = NULL_TREE; /* Build the representation of the ptr-operator. */ --- 10063,10079 ---- { /* The dependent declarator is optional if we are parsing an abstract-declarator. */ ! if (dcl_kind != CP_PARSER_DECLARATOR_NAMED) cp_parser_parse_tentatively (parser); /* Parse the dependent declarator. */ ! declarator = cp_parser_declarator (parser, dcl_kind, /*ctor_dtor_or_conv_p=*/NULL); /* If we are parsing an abstract-declarator, we must handle the case where the dependent declarator is absent. */ ! if (dcl_kind != CP_PARSER_DECLARATOR_NAMED ! && !cp_parser_parse_definitely (parser)) declarator = NULL_TREE; /* Build the representation of the ptr-operator. */ *************** cp_parser_declarator (parser, abstract_p *** 10080,10086 **** /* Everything else is a direct-declarator. */ else declarator = cp_parser_direct_declarator (parser, ! abstract_p, ctor_dtor_or_conv_p); if (attributes && declarator != error_mark_node) --- 10090,10096 ---- /* Everything else is a direct-declarator. */ else declarator = cp_parser_direct_declarator (parser, ! dcl_kind, ctor_dtor_or_conv_p); if (attributes && declarator != error_mark_node) *************** cp_parser_declarator (parser, abstract_p *** 10107,10115 **** direct-abstract-declarator [opt] [ constant-expression [opt] ] ( abstract-declarator ) ! Returns a representation of the declarator. ABSTRACT_P is TRUE if ! we are parsing a direct-abstract-declarator; FALSE if we are ! parsing a direct-declarator. CTOR_DTOR_OR_CONV_P is as for cp_parser_declarator. For the declarator-id production, the representation is as for an --- 10117,10129 ---- direct-abstract-declarator [opt] [ constant-expression [opt] ] ( abstract-declarator ) ! Returns a representation of the declarator. DCL_KIND is ! CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a ! direct-abstract-declarator. It is CP_PARSER_DECLARATOR_NAMED, if ! we are parsing a direct-declarator. It is ! CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case ! of ambiguity we prefer an abstract declarator, as per ! [dcl.ambig.res]. CTOR_DTOR_OR_CONV_P is as for cp_parser_declarator. For the declarator-id production, the representation is as for an *************** cp_parser_declarator (parser, abstract_p *** 10122,10285 **** indicating the size of the array is the second operand. */ static tree ! cp_parser_direct_declarator (parser, abstract_p, ctor_dtor_or_conv_p) cp_parser *parser; ! bool abstract_p; bool *ctor_dtor_or_conv_p; { cp_token *token; ! tree declarator; tree scope = NULL_TREE; bool saved_default_arg_ok_p = parser->default_arg_ok_p; bool saved_in_declarator_p = parser->in_declarator_p; ! ! /* Peek at the next token. */ ! token = cp_lexer_peek_token (parser->lexer); ! /* Find the initial direct-declarator. It might be a parenthesized ! declarator. */ ! if (token->type == CPP_OPEN_PAREN) ! { ! bool error_p; ! ! /* For an abstract declarator we do not know whether we are ! looking at the beginning of a parameter-declaration-clause, ! or at a parenthesized abstract declarator. For example, if ! we see `(int)', we are looking at a ! parameter-declaration-clause, and the ! direct-abstract-declarator has been omitted. If, on the ! other hand we are looking at `((*))' then we are looking at a ! parenthesized abstract-declarator. There is no easy way to ! tell which situation we are in. */ ! if (abstract_p) ! cp_parser_parse_tentatively (parser); ! ! /* Consume the `('. */ ! cp_lexer_consume_token (parser->lexer); ! /* Parse the nested declarator. */ ! declarator ! = cp_parser_declarator (parser, abstract_p, ctor_dtor_or_conv_p); ! /* Expect a `)'. */ ! error_p = !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); ! ! /* If parsing a parenthesized abstract declarator didn't work, ! try a parameter-declaration-clause. */ ! if (abstract_p && !cp_parser_parse_definitely (parser)) ! declarator = NULL_TREE; ! /* If we were not parsing an abstract declarator, but failed to ! find a satisfactory nested declarator, then an error has ! occurred. */ ! else if (!abstract_p ! && (declarator == error_mark_node || error_p)) ! return error_mark_node; ! /* Default args cannot appear in an abstract decl. */ ! parser->default_arg_ok_p = false; ! } ! /* Otherwise, for a non-abstract declarator, there should be a ! declarator-id. */ ! else if (!abstract_p) { ! declarator = cp_parser_declarator_id (parser); ! ! if (TREE_CODE (declarator) == SCOPE_REF) { ! scope = TREE_OPERAND (declarator, 0); ! ! /* In the declaration of a member of a template class ! outside of the class itself, the SCOPE will sometimes be ! a TYPENAME_TYPE. For example, given: ! template ! int S::R::i = 3; ! the SCOPE will be a TYPENAME_TYPE for `S::R'. In this ! context, we must resolve S::R to an ordinary type, ! rather than a typename type. ! ! The reason we normally avoid resolving TYPENAME_TYPEs is ! that a specialization of `S' might render `S::R' not a ! type. However, if `S' is specialized, then this `i' will ! not be used, so there is no harm in resolving the types ! here. */ ! if (TREE_CODE (scope) == TYPENAME_TYPE) ! { ! /* Resolve the TYPENAME_TYPE. */ ! scope = cp_parser_resolve_typename_type (parser, scope); ! /* If that failed, the declarator is invalid. */ ! if (scope == error_mark_node) ! return error_mark_node; ! /* Build a new DECLARATOR. */ ! declarator = build_nt (SCOPE_REF, ! scope, ! TREE_OPERAND (declarator, 1)); ! } ! } ! else if (TREE_CODE (declarator) != IDENTIFIER_NODE) ! /* Default args can only appear for a function decl. */ ! parser->default_arg_ok_p = false; ! ! /* Check to see whether the declarator-id names a constructor, ! destructor, or conversion. */ ! if (ctor_dtor_or_conv_p ! && ((TREE_CODE (declarator) == SCOPE_REF ! && CLASS_TYPE_P (TREE_OPERAND (declarator, 0))) ! || (TREE_CODE (declarator) != SCOPE_REF ! && at_class_scope_p ()))) ! { ! tree unqualified_name; ! tree class_type; ! /* Get the unqualified part of the name. */ ! if (TREE_CODE (declarator) == SCOPE_REF) ! { ! class_type = TREE_OPERAND (declarator, 0); ! unqualified_name = TREE_OPERAND (declarator, 1); ! } ! else { ! class_type = current_class_type; ! unqualified_name = declarator; ! } ! /* See if it names ctor, dtor or conv. */ ! if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR ! || IDENTIFIER_TYPENAME_P (unqualified_name) ! || constructor_name_p (unqualified_name, class_type)) { - *ctor_dtor_or_conv_p = true; - /* We would have cleared the default arg flag above, but - they are ok. */ parser->default_arg_ok_p = saved_default_arg_ok_p; } } ! } ! /* But for an abstract declarator, the initial direct-declarator can ! be omitted. */ ! else ! { ! declarator = NULL_TREE; ! parser->default_arg_ok_p = false; ! } ! ! scope = get_scope_of_declarator (declarator); ! if (scope) ! /* Any names that appear after the declarator-id for a member ! are looked up in the containing scope. */ ! push_scope (scope); ! else ! scope = NULL_TREE; ! parser->in_declarator_p = true; ! ! /* Now, parse function-declarators and array-declarators until there ! are no more. */ ! while (true) ! { ! /* Peek at the next token. */ ! token = cp_lexer_peek_token (parser->lexer); ! /* If it's a `[', we're looking at an array-declarator. */ ! if (token->type == CPP_OPEN_SQUARE) { tree bounds; /* Consume the `['. */ cp_lexer_consume_token (parser->lexer); /* Peek at the next token. */ --- 10136,10282 ---- indicating the size of the array is the second operand. */ static tree ! cp_parser_direct_declarator (parser, dcl_kind, ctor_dtor_or_conv_p) cp_parser *parser; ! cp_parser_declarator_kind dcl_kind; bool *ctor_dtor_or_conv_p; { cp_token *token; ! tree declarator = NULL_TREE; tree scope = NULL_TREE; bool saved_default_arg_ok_p = parser->default_arg_ok_p; bool saved_in_declarator_p = parser->in_declarator_p; ! bool first = true; ! ! while (true) { ! /* Peek at the next token. */ ! token = cp_lexer_peek_token (parser->lexer); ! if (token->type == CPP_OPEN_PAREN) { ! /* This is either a parameter-declaration-clause, or a ! parenthesized declarator. When we know we are parsing a ! named declaratory, it must be a paranthesized declarator ! if FIRST is true. For instance, `(int)' is a ! parameter-declaration-clause, with an omitted ! direct-abstract-declarator. But `((*))', is a ! parenthesized abstract declarator. Finally, when T is a ! template parameter `(T)' is a ! paremeter-declaration-clause, and not a parenthesized ! named declarator. ! We first try and parse a parameter-declaration-clause, ! and then try a nested declarator (if FIRST is true). ! It is not an error for it not to be a ! parameter-declaration-clause, even when FIRST is ! false. Consider, ! int i (int); ! int i (3); ! ! The first is the declaration of a function while the ! second is a the definition of a variable, including its ! initializer. ! ! Having seen only the parenthesis, we cannot know which of ! these two alternatives should be selected. Even more ! complex are examples like: ! ! int i (int (a)); ! int i (int (3)); ! ! The former is a function-declaration; the latter is a ! variable initialization. ! ! Thus again, we try a parameter-declation-clause, and if ! that fails, we back out and return. */ ! ! if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED) { ! tree params; ! ! cp_parser_parse_tentatively (parser); ! /* Consume the `('. */ ! cp_lexer_consume_token (parser->lexer); ! if (first) ! { ! /* If this is going to be an abstract declarator, we're ! in a declarator and we can't have default args. */ ! parser->default_arg_ok_p = false; ! parser->in_declarator_p = true; ! } ! ! /* Parse the parameter-declaration-clause. */ ! params = cp_parser_parameter_declaration_clause (parser); ! ! /* If all went well, parse the cv-qualifier-seq and the ! exception-specfication. */ ! if (cp_parser_parse_definitely (parser)) ! { ! tree cv_qualifiers; ! tree exception_specification; ! ! first = false; ! /* Consume the `)'. */ ! cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); ! ! /* Parse the cv-qualifier-seq. */ ! cv_qualifiers = cp_parser_cv_qualifier_seq_opt (parser); ! /* And the exception-specification. */ ! exception_specification ! = cp_parser_exception_specification_opt (parser); ! ! /* Create the function-declarator. */ ! declarator = make_call_declarator (declarator, ! params, ! cv_qualifiers, ! exception_specification); ! /* Any subsequent parameter lists are to do with ! return type, so are not those of the declared ! function. */ ! parser->default_arg_ok_p = false; ! ! /* Repeat the main loop. */ ! continue; ! } ! } ! ! /* If this is the first, we can try a parenthesized ! declarator. */ ! if (first) { parser->default_arg_ok_p = saved_default_arg_ok_p; + parser->in_declarator_p = saved_in_declarator_p; + + /* Consume the `('. */ + cp_lexer_consume_token (parser->lexer); + /* Parse the nested declarator. */ + declarator + = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p); + first = false; + /* Expect a `)'. */ + if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) + declarator = error_mark_node; + if (declarator == error_mark_node) + break; + + goto handle_declarator; } + /* Otherwise, we must be done. */ + else + break; } ! else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED) ! && token->type == CPP_OPEN_SQUARE) { + /* Parse an array-declarator. */ tree bounds; + first = false; + parser->default_arg_ok_p = false; + parser->in_declarator_p = true; /* Consume the `['. */ cp_lexer_consume_token (parser->lexer); /* Peek at the next token. */ *************** cp_parser_direct_declarator (parser, abs *** 10291,10368 **** else bounds = NULL_TREE; /* Look for the closing `]'. */ ! cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); declarator = build_nt (ARRAY_REF, declarator, bounds); } ! /* If it's a `(', we're looking at a function-declarator. */ ! else if (token->type == CPP_OPEN_PAREN) { ! /* A function-declarator. Or maybe not. Consider, for ! example: ! ! int i (int); ! int i (3); ! ! The first is the declaration of a function while the ! second is a the definition of a variable, including its ! initializer. ! ! Having seen only the parenthesis, we cannot know which of ! these two alternatives should be selected. Even more ! complex are examples like: ! ! int i (int (a)); ! int i (int (3)); ! ! The former is a function-declaration; the latter is a ! variable initialization. ! ! First, we attempt to parse a parameter-declaration ! clause. If this works, then we continue; otherwise, we ! replace the tokens consumed in the process and continue. */ ! tree params; ! ! /* We are now parsing tentatively. */ ! cp_parser_parse_tentatively (parser); ! /* Consume the `('. */ ! cp_lexer_consume_token (parser->lexer); ! /* Parse the parameter-declaration-clause. */ ! params = cp_parser_parameter_declaration_clause (parser); ! /* If all went well, parse the cv-qualifier-seq and the ! exception-specification. */ ! if (cp_parser_parse_definitely (parser)) { ! tree cv_qualifiers; ! tree exception_specification; ! /* Consume the `)'. */ ! cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); ! /* Parse the cv-qualifier-seq. */ ! cv_qualifiers = cp_parser_cv_qualifier_seq_opt (parser); ! /* And the exception-specification. */ ! exception_specification ! = cp_parser_exception_specification_opt (parser); ! ! /* Create the function-declarator. */ ! declarator = make_call_declarator (declarator, ! params, ! cv_qualifiers, ! exception_specification); } ! /* Otherwise, we must be done with the declarator. */ else ! break; } ! /* Otherwise, we're done with the declarator. */ else break; - /* Any subsequent parameter lists are to do with return type, so - are not those of the declared function. */ - parser->default_arg_ok_p = false; } /* For an abstract declarator, we might wind up with nothing at this --- 10288,10399 ---- else bounds = NULL_TREE; /* Look for the closing `]'. */ ! if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'")) ! { ! declarator = error_mark_node; ! break; ! } declarator = build_nt (ARRAY_REF, declarator, bounds); } ! else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT) { ! /* Parse a declarator_id */ ! if (dcl_kind == CP_PARSER_DECLARATOR_EITHER) ! cp_parser_parse_tentatively (parser); ! declarator = cp_parser_declarator_id (parser); ! if (dcl_kind == CP_PARSER_DECLARATOR_EITHER ! && !cp_parser_parse_definitely (parser)) ! declarator = error_mark_node; ! if (declarator == error_mark_node) ! break; ! if (TREE_CODE (declarator) == SCOPE_REF) ! { ! tree scope = TREE_OPERAND (declarator, 0); ! /* In the declaration of a member of a template class ! outside of the class itself, the SCOPE will sometimes ! be a TYPENAME_TYPE. For example, given: ! ! template ! int S::R::i = 3; ! ! the SCOPE will be a TYPENAME_TYPE for `S::R'. In ! this context, we must resolve S::R to an ordinary ! type, rather than a typename type. ! ! The reason we normally avoid resolving TYPENAME_TYPEs ! is that a specialization of `S' might render ! `S::R' not a type. However, if `S' is ! specialized, then this `i' will not be used, so there ! is no harm in resolving the types here. */ ! if (TREE_CODE (scope) == TYPENAME_TYPE) ! { ! /* Resolve the TYPENAME_TYPE. */ ! scope = cp_parser_resolve_typename_type (parser, scope); ! /* If that failed, the declarator is invalid. */ ! if (scope == error_mark_node) ! return error_mark_node; ! /* Build a new DECLARATOR. */ ! declarator = build_nt (SCOPE_REF, ! scope, ! TREE_OPERAND (declarator, 1)); ! } ! } ! ! /* Check to see whether the declarator-id names a constructor, ! destructor, or conversion. */ ! if (declarator && ctor_dtor_or_conv_p ! && ((TREE_CODE (declarator) == SCOPE_REF ! && CLASS_TYPE_P (TREE_OPERAND (declarator, 0))) ! || (TREE_CODE (declarator) != SCOPE_REF ! && at_class_scope_p ()))) { ! tree unqualified_name; ! tree class_type; ! /* Get the unqualified part of the name. */ ! if (TREE_CODE (declarator) == SCOPE_REF) ! { ! class_type = TREE_OPERAND (declarator, 0); ! unqualified_name = TREE_OPERAND (declarator, 1); ! } ! else ! { ! class_type = current_class_type; ! unqualified_name = declarator; ! } ! /* See if it names ctor, dtor or conv. */ ! if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR ! || IDENTIFIER_TYPENAME_P (unqualified_name) ! || constructor_name_p (unqualified_name, class_type)) ! *ctor_dtor_or_conv_p = true; } ! ! handle_declarator:; ! scope = get_scope_of_declarator (declarator); ! if (scope) ! /* Any names that appear after the declarator-id for a member ! are looked up in the containing scope. */ ! push_scope (scope); ! parser->in_declarator_p = true; ! if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p) ! || (declarator ! && (TREE_CODE (declarator) == SCOPE_REF ! || TREE_CODE (declarator) == IDENTIFIER_NODE))) ! /* Default args are only allowed on function ! declarations. */ ! parser->default_arg_ok_p = saved_default_arg_ok_p; else ! parser->default_arg_ok_p = false; ! ! first = false; } ! /* We're done. */ else break; } /* For an abstract declarator, we might wind up with nothing at this *************** cp_parser_type_id (parser) *** 10610,10616 **** cp_parser_parse_tentatively (parser); /* Look for the declarator. */ abstract_declarator ! = cp_parser_declarator (parser, /*abstract_p=*/true, NULL); /* Check to see if there really was a declarator. */ if (!cp_parser_parse_definitely (parser)) abstract_declarator = NULL_TREE; --- 10641,10647 ---- cp_parser_parse_tentatively (parser); /* Look for the declarator. */ abstract_declarator ! = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL); /* Check to see if there really was a declarator. */ if (!cp_parser_parse_definitely (parser)) abstract_declarator = NULL_TREE; *************** cp_parser_parameter_declaration (cp_pars *** 10911,10933 **** bool saved_default_arg_ok_p = parser->default_arg_ok_p; parser->default_arg_ok_p = false; - /* We don't know whether the declarator will be abstract or - not. So, first we try an ordinary declarator. */ - cp_parser_parse_tentatively (parser); declarator = cp_parser_declarator (parser, ! /*abstract_p=*/false, /*ctor_dtor_or_conv_p=*/NULL); - /* If that didn't work, look for an abstract declarator. */ - if (!cp_parser_parse_definitely (parser)) - declarator = cp_parser_declarator (parser, - /*abstract_p=*/true, - /*ctor_dtor_or_conv_p=*/NULL); parser->default_arg_ok_p = saved_default_arg_ok_p; /* After the declarator, allow more attributes. */ attributes = chainon (attributes, cp_parser_attributes_opt (parser)); } ! /* The restriction on definining new types applies only to the type of the parameter, not to the default argument. */ parser->type_definition_forbidden_message = saved_message; --- 10942,10956 ---- bool saved_default_arg_ok_p = parser->default_arg_ok_p; parser->default_arg_ok_p = false; declarator = cp_parser_declarator (parser, ! CP_PARSER_DECLARATOR_EITHER, /*ctor_dtor_or_conv_p=*/NULL); parser->default_arg_ok_p = saved_default_arg_ok_p; /* After the declarator, allow more attributes. */ attributes = chainon (attributes, cp_parser_attributes_opt (parser)); } ! /* The restriction on defining new types applies only to the type of the parameter, not to the default argument. */ parser->type_definition_forbidden_message = saved_message; *************** cp_parser_function_definition (parser, f *** 11140,11147 **** *friend_p = cp_parser_friend_p (decl_specifiers); /* Parse the declarator. */ ! declarator = cp_parser_declarator (parser, ! /*abstract_p=*/false, /*ctor_dtor_or_conv_p=*/NULL); /* Gather up any access checks that occurred. */ --- 11163,11169 ---- *friend_p = cp_parser_friend_p (decl_specifiers); /* Parse the declarator. */ ! declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, /*ctor_dtor_or_conv_p=*/NULL); /* Gather up any access checks that occurred. */ *************** cp_parser_member_declaration (parser) *** 12314,12321 **** /* Parse the declarator. */ declarator ! = cp_parser_declarator (parser, ! /*abstract_p=*/false, &ctor_dtor_or_conv_p); /* If something went wrong parsing the declarator, make sure --- 12336,12342 ---- /* Parse the declarator. */ declarator ! = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, &ctor_dtor_or_conv_p); /* If something went wrong parsing the declarator, make sure *************** cp_parser_exception_declaration (parser) *** 12955,12974 **** if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) declarator = NULL_TREE; else ! { ! /* Otherwise, we can't be sure whether we are looking at a ! direct, or an abstract, declarator. */ ! cp_parser_parse_tentatively (parser); ! /* Try an ordinary declarator. */ ! declarator = cp_parser_declarator (parser, ! /*abstract_p=*/false, ! /*ctor_dtor_or_conv_p=*/NULL); ! /* If that didn't work, try an abstract declarator. */ ! if (!cp_parser_parse_definitely (parser)) ! declarator = cp_parser_declarator (parser, ! /*abstract_p=*/true, ! /*ctor_dtor_or_conv_p=*/NULL); ! } /* Restore the saved message. */ parser->type_definition_forbidden_message = saved_message; --- 12976,12983 ---- if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) declarator = NULL_TREE; else ! declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER, ! /*ctor_dtor_or_conv_p=*/NULL); /* Restore the saved message. */ parser->type_definition_forbidden_message = saved_message; --------------000404090406080900070805 Content-Type: text/plain; name="9109.C" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="9109.C" // { dg-do compile } // Copyright (C) 2003 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 4 Jan 2003 // PR 9109. Ambiguity. [dcl.ambig.res]/7 template void Foo (int (T)) { try {} catch (int (T)) {} } --------------000404090406080900070805 Content-Type: text/plain; name="9109-2.C" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="9109-2.C" // { dg-do compile } // Copyright (C) 2003 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 4 Jan 2003 // We erroneously prohibited default args on parenthesized function // declarations. void (foo)(int i = 0); --------------000404090406080900070805-- From gcc-patches-return-75079-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 15:55:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32043 invoked by alias); 6 Jan 2003 15:55:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32033 invoked from network); 6 Jan 2003 15:55:09 -0000 Received: from unknown (HELO smtp1.cp.tin.it) (212.216.176.221) by 209.249.29.67 with SMTP; 6 Jan 2003 15:55:09 -0000 Received: from unitus.it (80.181.224.148) by smtp1.cp.tin.it (6.5.029) id 3DEDBCA000ACD51D for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 16:54:56 +0100 Message-ID: <3E19A73A.5000905@unitus.it> Date: Mon, 06 Jan 2003 16:56:42 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: libstdc++/9151 Content-Type: multipart/mixed; boundary="------------060201040306090006010508" This is a multi-part message in MIME format. --------------060201040306090006010508 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, tested x86-linux, approved by Benjamin, committed. Paolo. //////////// --------------060201040306090006010508 Content-Type: text/plain; name="CL_9151" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="CL_9151" 2003-01-06 Paolo Carlini PR libstdc++/9151 * include/bits/locale_facets.cc (num_put::_M_convert_float): Limit __prec to digits10 + 2, not digits10 + 1, taking into account the possibility of %{g,G} conversion specifiers inside _S_format_float. * testsuite/27_io/ostream_inserter_arith.cc (test06): Add. --------------060201040306090006010508 Content-Type: text/plain; name="patch_9151" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch_9151" diff -urN libstdc++-v3-orig/include/bits/locale_facets.tcc libstdc++-v3/include/bits/locale_facets.tcc --- libstdc++-v3-orig/include/bits/locale_facets.tcc 2002-12-16 19:22:58.000000000 +0100 +++ libstdc++-v3/include/bits/locale_facets.tcc 2003-01-06 16:08:50.000000000 +0100 @@ -622,9 +622,14 @@ _M_convert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, _ValueT __v) const { - // Note: digits10 is rounded down. We need to add 1 to ensure + // Note: digits10 is rounded down: we need to add 1 to ensure // we get the full available precision. - const int __max_digits = numeric_limits<_ValueT>::digits10 + 1; + // Then, in general, one more 1 needs to be added since, when the + // %{g,G} conversion specifiers are chosen inside _S_format_float, the + // precision field is "the maximum number of significant digits", *not* + // the "number of digits to appear after the decimal point", as happens + // for %{e,E,f,F} (C99, 7.19.6.1,4). + const int __max_digits = numeric_limits<_ValueT>::digits10 + 2; streamsize __prec = __io.precision(); if (__prec > static_cast(__max_digits)) diff -urN libstdc++-v3-orig/testsuite/27_io/ostream_inserter_arith.cc libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc --- libstdc++-v3-orig/testsuite/27_io/ostream_inserter_arith.cc 2002-03-09 03:01:34.000000000 +0100 +++ libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc 2003-01-06 15:38:01.000000000 +0100 @@ -368,7 +368,26 @@ istringstream istr (sval); double d; istr >> d; - VERIFY (abs(pi-d)/pi < DBL_EPSILON); + VERIFY( abs(pi-d)/pi < DBL_EPSILON ); + return 0; +} + + +// libstdc++/9151 +int +test06() +{ + int prec = numeric_limits::digits10 + 2; + double oval = numeric_limits::min(); + + stringstream ostr; + ostr.precision(prec); + ostr << oval; + string sval = ostr.str(); + istringstream istr (sval); + double ival; + istr >> ival; + VERIFY( abs(oval-ival)/oval < DBL_EPSILON ); return 0; } @@ -380,6 +399,7 @@ test03(); test04(); test05(); + test06(); #ifdef TEST_NUMPUT_VERBOSE cout << "Test passed!" << endl; #endif --------------060201040306090006010508-- From gcc-patches-return-75080-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 16:13:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6384 invoked by alias); 6 Jan 2003 16:13:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5993 invoked from network); 6 Jan 2003 16:11:54 -0000 Received: from unknown (HELO mail.cs.tu-berlin.de) (130.149.17.13) by 209.249.29.67 with SMTP; 6 Jan 2003 16:11:54 -0000 Received: from bolero.cs.tu-berlin.de (daemon@bolero.cs.tu-berlin.de [130.149.19.1]) by mail.cs.tu-berlin.de (8.9.3/8.9.3) with ESMTP id QAA15583; Mon, 6 Jan 2003 16:45:18 +0100 (MET) Received: (from doko@localhost) by bolero.cs.tu-berlin.de (8.11.6+Sun/8.9.3) id h06FjDa24910; Mon, 6 Jan 2003 16:45:13 +0100 (MET) From: Matthias Klose MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15897.42121.555652.643301@gargle.gargle.HOWL> Date: Mon, 6 Jan 2003 16:45:13 +0100 To: Eric Christopher Cc: gcc-patches@gcc.gnu.org Subject: Re: [3.3 branch] Ada bootstrap failure on mipsel-linux In-Reply-To: <1041622174.13269.0.camel@ghostwheel.ges.redhat.com> References: <15887.485.807305.5559@gargle.gargle.HOWL> <1041281045.13998.6.camel@ghostwheel.ges.redhat.com> <15889.30529.580382.309916@gargle.gargle.HOWL> <1041622174.13269.0.camel@ghostwheel.ges.redhat.com> Eric Christopher writes: > On Tue, 2002-12-31 at 02:53, Matthias Klose wrote: > > Eric Christopher writes: > > > Just so people know, I've got a patch for this (it was checked into the > > > rewrite branch quite some time ago...) and will check it into 3_3 branch > > > and mainline shortly. > > > > I've now checked in this patch. > > > thanks. please close the bug report (9092) I opened in gnats for this. > > I'll close this after you give me confirmation that it actually fixed it > please :) I don't have a mips-linux box to do bootstraps on at the > moment... mipsel-linux built fine. see http://buildd.debian.org/fetch.php?&pkg=gcc-snapshot&ver=20030105-1&arch=mipsel&stamp=1041860146&file=log&as=raw From gcc-patches-return-75081-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 16:13:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7290 invoked by alias); 6 Jan 2003 16:13:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7187 invoked from network); 6 Jan 2003 16:13:47 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 6 Jan 2003 16:13:47 -0000 Received: from tooth.toronto.redhat.com (tooth.toronto.redhat.com [172.16.14.29]) by touchme.toronto.redhat.com (Postfix) with ESMTP id D9A25800041 for ; Mon, 6 Jan 2003 11:13:34 -0500 (EST) Received: from tooth.toronto.redhat.com (IDENT:tTiRGYPrA+8PpcxEuK1GC9csrnKRGF4l@localhost [127.0.0.1]) by tooth.toronto.redhat.com (8.12.5/8.12.5) with ESMTP id h06GDYfo017505 for ; Mon, 6 Jan 2003 11:13:34 -0500 Received: (from fche@localhost) by tooth.toronto.redhat.com (8.12.5/8.12.5/Submit) id h06GDYJ7017503 for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 11:13:34 -0500 Date: Mon, 6 Jan 2003 11:13:34 -0500 From: "Frank Ch. Eigler" To: gcc-patches@gcc.gnu.org Subject: [tree-ssa libmudflap] portability patches Message-ID: <20030106161334.GA17250@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i Hi - The following patch should allow libmudflap to be built on a few more platforms than just linux/x86/glibc. There is still a little more to do before libmudflap can be used on platforms too different. This is partly because of the way that ld/gcc specs are built up for -fmudflap interpretation. - FChE +2003-01-06 Frank Ch. Eigler + + Portability improvements. + * configure.in: Look for glibc backtrace headers/functions. + * mf-hooks.c: Don't include any more. + * mf-runtime.c (__mf_set_options): Call more stdlib functions + via CALL_REAL. + (__mf_backtrace): Provide alternate baby implementation in + absence of glibc. + * test/mf-driver.c: Portability tweaks. + * acinclude.m4: New file, containing top level libtool.m4. + * aclocal.m4, configure, Makefile.in, config.h.in: Regenerated. Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libmudflap/Attic/configure.in,v retrieving revision 1.1.2.3 diff -u -p -w -s -r1.1.2.3 configure.in --- configure.in 5 Nov 2002 21:21:03 -0000 1.1.2.3 +++ configure.in 6 Jan 2003 16:07:13 -0000 @@ -26,7 +26,8 @@ AC_SUBST(enable_shared) AC_SUBST(enable_static) dnl Should check for this header for the host/target, not the build platform -AC_CHECK_HEADERS(stdint.h) +AC_CHECK_HEADERS(stdint.h execinfo.h) +AC_CHECK_FUNCS(backtrace backtrace_symbols) if ${CONFIG_SHELL-/bin/sh} ./libtool --tag CC --features | grep "enable shared" > /dev/null; then Index: mf-hooks.c =================================================================== RCS file: /cvs/gcc/gcc/libmudflap/Attic/mf-hooks.c,v retrieving revision 1.1.2.21 diff -u -p -w -s -r1.1.2.21 mf-hooks.c --- mf-hooks.c 8 Nov 2002 20:06:16 -0000 1.1.2.21 +++ mf-hooks.c 6 Jan 2003 16:07:13 -0000 @@ -1,5 +1,5 @@ /* Mudflap: narrow-pointer bounds-checking by tree rewriting. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. Contributed by Frank Ch. Eigler and Graydon Hoare @@ -13,7 +13,6 @@ XXX: libgcc license? #include #include #include -#include #include #include "mf-runtime.h" Index: mf-runtime.c =================================================================== RCS file: /cvs/gcc/gcc/libmudflap/Attic/mf-runtime.c,v retrieving revision 1.1.2.22 diff -u -p -w -s -r1.1.2.22 mf-runtime.c --- mf-runtime.c 8 Nov 2002 20:06:17 -0000 1.1.2.22 +++ mf-runtime.c 6 Jan 2003 16:07:14 -0000 @@ -1,5 +1,5 @@ /* Mudflap: narrow-pointer bounds-checking by tree rewriting. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. Contributed by Frank Ch. Eigler and Graydon Hoare @@ -12,7 +12,9 @@ XXX: libgcc license? #include #include #include +#ifdef HAVE_EXECINFO_H #include +#endif #include #include @@ -276,6 +278,8 @@ __mf_set_options (const char *optstr) DECLARE (int, strncmp, const char *s1, const char *s2, size_t n); DECLARE (void *, memset, void *s, int c, size_t n); + /* XXX: bounds-check for optstr! */ + while (*optstr) { switch (*optstr) { @@ -291,14 +295,15 @@ __mf_set_options (const char *optstr) int negate = 0; optstr++; - if (*optstr == '?' || strcmp (optstr, "help") == 0) + if (*optstr == '?' || + CALL_REAL (strncmp, optstr, "help", 4) == 0) { /* Caller will print help and exit. */ rc = -1; break; } - if (strncmp (optstr, "no-", 3) == 0) + if (CALL_REAL (strncmp, optstr, "no-", 3) == 0) { negate = 1; optstr = & optstr[3]; @@ -1747,9 +1752,37 @@ __mf_backtrace (char ***symbols, void *g unsigned i; DECLARE (void, free, void *ptr); DECLARE (void *, calloc, size_t c, size_t n); + DECLARE (void *, malloc, size_t n); pc_array = CALL_REAL (calloc, pc_array_size, sizeof (void *)); +#ifdef HAVE_BACKTRACE pc_array_size = backtrace (pc_array, pc_array_size); +#else +#define FETCH(n) do { if (pc_array_size >= n) { \ + pc_array[n] = __builtin_return_address(n); \ + if (pc_array[n] == 0) pc_array_size = n; } } while (0) + + /* Unroll some calls __builtin_return_address because this function + only takes a literal integer parameter. */ + FETCH (0); +#if 0 + /* XXX: __builtin_return_address sometimes crashes (!) on >0 arguments, + rather than simply returning 0. :-( */ + FETCH (1); + FETCH (2); + FETCH (3); + FETCH (4); + FETCH (5); + FETCH (6); + FETCH (7); + FETCH (8); + if (pc_array_size > 8) pc_array_size = 9; +#else + if (pc_array_size > 0) pc_array_size = 1; +#endif + +#undef FETCH +#endif /* We want to trim the first few levels of the stack traceback, since they contain libmudflap wrappers and junk. If pc_array[] @@ -1768,7 +1801,29 @@ __mf_backtrace (char ***symbols, void *g remaining_size = pc_array_size - omitted_size; +#ifdef HAVE_BACKTRACE_SYMBOLS *symbols = backtrace_symbols (pc_array + omitted_size, remaining_size); +#else + { + /* Let's construct a buffer by hand. It will have + char*'s at the front, pointing at individual strings immediately + afterwards. */ + void *buffer; + char *chars; + char **pointers; + enum { perline = 30 }; + buffer = CALL_REAL (malloc, remaining_size * (perline + sizeof(char *))); + pointers = (char **) buffer; + chars = (char *)buffer + (remaining_size * sizeof (char *)); + for (i = 0; i < remaining_size; i++) + { + pointers[i] = chars; + sprintf (chars, "[%08lx]", pc_array [omitted_size + i]); + chars = chars + perline; + } + *symbols = pointers; + } +#endif CALL_REAL (free, pc_array); return remaining_size; Index: test/mf-driver.c =================================================================== RCS file: /cvs/gcc/gcc/libmudflap/test/Attic/mf-driver.c,v retrieving revision 1.1.2.2 diff -u -p -w -s -r1.1.2.2 mf-driver.c --- test/mf-driver.c 9 Sep 2002 21:29:15 -0000 1.1.2.2 +++ test/mf-driver.c 6 Jan 2003 16:07:14 -0000 @@ -1,5 +1,7 @@ #include #include +#include +#include /* this is a simplistic test driver for memory fault detection using mudflap. you include this file in your mudflapped test case and define a @@ -20,7 +22,7 @@ static const int should_fail = 0; static void test (); void -abort_handler () +abort_handler (int _ignored) { if (should_fail) { From gcc-patches-return-75082-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 16:54:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23993 invoked by alias); 6 Jan 2003 16:54:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23160 invoked from network); 6 Jan 2003 16:54:11 -0000 Received: from unknown (HELO mtvmime01.veritas.com) (143.127.3.10) by 209.249.29.67 with SMTP; 6 Jan 2003 16:54:11 -0000 Received: from megami (unverified) by mtvmime01.veritas.com (Content Technologies SMTPRS 4.2.10) with SMTP id for ; Mon, 6 Jan 2003 08:55:21 -0800 Received: from veritas.com(ellen.veritas.com[10.180.88.137]) (735 bytes) by megami via sendmail with P:esmtp/R:smart_host/T:smtp (sender: ) id for ; Mon, 6 Jan 2003 08:53:59 -0800 (PST) (Smail-3.2.0.101 1997-Dec-17 #15 built 2001-Aug-30) Message-ID: <3E19B4A5.411BE7D9@veritas.com> Date: Mon, 06 Jan 2003 08:53:57 -0800 From: Bruce Korb Reply-To: bkorb@veritas.com X-Accept-Language: en MIME-Version: 1.0 To: GCC-patches Subject: [patch for GCC 3.3] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit This diff: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fixinc/fixfixes.c.diff?cvsroot=gcc&r1=1.43&r2=1.44 should be applied to all active development paths. Any objections, Mark? From gcc-patches-return-75083-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 18:25:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9543 invoked by alias); 6 Jan 2003 18:25:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9532 invoked from network); 6 Jan 2003 18:25:53 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 6 Jan 2003 18:25:53 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h06IPfI08737 for ; Mon, 6 Jan 2003 10:25:41 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id for ; Mon, 6 Jan 2003 10:25:13 -0800 Received: from peugeot (peugeot.apple.com [17.201.21.145]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h06IPfs28508 for ; Mon, 6 Jan 2003 10:25:41 -0800 (PST) Date: Mon, 6 Jan 2003 10:28:57 -0800 Mime-Version: 1.0 (Apple Message framework v543) Content-Type: text/plain; charset=US-ASCII; format=flowed Subject: patch: set i686 default for Darwin/x86 From: Stuart Hastings To: gcc-patches@gcc.gnu.org Content-Transfer-Encoding: 7bit Message-Id: Darwin/x86 doesn't really support anything older than an i686. Darwin/PPC default unchanged. O.K. to commit? stuart hastings Apple Computer 2003-01-06 Stuart Hastings * config.guess Set i686 default for Darwin/x86. Index: gcc.pure/config.guess =================================================================== RCS file: /cvs/gcc/gcc/config.guess,v retrieving revision 1.56 diff -c -d -c -3 -p -r1.56 config.guess *** gcc.pure/config.guess 24 Dec 2002 23:53:51 -0000 1.56 --- gcc.pure/config.guess 6 Jan 2003 18:23:50 -0000 *************** EOF *** 1149,1155 **** echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) ! echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` --- 1149,1159 ---- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) ! case `uname -p` in ! *86) UNAME_PROCESSOR=i686 ;; ! powerpc) UNAME_PROCESSOR=powerpc ;; ! esac ! echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` From gcc-patches-return-75084-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 18:32:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13668 invoked by alias); 6 Jan 2003 18:32:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13654 invoked from network); 6 Jan 2003 18:32:13 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 6 Jan 2003 18:32:13 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h06ISbo02104; Mon, 6 Jan 2003 10:28:37 -0800 Date: Mon, 06 Jan 2003 10:28:37 -0800 From: Mark Mitchell To: Nathan Sidwell cc: "gcc-patches@gcc.gnu.org" Subject: Re: [C++ PATCH]: Fix 9109 Message-ID: <105050000.1041877717@warlock.codesourcery.com> In-Reply-To: <3E199A1C.6010108@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Monday, January 06, 2003 03:00:44 PM +0000 Nathan Sidwell wrote: > Mark, > this fixes bug 9109 that I stumbled over. If 'int (T)' is parseable > as both a declaration 'T of type int' or an abstract declaration > 'function returning int taking parameter T' (T being a template type > parm), we must prefer the abstract declarator. This patch is OK. I'd wanted to merge the declarator handling, the way that you did, but I wasn't brave enough. I think you got it right; if this passes the testsuite, it's OK. Thanks! -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75085-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 18:38:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16603 invoked by alias); 6 Jan 2003 18:38:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16541 invoked from network); 6 Jan 2003 18:37:46 -0000 Received: from unknown (HELO localhost.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 6 Jan 2003 18:37:46 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 17A523D45; Mon, 6 Jan 2003 13:37:37 -0500 (EST) Message-ID: <3E19CCF0.2070207@redhat.com> Date: Mon, 06 Jan 2003 13:37:36 -0500 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.1) Gecko/20021211 X-Accept-Language: en-us, en MIME-Version: 1.0 To: DJ Delorie Cc: gcc-patches@gcc.gnu.org, insight@sources.redhat.com, gdb-patches@sources.redhat.com Subject: Re: [rfa/toplevel] Conditionalize GDB_TK References: <3E15E32C.2050405@redhat.com> <200301031946.h03JkKe06892@greed.delorie.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit >> The attached only adds the tk directories to the gdb dependency list >> when the corresponding tk files are present. That way `all-gdb' >> doesn't build tk files (except when needed). >> >> ok? > > > Ok. Thanks. >> PS: Disclaimer, I cut/paste the configure changes. Perhaps someone >> able to regenerate configure should commit this? > > > You don't have autoconf 2.13? Which 2.13? :-) Anyway I found the correct version, re-generated the file and committed (both GCC and SRC). Andrew From gcc-patches-return-75086-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 18:48:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22499 invoked by alias); 6 Jan 2003 18:48:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22385 invoked from network); 6 Jan 2003 18:47:49 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 6 Jan 2003 18:47:49 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h06Ihgo02137; Mon, 6 Jan 2003 10:43:42 -0800 Date: Mon, 06 Jan 2003 10:43:42 -0800 From: Mark Mitchell To: gcc-patches@gcc.gnu.org cc: dberlin@dberlin.org Subject: Patch review for two outstanding patches Message-ID: <107410000.1041878622@warlock.codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Dan -- These two patches are eminently sensible; please go ahead and check them in. http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00049.html http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00143.html Thanks, -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75087-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 18:58:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31360 invoked by alias); 6 Jan 2003 18:58:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31333 invoked from network); 6 Jan 2003 18:58:00 -0000 Received: from unknown (HELO fillmore.constant.com) (12.247.41.113) by 209.249.29.67 with SMTP; 6 Jan 2003 18:58:00 -0000 Received: (from bkoz@localhost) by fillmore.constant.com (8.11.6/8.11.6) id h06IvlG31958; Mon, 6 Jan 2003 12:57:47 -0600 Date: Mon, 6 Jan 2003 12:57:47 -0600 Message-Id: <200301061857.h06IvlG31958@fillmore.constant.com> To: gcc-patches@gcc.gnu.org, pcarlini@unitus.it Subject: [v3] clarify libstdc++/9147 From: Benjamin Kosnik X-Organization: Red Hat / San Francisco There are 8 bytes leaked for 4 uses of the string literal "C" in messages and time facets, two for each facet time two for wide and narrow instantiations. This patch removes these, allowing for completely clean valgrind runs, and hopefully less confusion. I added a static _S_c_name and initialize it to "C", much the same way _S_c_locale is used now for static "C" library data. For glibc-2.3.x, there is no need for any of these name members, so I removed their use and initialization completely in this case. For the generic case, the messages facet bit was not used, so I removed the allocation in initialization. For the time facet default to the static string now. tested x86/linux RH 7.3 tested x86/linux RH 8.0 tested x86/linux --enable-clocale=generic -benjamin 2003-01-06 Benjamin Kosnik * include/bits/locale_facets.h (messages): Move ctor, dtor definitions to.. (__timepunct): Same. * config/locale/gnu/messages_members.h (messages): Add dtor, ctor definitions. Conditionalize for GNU systems. * config/locale/generic/messages_members.h (messages): Add dtor, ctor definitions. * config/locale/gnu/time_members.h (messages): New. Add dtor, ctor definitions. Conditionalize for GNU systems. * config/locale/generic/time_members.h (messages): New. Add dtor, ctor definitions. * include/bits/localefwd.h (locale::facet::_S_c_name): Add. * src/locale.cc: Define. * src/localename.cc (locale::_Impl::_Impl(facet**, size_t, bool): Use it. * config/locale/gnu/time_members.h: Use it. * config/locale/gnu/messages_members.h: Use it. * config/linker-map.gnu: Add locale::facets details. * include/Makefile.am (target_headers_extra): Add time_members.h. * include/Makefile.in: Regenerate. * acinclude.m4: Export CTIME_H. * aclocal.m4: Regenerate. * configure: Regnerate. Index: acinclude.m4 =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/acinclude.m4,v retrieving revision 1.225 diff -c -p -r1.225 acinclude.m4 *** acinclude.m4 30 Dec 2002 14:54:45 -0000 1.225 --- acinclude.m4 6 Jan 2003 18:49:15 -0000 *************** AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ *** 1272,1277 **** --- 1272,1278 ---- CMESSAGES_CC=config/locale/generic/messages_members.cc CMONEY_CC=config/locale/generic/monetary_members.cc CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_H=config/locale/generic/time_members.h CTIME_CC=config/locale/generic/time_members.cc CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h ;; *************** AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ *** 1306,1311 **** --- 1307,1313 ---- CMESSAGES_CC=config/locale/gnu/messages_members.cc CMONEY_CC=config/locale/gnu/monetary_members.cc CNUMERIC_CC=config/locale/gnu/numeric_members.cc + CTIME_H=config/locale/gnu/time_members.h CTIME_CC=config/locale/gnu/time_members.cc CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h ;; *************** AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ *** 1322,1327 **** --- 1324,1330 ---- CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc CMONEY_CC=config/locale/generic/monetary_members.cc CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_H=config/locale/generic/time_members.h CTIME_CC=config/locale/generic/time_members.cc CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h ;; *************** AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ *** 1346,1351 **** --- 1349,1355 ---- AC_SUBST(CMESSAGES_CC) AC_SUBST(CMONEY_CC) AC_SUBST(CNUMERIC_CC) + AC_SUBST(CTIME_H) AC_SUBST(CTIME_CC) AC_SUBST(CLOCALE_CC) AC_SUBST(CLOCALE_INTERNAL_H) Index: config/linker-map.gnu =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/config/linker-map.gnu,v retrieving revision 1.25 diff -c -p -r1.25 linker-map.gnu *** config/linker-map.gnu 26 Nov 2002 01:37:49 -0000 1.25 --- config/linker-map.gnu 6 Jan 2003 18:49:45 -0000 *************** GLIBCPP_3.2 { *** 50,56 **** std::[A-Zd-k]*; std::length_error*; std::logic_error*; ! std::locale::[A-Za-z]*; std::locale::_[A-Ra-z]*; std::locale::_S_classic; std::locale::_S_global; --- 50,63 ---- std::[A-Zd-k]*; std::length_error*; std::logic_error*; ! std::locale::[A-Za-e]*; ! std::locale::facet::[A-Za-z]*; ! std::locale::facet::_M*; ! std::locale::facet::_S_c_locale; ! std::locale::facet::_S_clone_c_locale*; ! std::locale::facet::_S_create_c_locale*; ! std::locale::facet::_S_destroy_c_locale*; ! std::locale::[A-Zg-z]*; std::locale::_[A-Ra-z]*; std::locale::_S_classic; std::locale::_S_global; *************** GLIBCPP_3.2 { *** 99,104 **** --- 106,114 ---- # std::locale destructors _ZNSt6localeD*; + + # std::locale::facet destructors + _ZNSt6locale5facetD*; # std::codecvt members. _ZNKSt7codecvtIcc11__mbstate_tE*; *************** GLIBCPP_3.2.1 { *** 204,211 **** _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_; _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ERKS6_S8_; - _ZNSt24__default_alloc_templateILb1ELi0EE12_S_force_newE; - # stub functions from libmath sinf; sinl; --- 214,219 ---- *************** GLIBCPP_3.2.1 { *** 241,246 **** --- 249,261 ---- __signbitl; } GLIBCPP_3.2; + + + GLIBCPP_3.2.2 { + + _ZNSt24__default_alloc_templateILb1ELi0EE12_S_force_newE; + + } GLIBCPP_3.2.1; # Symbols in the support library (libsupc++) have their own tag. CXXABI_1.2 { Index: config/locale/generic/messages_members.h =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/config/locale/generic/messages_members.h,v retrieving revision 1.1 diff -c -p -r1.1 messages_members.h *** config/locale/generic/messages_members.h 9 Mar 2002 02:16:32 -0000 1.1 --- config/locale/generic/messages_members.h 6 Jan 2003 18:49:45 -0000 *************** *** 1,6 **** // std::messages implementation details, generic version -*- C++ -*- ! // Copyright (C) 2001 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the --- 1,6 ---- // std::messages implementation details, generic version -*- C++ -*- ! // Copyright (C) 2001, 2003 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the *************** *** 35,40 **** --- 35,50 ---- // Non-virtual member functions. template + messages<_CharT>::messages(size_t __refs) + : locale::facet(__refs) + { _M_c_locale_messages = _S_c_locale; } + + template + messages<_CharT>::messages(__c_locale __cloc, const char*, size_t __refs) + : locale::facet(__refs) + { _M_c_locale_messages = _S_c_locale; } + + template typename messages<_CharT>::catalog messages<_CharT>::open(const basic_string& __s, const locale& __loc, const char*) const *************** *** 42,47 **** --- 52,61 ---- // Virtual member functions. template + messages<_CharT>::~messages() + { _S_destroy_c_locale(_M_c_locale_messages); } + + template typename messages<_CharT>::catalog messages<_CharT>::do_open(const basic_string&, const locale&) const { return 0; } *************** *** 56,58 **** --- 70,81 ---- void messages<_CharT>::do_close(catalog) const { } + + // messages_byname + template + messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) + : messages<_CharT>(__refs) + { + _S_destroy_c_locale(_M_c_locale_messages); + _S_create_c_locale(_M_c_locale_messages, __s); + } Index: config/locale/generic/time_members.cc =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/config/locale/generic/time_members.cc,v retrieving revision 1.6 diff -c -p -r1.6 time_members.cc *** config/locale/generic/time_members.cc 12 Dec 2002 00:22:58 -0000 1.6 --- config/locale/generic/time_members.cc 6 Jan 2003 18:49:45 -0000 *************** *** 1,4 **** ! // std::time_get, std::time_put implementation, GNU version -*- C++ -*- // Copyright (C) 2001, 2002 Free Software Foundation, Inc. // --- 1,4 ---- ! // std::time_get, std::time_put implementation, generic version -*- C++ -*- // Copyright (C) 2001, 2002 Free Software Foundation, Inc. // Index: config/locale/generic/time_members.h =================================================================== RCS file: config/locale/generic/time_members.h diff -N config/locale/generic/time_members.h *** /dev/null 1 Jan 1970 00:00:00 -0000 --- config/locale/generic/time_members.h 6 Jan 2003 18:49:45 -0000 *************** *** 0 **** --- 1,61 ---- + // std::time_get, std::time_put implementation, generic version -*- C++ -*- + + // Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the + // terms of the GNU General Public License as published by the + // Free Software Foundation; either version 2, or (at your option) + // any later version. + + // This library is distributed in the hope that it will be useful, + // but WITHOUT ANY WARRANTY; without even the implied warranty of + // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + // GNU General Public License for more details. + + // You should have received a copy of the GNU General Public License along + // with this library; see the file COPYING. If not, write to the Free + // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, + // USA. + + // As a special exception, you may use this file as part of a free software + // library without restriction. Specifically, if other files instantiate + // templates or use macros or inline functions from this file, or you compile + // this file and link it with other files to produce an executable, this + // file does not by itself cause the resulting executable to be covered by + // the GNU General Public License. This exception does not however + // invalidate any other reasons why the executable file might be covered by + // the GNU General Public License. + + // + // ISO C++ 14882: 22.2.5.1.2 - time_get functions + // ISO C++ 14882: 22.2.5.3.2 - time_put functions + // + + // Written by Benjamin Kosnik + + template + __timepunct<_CharT>::__timepunct(size_t __refs) + : locale::facet(__refs) + { + _M_name_timepunct = _S_c_name; + _M_initialize_timepunct(); + } + + template + __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, + size_t __refs) + : locale::facet(__refs) + { + _M_name_timepunct = new char[strlen(__s) + 1]; + strcpy(_M_name_timepunct, __s); + _M_initialize_timepunct(__cloc); + } + + template + __timepunct<_CharT>::~__timepunct() + { + if (_S_c_name != _M_name_timepunct) + delete [] _M_name_timepunct; + _S_destroy_c_locale(_M_c_locale_timepunct); + } Index: config/locale/gnu/messages_members.h =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/config/locale/gnu/messages_members.h,v retrieving revision 1.5 diff -c -p -r1.5 messages_members.h *** config/locale/gnu/messages_members.h 5 Sep 2002 07:46:16 -0000 1.5 --- config/locale/gnu/messages_members.h 6 Jan 2003 18:49:45 -0000 *************** *** 1,6 **** // std::messages implementation details, GNU version -*- C++ -*- ! // Copyright (C) 2001, 2002 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the --- 1,6 ---- // std::messages implementation details, GNU version -*- C++ -*- ! // Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the *************** *** 28,40 **** // the GNU General Public License. // ! // ISO C++ 14882: 22.2.7.1.2 messages virtual functions // // Written by Benjamin Kosnik // Non-virtual member functions. template typename messages<_CharT>::catalog messages<_CharT>::open(const basic_string& __s, const locale& __loc, const char* __dir) const --- 28,63 ---- // the GNU General Public License. // ! // ISO C++ 14882: 22.2.7.1.2 messages functions // // Written by Benjamin Kosnik // Non-virtual member functions. template + messages<_CharT>::messages(size_t __refs) + : locale::facet(__refs) + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + _M_name_messages = _S_c_name; + #endif + _M_c_locale_messages = _S_c_locale; + } + + template + messages<_CharT>::messages(__c_locale __cloc, + const char* __s __attribute__ ((__unused__)), + size_t __refs) + : locale::facet(__refs) + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + _M_name_messages = new char[strlen(__s) + 1]; + strcpy(_M_name_messages, __s); + #endif + _M_c_locale_messages = _S_clone_c_locale(__cloc); + } + + template typename messages<_CharT>::catalog messages<_CharT>::open(const basic_string& __s, const locale& __loc, const char* __dir) const *************** *** 43,48 **** --- 66,82 ---- return this->do_open(__s, __loc); } + // Virtual member functions. + template + messages<_CharT>::~messages() + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + if (_S_c_name != _M_name_messages) + delete [] _M_name_messages; + #endif + _S_destroy_c_locale(_M_c_locale_messages); + } + template typename messages<_CharT>::catalog messages<_CharT>::do_open(const basic_string& __s, *************** *** 58,60 **** --- 92,109 ---- void messages<_CharT>::do_close(catalog) const { } + + // messages_byname + template + messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) + : messages<_CharT>(__refs) + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + if (_S_c_name != _M_name_messages) + delete [] _M_name_messages; + _M_name_messages = new char[strlen(__s) + 1]; + strcpy(_M_name_messages, __s); + #endif + _S_destroy_c_locale(_M_c_locale_messages); + _S_create_c_locale(_M_c_locale_messages, __s); + } Index: config/locale/gnu/time_members.h =================================================================== RCS file: config/locale/gnu/time_members.h diff -N config/locale/gnu/time_members.h *** /dev/null 1 Jan 1970 00:00:00 -0000 --- config/locale/gnu/time_members.h 6 Jan 2003 18:49:45 -0000 *************** *** 0 **** --- 1,68 ---- + // std::time_get, std::time_put implementation, GNU version -*- C++ -*- + + // Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the + // terms of the GNU General Public License as published by the + // Free Software Foundation; either version 2, or (at your option) + // any later version. + + // This library is distributed in the hope that it will be useful, + // but WITHOUT ANY WARRANTY; without even the implied warranty of + // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + // GNU General Public License for more details. + + // You should have received a copy of the GNU General Public License along + // with this library; see the file COPYING. If not, write to the Free + // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, + // USA. + + // As a special exception, you may use this file as part of a free software + // library without restriction. Specifically, if other files instantiate + // templates or use macros or inline functions from this file, or you compile + // this file and link it with other files to produce an executable, this + // file does not by itself cause the resulting executable to be covered by + // the GNU General Public License. This exception does not however + // invalidate any other reasons why the executable file might be covered by + // the GNU General Public License. + + // + // ISO C++ 14882: 22.2.5.1.2 - time_get functions + // ISO C++ 14882: 22.2.5.3.2 - time_put functions + // + + // Written by Benjamin Kosnik + + template + __timepunct<_CharT>::__timepunct(size_t __refs) + : locale::facet(__refs) + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + _M_name_timepunct = _S_c_name; + #endif + _M_initialize_timepunct(); + } + + template + __timepunct<_CharT>::__timepunct(__c_locale __cloc, + const char* __s __attribute__ ((__unused__)), + size_t __refs) + : locale::facet(__refs) + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + _M_name_timepunct = new char[strlen(__s) + 1]; + strcpy(_M_name_timepunct, __s); + #endif + _M_initialize_timepunct(__cloc); + } + + template + __timepunct<_CharT>::~__timepunct() + { + #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + if (_S_c_name != _M_name_timepunct) + delete [] _M_name_timepunct; + #endif + _S_destroy_c_locale(_M_c_locale_timepunct); + } Index: include/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/include/Makefile.am,v retrieving revision 1.44 diff -c -p -r1.44 Makefile.am *** include/Makefile.am 16 Dec 2002 19:01:57 -0000 1.44 --- include/Makefile.am 6 Jan 2003 18:49:46 -0000 *************** target_headers_extra = \ *** 324,329 **** --- 324,330 ---- ${target_builddir}/c++io.h \ ${target_builddir}/c++locale.h \ ${target_builddir}/messages_members.h \ + ${target_builddir}/time_members.h \ ${target_builddir}/codecvt_specializations.h thread_target_headers = \ *************** stamp-target: ${target_headers} ${target *** 414,419 **** --- 415,421 ---- @LN_S@ ${glibcpp_srcdir}/@CLOCALE_H@ c++locale.h || true ;\ @LN_S@ ${glibcpp_srcdir}/@CLOCALE_INTERNAL_H@ . || true ;\ @LN_S@ ${glibcpp_srcdir}/@CMESSAGES_H@ messages_members.h || true ;\ + @LN_S@ ${glibcpp_srcdir}/@CTIME_H@ time_members.h || true ;\ @LN_S@ ${glibcpp_srcdir}/@CCODECVT_H@ codecvt_specializations.h || true);\ echo `date` > stamp-target ; \ fi Index: include/bits/locale_facets.h =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/locale_facets.h,v retrieving revision 1.49 diff -c -p -r1.49 locale_facets.h *** include/bits/locale_facets.h 17 Oct 2002 01:19:59 -0000 1.49 --- include/bits/locale_facets.h 6 Jan 2003 18:49:48 -0000 *************** namespace std *** 1011,1032 **** public: explicit ! __timepunct(size_t __refs = 0) ! : locale::facet(__refs) ! { ! _M_name_timepunct = new char[2]; ! strcpy(_M_name_timepunct, "C"); ! _M_initialize_timepunct(); ! } explicit ! __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0) ! : locale::facet(__refs) ! { ! _M_name_timepunct = new char[strlen(__s) + 1]; ! strcpy(_M_name_timepunct, __s); ! _M_initialize_timepunct(__cloc); ! } void _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format, --- 1011,1020 ---- public: explicit ! __timepunct(size_t __refs = 0); explicit ! __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0); void _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format, *************** namespace std *** 1123,1133 **** protected: virtual ! ~__timepunct() ! { ! delete [] _M_name_timepunct; ! _S_destroy_c_locale(_M_c_locale_timepunct); ! } // For use at construction time only. void --- 1111,1117 ---- protected: virtual ! ~__timepunct(); // For use at construction time only. void *************** namespace std *** 1169,1174 **** --- 1153,1160 ---- template const _CharT* __timepunct<_CharT>::_S_timezones[14]; + // Include host and configuration specific timepunct functions. + #include template class time_get : public locale::facet, public time_base *************** namespace std *** 1628,1659 **** // Underlying "C" library locale information saved from // initialization, needed by messages_byname as well. __c_locale _M_c_locale_messages; - #if 1 - // Only needed if glibc < 2.3 char* _M_name_messages; - #endif public: static locale::id id; explicit ! messages(size_t __refs = 0) ! : locale::facet(__refs) ! { ! _M_name_messages = new char[2]; ! strcpy(_M_name_messages, "C"); ! _M_c_locale_messages = _S_c_locale; ! } // Non-standard. explicit ! messages(__c_locale __cloc, const char* __s, size_t __refs = 0) ! : locale::facet(__refs) ! { ! _M_name_messages = new char[strlen(__s) + 1]; ! strcpy(_M_name_messages, __s); ! _M_c_locale_messages = _S_clone_c_locale(__cloc); ! } catalog open(const basic_string& __s, const locale& __loc) const --- 1614,1630 ---- // Underlying "C" library locale information saved from // initialization, needed by messages_byname as well. __c_locale _M_c_locale_messages; char* _M_name_messages; public: static locale::id id; explicit ! messages(size_t __refs = 0); // Non-standard. explicit ! messages(__c_locale __cloc, const char* __s, size_t __refs = 0); catalog open(const basic_string& __s, const locale& __loc) const *************** namespace std *** 1673,1683 **** protected: virtual ! ~messages() ! { ! delete [] _M_name_messages; ! _S_destroy_c_locale(_M_c_locale_messages); ! } virtual catalog do_open(const basic_string&, const locale&) const; --- 1644,1650 ---- protected: virtual ! ~messages(); virtual catalog do_open(const basic_string&, const locale&) const; *************** namespace std *** 1751,1759 **** messages::do_get(catalog, int, int, const wstring&) const; #endif - // Include host and configuration specific messages virtual functions. - #include - template class messages_byname : public messages<_CharT> { --- 1718,1723 ---- *************** namespace std *** 1762,1782 **** typedef basic_string<_CharT> string_type; explicit ! messages_byname(const char* __s, size_t __refs = 0) ! : messages<_CharT>(__refs) ! { ! delete [] _M_name_messages; ! _M_name_messages = new char[strlen(__s) + 1]; ! strcpy(_M_name_messages, __s); ! _S_destroy_c_locale(_M_c_locale_messages); ! _S_create_c_locale(_M_c_locale_messages, __s); ! } protected: virtual ~messages_byname() { } }; // Subclause convenience interfaces, inlines. --- 1726,1741 ---- typedef basic_string<_CharT> string_type; explicit ! messages_byname(const char* __s, size_t __refs = 0); protected: virtual ~messages_byname() { } }; + + // Include host and configuration specific messages functions. + #include // Subclause convenience interfaces, inlines. Index: include/bits/localefwd.h =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/localefwd.h,v retrieving revision 1.31 diff -c -p -r1.31 localefwd.h *** include/bits/localefwd.h 8 Oct 2002 23:32:22 -0000 1.31 --- include/bits/localefwd.h 6 Jan 2003 18:49:49 -0000 *************** namespace std *** 264,270 **** // The "C" reference locale static _Impl* _S_classic; ! // Current global reference locale static _Impl* _S_global; // Number of standard categories. For C++, these categories are --- 264,270 ---- // The "C" reference locale static _Impl* _S_classic; ! // Current global locale static _Impl* _S_global; // Number of standard categories. For C++, these categories are *************** namespace std *** 419,427 **** _Atomic_word _M_references; protected: ! // Contains data from the underlying "C" library for default "C" ! // or "POSIX" locale. static __c_locale _S_c_locale; explicit facet(size_t __refs = 0) throw(); --- 419,429 ---- _Atomic_word _M_references; protected: ! // Contains data from the underlying "C" library for the classic locale. static __c_locale _S_c_locale; + + // String literal for the name of the classic locale. + static char _S_c_name[2]; explicit facet(size_t __refs = 0) throw(); Index: src/locale.cc =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/src/locale.cc,v retrieving revision 1.72 diff -c -p -r1.72 locale.cc *** src/locale.cc 25 Nov 2002 19:01:55 -0000 1.72 --- src/locale.cc 6 Jan 2003 18:49:52 -0000 *************** *** 1,4 **** ! // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free --- 1,4 ---- ! // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free *************** namespace std *** 449,454 **** --- 449,456 ---- __c_locale locale::facet::_S_c_locale; + char locale::facet::_S_c_name[2]; + locale::facet:: ~facet() { } Index: src/localename.cc =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/src/localename.cc,v retrieving revision 1.33 diff -c -p -r1.33 localename.cc *** src/localename.cc 28 Nov 2002 17:29:24 -0000 1.33 --- src/localename.cc 6 Jan 2003 18:49:53 -0000 *************** namespace std *** 209,215 **** : _M_references(__refs), _M_facets_size(_GLIBCPP_NUM_FACETS) { // Initialize the underlying locale model. ! locale::facet::_S_create_c_locale(locale::facet::_S_c_locale, "C"); _M_facets = new(&facet_vec) facet*[_M_facets_size]; for (size_t __i = 0; __i < _M_facets_size; ++__i) --- 209,218 ---- : _M_references(__refs), _M_facets_size(_GLIBCPP_NUM_FACETS) { // Initialize the underlying locale model. ! locale::facet::_S_c_name[0] = 'C'; ! locale::facet::_S_c_name[1] = '\0'; ! locale::facet::_S_create_c_locale(locale::facet::_S_c_locale, ! locale::facet::_S_c_name); _M_facets = new(&facet_vec) facet*[_M_facets_size]; for (size_t __i = 0; __i < _M_facets_size; ++__i) *************** namespace std *** 220,226 **** __i < _S_categories_size + _S_extra_categories_size; ++__i) { _M_names[__i] = new (&facet_name[__i]) char[2]; ! strcpy(_M_names[__i], "C"); } // This is needed as presently the C++ version of "C" locales --- 223,229 ---- __i < _S_categories_size + _S_extra_categories_size; ++__i) { _M_names[__i] = new (&facet_name[__i]) char[2]; ! strcpy(_M_names[__i], locale::facet::_S_c_name); } // This is needed as presently the C++ version of "C" locales From gcc-patches-return-75088-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 18:59:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32077 invoked by alias); 6 Jan 2003 18:59:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32069 invoked from network); 6 Jan 2003 18:59:24 -0000 Received: from unknown (HELO smtp1.cp.tin.it) (212.216.176.221) by 209.249.29.67 with SMTP; 6 Jan 2003 18:59:24 -0000 Received: from unitus.it (80.181.224.148) by smtp1.cp.tin.it (6.5.029) id 3DEDBCA000AD84D3 for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 19:59:13 +0100 Message-ID: <3E19D26A.40502@unitus.it> Date: Mon, 06 Jan 2003 20:00:58 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: [v3] Avoid 4 warnings recently introduced Content-Type: multipart/mixed; boundary="------------000809010307020407070104" This is a multi-part message in MIME format. --------------000809010307020407070104 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, trivial, tested x86-linux, committed. Paolo. ////////// --------------000809010307020407070104 Content-Type: text/plain; name="CL_warning" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="CL_warning" 2003-01-06 Paolo Carlini * src/codecvt.cc (codecvt::do_in, do_out): Tweak parameters to avoid unused parameter warnings. --------------000809010307020407070104 Content-Type: text/plain; name="patch_warning" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch_warning" diff -urN libstdc++-v3-orig/src/codecvt.cc libstdc++-v3/src/codecvt.cc --- libstdc++-v3-orig/src/codecvt.cc 2003-01-05 09:04:17.000000000 +0100 +++ libstdc++-v3/src/codecvt.cc 2003-01-06 19:32:38.000000000 +0100 @@ -60,8 +60,8 @@ codecvt_base::result codecvt:: do_out(state_type&, const intern_type* __from, - const intern_type* __from_end, const intern_type*& __from_next, - extern_type* __to, extern_type* __to_end, + const intern_type*, const intern_type*& __from_next, + extern_type* __to, extern_type*, extern_type*& __to_next) const { // _GLIBCPP_RESOLVE_LIB_DEFECTS @@ -84,8 +84,8 @@ codecvt_base::result codecvt:: do_in(state_type&, const extern_type* __from, - const extern_type* __from_end, const extern_type*& __from_next, - intern_type* __to, intern_type* __to_end, + const extern_type*, const extern_type*& __from_next, + intern_type* __to, intern_type*, intern_type*& __to_next) const { // _GLIBCPP_RESOLVE_LIB_DEFECTS --------------000809010307020407070104-- From gcc-patches-return-75089-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 19:19:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6849 invoked by alias); 6 Jan 2003 19:19:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6835 invoked from network); 6 Jan 2003 19:19:10 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 6 Jan 2003 19:19:10 -0000 Received: from vor.iro.umontreal.ca (vor.iro.umontreal.ca [132.204.24.42]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h06JDs79008078 for ; Mon, 6 Jan 2003 14:13:54 -0500 Received: (from eichwalk@localhost) by vor.iro.umontreal.ca (8.11.4/8.11.1) id h06JDs327215; Mon, 6 Jan 2003 14:13:54 -0500 Date: Mon, 6 Jan 2003 14:13:54 -0500 Message-Id: <200301061913.h06JDs327215@vor.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: New PO Template file for `gcc' X-MailScanner: Found to be clean X-MailScanner-SpamScore: s Hello, gentle maintainer. This is a message from the Translation Project robot. A new PO Template file, for programs using the textual domain `gcc', has just been made available to language teams for translation, and a copy is available as: > http://www.iro.umontreal.ca/contrib/po/domains/POT/gcc-3.3-b20021230.pot The file should soon be made available in mirror sites as: > ftp://ftp.unex.es/pub/gnu-i18n/po/domains/POT/gcc-3.3-b20021230.pot > http://translation.sf.net/domains/POT/gcc-3.3-b20021230.pot > ftp://tiger.informatik.hu-berlin.de/pub/po/domains/POT/gcc-3.3-b20021230.pot In your releases, this file is usually found as `po/gcc.pot'. It is created or updated automatically at `make dist' time, or whenever you run `make update-po' in the `po/' subdirectory. Whenever you have a distribution ready which holds a newer PO Template, please send the URL of this distribution to the address below. The distribution could be a pretest or a snapshot, it does not even have to compile. This is to be used by translators, when they need to get some translation context from your sources. Within the Translation Project, each PO Template file should have different version numbers, but since it is not OK to have two different distributions having same version numbers, this is not a problem in practice. Here is the URL information which has just been provided to translators for your package. Please inform the translation coordinator, at the address given below, if the information does not appear to be adequate or current: > ftp://gcc.gnu.org/pub/gcc/snapshots/2002-12-30/gcc-20021230.tar.gz Translated PO files will later be automatically e-mailed to you. Thanks for your collaboration, The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca From gcc-patches-return-75090-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 19:34:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11600 invoked by alias); 6 Jan 2003 19:34:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11553 invoked from network); 6 Jan 2003 19:34:08 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 6 Jan 2003 19:34:08 -0000 Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h06JXq79010391 for ; Mon, 6 Jan 2003 14:33:52 -0500 Received: (from pinard@localhost) by trex.iro.umontreal.ca (8.11.4/8.11.1) id h06JXps20466; Mon, 6 Jan 2003 14:33:51 -0500 Date: Mon, 6 Jan 2003 14:33:51 -0500 Message-Id: <200301061933.h06JXps20466@trex.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: New German PO file for `gcc' X-MailScanner: Found to be clean X-MailScanner-SpamScore: s Hello, gentle maintainer. This is a message from the Translation Project robot. A revised PO file, for programs using the textual domain `gcc', has been submitted by the team of translators taking care of the German language. This particular file, along with all other PO files pertaining to the same textual domain, is available as: > http://www.iro.umontreal.ca/contrib/po/maint/gcc/de.po The file should soon be made available in mirror sites as: > ftp://ftp.unex.es/pub/gnu-i18n/po/maint/gcc/de.po > http://translation.sf.net/maint/gcc/de.po > ftp://tiger.informatik.hu-berlin.de/pub/po/maint/gcc/de.po This file has already been sent to you separately on 2003-01-06, as a MIME invoice unpacking the file `gcc-3.3-b20021230.de.po'. The following HTML page should also be updated by tomorrow. > http://www.iro.umontreal.ca/contrib/po/HTML/domain-gcc.html Please consider including all PO files, as they stand, in the `po/' subdirectory of your next release of programs using that textual domain, whether it is official or pretest. Whenever you have a distribution ready which holds a newer PO Template, please send the URL of this distribution to the address below. The distribution could be a pretest or a snapshot, it does not even have to compile. This is to be used by translators, when they need to get some translation context from your sources. Within the Translation Project, each PO Template file should have different version numbers, but since it is not OK to have two different distributions using same version numbers, this is not a problem in practice. Contact me if any question arises. Thanks for your collaboration, The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca From gcc-patches-return-75091-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 19:34:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11603 invoked by alias); 6 Jan 2003 19:34:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11586 invoked from network); 6 Jan 2003 19:34:11 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 6 Jan 2003 19:34:11 -0000 Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h06JXq79010392 for ; Mon, 6 Jan 2003 14:33:52 -0500 Received: (from pinard@localhost) by trex.iro.umontreal.ca (8.11.4/8.11.1) id h06JXpA20469; Mon, 6 Jan 2003 14:33:51 -0500 Date: Mon, 6 Jan 2003 14:33:51 -0500 Message-Id: <200301061933.h06JXpA20469@trex.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: Contents of file `gcc-3.3-b20021230.de.po.gz' MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-MailScanner: Found to be clean --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=gcc-3.3-b20021230.de.po.gz Content-Transfer-Encoding: base64 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 --=-=-= The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca --=-=-=-- From gcc-patches-return-75092-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 19:34:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12100 invoked by alias); 6 Jan 2003 19:34:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12077 invoked from network); 6 Jan 2003 19:34:26 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by sources.redhat.com with SMTP; 6 Jan 2003 19:34:26 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h06JTU103106 for ; Mon, 6 Jan 2003 14:29:30 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h06JYDn17877; Mon, 6 Jan 2003 14:34:13 -0500 Received: from dhcp-172-16-25-153.sfbay.redhat.com (dhcp-172-16-25-153.sfbay.redhat.com [172.16.25.153]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h06JYDn32175; Mon, 6 Jan 2003 11:34:13 -0800 Subject: Re: MIPS patch: fix EABI64 va_arg handling From: Eric Christopher To: Richard Sandiford Cc: gcc-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 06 Jan 2003 11:19:45 -0800 Message-Id: <1041880785.15319.24.camel@ghostwheel.ges.redhat.com> Mime-Version: 1.0 On Mon, 2003-01-06 at 05:31, Richard Sandiford wrote: > This patch fixes a va_arg() bug for -EB -mabi=eabi -mlong32. > If an argument is passed by reference, we need to read its > address from the least significant half of a 64-bit save slot. > > Tested on mips64vrel-elf. Fixes several test cases, such > as va-arg-22.c. OK to install? > > Richard > > > * config/mips/mips.c (mips_va_arg): In the EABI code, apply the > big-endian correction to indirect arguments too. > OK. -eric -- Yeah, I used to play basketball... From gcc-patches-return-75093-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 19:42:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16488 invoked by alias); 6 Jan 2003 19:42:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16444 invoked from network); 6 Jan 2003 19:42:00 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by sources.redhat.com with SMTP; 6 Jan 2003 19:42:00 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h06JfuF26421; Mon, 6 Jan 2003 14:41:56 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Vd6u-00043j-00; Mon, 06 Jan 2003 14:40:32 -0500 Date: Mon, 6 Jan 2003 14:40:31 -0500 To: dje@watson.ibm.com Cc: aoliva@redhat.com, gcc-patches@gcc.gnu.org Subject: Re: GCC top-level configure versus contrib/test_summary Message-ID: <20030106194031.GA15602@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode I've tried to fix test_summary, but I'm afraid I can't; I simply don't understand AWK well enough. Alex, it's your script. Can you do anything? Reference http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01590.html for dje's analysis of the problem. From gcc-patches-return-75094-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 20:29:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15717 invoked by alias); 6 Jan 2003 20:29:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15706 invoked from network); 6 Jan 2003 20:29:28 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 6 Jan 2003 20:29:28 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 73C4A41E0; Mon, 6 Jan 2003 21:29:16 +0100 (CET) Date: Mon, 6 Jan 2003 21:29:16 +0100 From: Josef Zlomek To: Zack Weinberg Cc: gcc-patches@gcc.gnu.org Subject: Re: [rtlopt] speed improvement of branch prediction Message-ID: <20030106202916.GC26309@artax.karlin.mff.cuni.cz> References: <20030105164319.GA18624@artax.karlin.mff.cuni.cz> <877kdjo2in.fsf@egil.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <877kdjo2in.fsf@egil.codesourcery.com> User-Agent: Mutt/1.3.28i > > this is a corrected patch which speeds up branch prediction by using > > sreal.c (simple real library) instead of real.c > > Speed up real.c instead. real.c already does not do operations bit by bit but by groups of bits (size of unsigned long) so I do not know how to speed it up. The speed up of branch prediction is mainly done by several reasons: Only a half of processor's integers is used for computing the operations (so that for example multiplication does not overflow (16-bit * 16-bit = 32-bit on 32-bit machine)) and the sreal values are computed using processor's instructions for adding, substracting, multiplying and dividing. Since we do not need a high precission for branch prediction I am using 32-bit precission in sreal (divided to two 16-bit parts on 32-bit machines), moreover so that division would be fast its precission is "only" 24-bit. But since predicted basic block frequencies are in range 0..10000 the precission is good enough. By this approach, branch prediction pass is about four times faster (on 32-bit machine => numbers in two parts and more processor instructions used for computing in 32-bit precission) and bootstrap of gcc is about 2.4% faster (on 64-bit machine => the (32-bit) numbers are in one part and computed by less instructions). Josef From gcc-patches-return-75095-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 20:31:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16577 invoked by alias); 6 Jan 2003 20:31:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16567 invoked from network); 6 Jan 2003 20:31:35 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 6 Jan 2003 20:31:35 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18Vdu8-0005nT-00; Mon, 06 Jan 2003 12:31:24 -0800 To: gcc-patches@gcc.gnu.org Cc: Mark Mitchell , Jean-Pierre Radley Subject: Re: Forgotten patch for hwint.h (oops) From: Zack Weinberg Date: Mon, 06 Jan 2003 12:31:24 -0800 In-Reply-To: <878yy0z1h1.fsf@egil.codesourcery.com> (Zack Weinberg's message of "Sat, 04 Jan 2003 20:04:26 -0800") Message-ID: <87r8bqdnqb.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <878yy0z1h1.fsf@egil.codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Zack Weinberg writes: > * hwint.h: If the current compiler has no 64-bit type at all, > make HOST_WIDEST_INT 32 bits. Mark approved this in private mail and I have now checked it in. zw From gcc-patches-return-75096-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 20:37:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17942 invoked by alias); 6 Jan 2003 20:37:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17927 invoked from network); 6 Jan 2003 20:37:52 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 6 Jan 2003 20:37:52 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18Ve0A-0005nk-00; Mon, 06 Jan 2003 12:37:38 -0800 To: Josef Zlomek Cc: gcc-patches@gcc.gnu.org Subject: Re: [rtlopt] speed improvement of branch prediction From: Zack Weinberg Date: Mon, 06 Jan 2003 12:37:38 -0800 In-Reply-To: <20030106202916.GC26309@artax.karlin.mff.cuni.cz> (Josef Zlomek's message of "Mon, 6 Jan 2003 21:29:16 +0100") Message-ID: <87lm1ydnfx.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <20030105164319.GA18624@artax.karlin.mff.cuni.cz> <877kdjo2in.fsf@egil.codesourcery.com> <20030106202916.GC26309@artax.karlin.mff.cuni.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Josef Zlomek writes: > real.c already does not do operations bit by bit > but by groups of bits (size of unsigned long) > so I do not know how to speed it up. ... > Since we do not need a high precission for branch prediction > I am using 32-bit precission in sreal (divided to two 16-bit parts on > 32-bit machines), moreover so that division would be fast its > precission is "only" 24-bit. > But since predicted basic block frequencies are in range 0..10000 > the precission is good enough. Good point, I hadn't realized where the speedup was coming from. Is it feasible to merge sreal.c into real.c and share some of the code? zw From gcc-patches-return-75097-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 20:42:53 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20636 invoked by alias); 6 Jan 2003 20:42:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20567 invoked from network); 6 Jan 2003 20:42:48 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 6 Jan 2003 20:42:48 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h06KgZk02040 for ; Mon, 6 Jan 2003 15:42:36 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Ve3a-00007w-00 for ; Mon, 06 Jan 2003 15:41:10 -0500 Date: Mon, 6 Jan 2003 15:41:09 -0500 To: gcc-patches@gcc.gnu.org Subject: (patch) fix contrib/test_summary? Message-ID: <20030106204109.GA487@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode This seems to fix contrib/test_summary to work against new config.status. I understand the script very poorly, so I have no idea what else I've broken. * test_summary: Fix to work with new config.status. Index: test_summary =================================================================== RCS file: /cvs/gcc/gcc/contrib/test_summary,v retrieving revision 1.21 diff -u -r1.21 test_summary --- test_summary 16 May 2002 17:41:58 -0000 1.21 +++ test_summary 6 Jan 2003 20:41:22 -0000 @@ -94,9 +94,10 @@ print "cat <<'"'"'EOF'"'"' |"; '${prepend_logs+" system(\"cat $prepend_logs\"); "}' } -$1 ~ /\/configure$/ { - srcdir = $1; - gsub(/\/configure$/, "", srcdir); +$0 ~ /# (.*)\/configure(.*)$/ { + srcdir = $0; + gsub(/\/configure(.*)$/, "", srcdir); + gsub(/# /, "", srcdir); printf "LAST_UPDATED: "; system("tail -1 " srcdir "/LAST_UPDATED"); print ""; From gcc-patches-return-75098-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 20:52:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25985 invoked by alias); 6 Jan 2003 20:52:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25978 invoked from network); 6 Jan 2003 20:52:26 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 6 Jan 2003 20:52:26 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h06Kmjo17181; Mon, 6 Jan 2003 12:48:45 -0800 Date: Mon, 06 Jan 2003 12:48:44 -0800 From: Mark Mitchell To: "bkorb@veritas.com" , GCC-patches Subject: Re: [patch for GCC 3.3] Message-ID: <246340000.1041886124@warlock.codesourcery.com> In-Reply-To: <3E19B4A5.411BE7D9@veritas.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Monday, January 06, 2003 08:53:57 AM -0800 Bruce Korb wrote: > > This diff: > > http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fixinc/fixfixes.c.diff?cvsr > oot=gcc&r1=1.43&r2=1.44 > > should be applied to all active development paths. > Any objections, Mark? None, thanks. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75099-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 21:33:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14281 invoked by alias); 6 Jan 2003 21:33:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14271 invoked from network); 6 Jan 2003 21:33:56 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 6 Jan 2003 21:33:56 -0000 Received: (from mitchell@localhost) by localhost.localdomain (8.11.6/8.11.6) id h06LULG29944; Mon, 6 Jan 2003 13:30:21 -0800 Date: Mon, 6 Jan 2003 13:30:21 -0800 Message-Id: <200301062130.h06LULG29944@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Subject: C++ PATCH: Fix PR 9189 Reply-to: mark@codesourcery.com This patch fixes the regression reported in PR 9189. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-06 Mark Mitchell PR c++/9189 * parser.c (cp_parser): Remove default_arg_types. Update documentation for unparsed_functions_queues. (cp_parser_late_parsing_default_args): Take a FUNCTION_DECL as the parameter. (cp_parser_new): Don't set parser->default_arg_types. (cp_parser_function_definition): Adjust usage of unparsed_funtions_queues. (cp_parser_class_specifier): Don't mess with parser->default_arg_types. Handle default argument processing in a separate phase from function body processing. (cp_parser_template_declaration_after_export): Adjust usage of unparsed_functions_queues. (cp_parser_late_parsing_for_member): Do not handle default arguments. 2003-01-06 Mark Mitchell PR c++/9189 * g++.dg/parse/defarg3.C: New test. Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.17 diff -c -5 -p -r1.17 parser.c *** parser.c 3 Jan 2003 02:11:55 -0000 1.17 --- parser.c 6 Jan 2003 21:15:16 -0000 *************** typedef struct cp_parser GTY(()) *** 1316,1341 **** /* If non-NULL, then we are parsing a construct where new type definitions are not permitted. The string stored here will be issued as an error message if a type is defined. */ const char *type_definition_forbidden_message; - /* List of FUNCTION_TYPEs which contain unprocessed DEFAULT_ARGs - during class parsing, and are not FUNCTION_DECLs. G++ has an - awkward extension allowing default args on pointers to functions - etc. */ - tree default_arg_types; - /* A TREE_LIST of queues of functions whose bodies have been lexed, but may not have been parsed. These functions are friends of members defined within a class-specification; they are not procssed until the class is complete. The active queue is at the front of the list. Within each queue, functions appear in the reverse order that ! they appeared in the source. The TREE_PURPOSE of each node is ! the class in which the function was defined or declared; the ! TREE_VALUE is the FUNCTION_DECL itself. */ tree unparsed_functions_queues; /* The number of classes whose definitions are currently in progress. */ unsigned num_classes_being_defined; --- 1316,1335 ---- /* If non-NULL, then we are parsing a construct where new type definitions are not permitted. The string stored here will be issued as an error message if a type is defined. */ const char *type_definition_forbidden_message; /* A TREE_LIST of queues of functions whose bodies have been lexed, but may not have been parsed. These functions are friends of members defined within a class-specification; they are not procssed until the class is complete. The active queue is at the front of the list. Within each queue, functions appear in the reverse order that ! they appeared in the source. Each TREE_VALUE is a ! FUNCTION_DECL of TEMPLATE_DECL corresponding to a member ! function. */ tree unparsed_functions_queues; /* The number of classes whose definitions are currently in progress. */ unsigned num_classes_being_defined; *************** static tree cp_parser_single_declaration *** 1717,1727 **** static tree cp_parser_functional_cast PARAMS ((cp_parser *, tree)); static void cp_parser_late_parsing_for_member PARAMS ((cp_parser *, tree)); static void cp_parser_late_parsing_default_args ! (cp_parser *, tree, tree); static tree cp_parser_sizeof_operand PARAMS ((cp_parser *, enum rid)); static bool cp_parser_declares_only_class_p PARAMS ((cp_parser *)); static bool cp_parser_friend_p --- 1711,1721 ---- static tree cp_parser_functional_cast PARAMS ((cp_parser *, tree)); static void cp_parser_late_parsing_for_member PARAMS ((cp_parser *, tree)); static void cp_parser_late_parsing_default_args ! (cp_parser *, tree); static tree cp_parser_sizeof_operand PARAMS ((cp_parser *, enum rid)); static bool cp_parser_declares_only_class_p PARAMS ((cp_parser *)); static bool cp_parser_friend_p *************** cp_parser_new () *** 2490,2502 **** parser->in_unbraced_linkage_specification_p = false; /* We are not processing a declarator. */ parser->in_declarator_p = false; - /* There are no default args to process. */ - parser->default_arg_types = NULL; - /* The unparsed function queue is empty. */ parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE); /* There are no classes being defined. */ parser->num_classes_being_defined = 0; --- 2484,2493 ---- *************** cp_parser_function_definition (parser, f *** 11208,11218 **** /* We're done with the inline definition. */ finish_method (fn); /* Add FN to the queue of functions to be parsed later. */ TREE_VALUE (parser->unparsed_functions_queues) ! = tree_cons (current_class_type, fn, TREE_VALUE (parser->unparsed_functions_queues)); return fn; } --- 11199,11209 ---- /* We're done with the inline definition. */ finish_method (fn); /* Add FN to the queue of functions to be parsed later. */ TREE_VALUE (parser->unparsed_functions_queues) ! = tree_cons (NULL_TREE, fn, TREE_VALUE (parser->unparsed_functions_queues)); return fn; } *************** cp_parser_class_specifier (parser) *** 11660,11692 **** there is no need to delay the parsing of `A::B::f'. */ if (--parser->num_classes_being_defined == 0) { tree last_scope = NULL_TREE; - /* Process non FUNCTION_DECL related DEFAULT_ARGs. */ - for (parser->default_arg_types = nreverse (parser->default_arg_types); - parser->default_arg_types; - parser->default_arg_types = TREE_CHAIN (parser->default_arg_types)) - cp_parser_late_parsing_default_args - (parser, TREE_PURPOSE (parser->default_arg_types), NULL_TREE); - /* Reverse the queue, so that we process it in the order the functions were declared. */ TREE_VALUE (parser->unparsed_functions_queues) = nreverse (TREE_VALUE (parser->unparsed_functions_queues)); ! /* Loop through all of the functions. */ while (TREE_VALUE (parser->unparsed_functions_queues)) { - tree fn; - tree fn_scope; - tree queue_entry; - /* Figure out which function we need to process. */ queue_entry = TREE_VALUE (parser->unparsed_functions_queues); - fn_scope = TREE_PURPOSE (queue_entry); fn = TREE_VALUE (queue_entry); /* Parse the function. */ cp_parser_late_parsing_for_member (parser, fn); --- 11651,11698 ---- there is no need to delay the parsing of `A::B::f'. */ if (--parser->num_classes_being_defined == 0) { tree last_scope = NULL_TREE; + tree queue_entry; + tree fn; /* Reverse the queue, so that we process it in the order the functions were declared. */ TREE_VALUE (parser->unparsed_functions_queues) = nreverse (TREE_VALUE (parser->unparsed_functions_queues)); ! /* In a first pass, parse default arguments to the functions. ! Then, in a second pass, parse the bodies of the functions. ! This two-phased approach handles cases like: ! ! struct S { ! void f() { g(); } ! void g(int i = 3); ! }; ! ! */ ! for (queue_entry = TREE_VALUE (parser->unparsed_functions_queues); ! queue_entry; ! queue_entry = TREE_CHAIN (queue_entry)) ! { ! fn = TREE_VALUE (queue_entry); ! if (DECL_FUNCTION_TEMPLATE_P (fn)) ! fn = DECL_TEMPLATE_RESULT (fn); ! /* Make sure that any template parameters are in scope. */ ! maybe_begin_member_template_processing (fn); ! /* If there are default arguments that have not yet been processed, ! take care of them now. */ ! cp_parser_late_parsing_default_args (parser, fn); ! /* Remove any template parameters from the symbol table. */ ! maybe_end_member_template_processing (); ! } ! /* Now parse the body of the functions. */ while (TREE_VALUE (parser->unparsed_functions_queues)) { /* Figure out which function we need to process. */ queue_entry = TREE_VALUE (parser->unparsed_functions_queues); fn = TREE_VALUE (queue_entry); /* Parse the function. */ cp_parser_late_parsing_for_member (parser, fn); *************** cp_parser_member_declaration (parser) *** 12414,12424 **** /* If DECL is a function, we must return to parse it later. (Even though there is no definition, there might be default arguments that need handling.) */ if (TREE_CODE (decl) == FUNCTION_DECL) TREE_VALUE (parser->unparsed_functions_queues) ! = tree_cons (current_class_type, decl, TREE_VALUE (parser->unparsed_functions_queues)); } } } --- 12420,12430 ---- /* If DECL is a function, we must return to parse it later. (Even though there is no definition, there might be default arguments that need handling.) */ if (TREE_CODE (decl) == FUNCTION_DECL) TREE_VALUE (parser->unparsed_functions_queues) ! = tree_cons (NULL_TREE, decl, TREE_VALUE (parser->unparsed_functions_queues)); } } } *************** cp_parser_template_declaration_after_exp *** 14216,14226 **** arguments that need handling.) */ if (member_p && decl && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))) TREE_VALUE (parser->unparsed_functions_queues) ! = tree_cons (current_class_type, decl, TREE_VALUE (parser->unparsed_functions_queues)); } /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or `function-definition' sequence. MEMBER_P is true, this declaration --- 14222,14232 ---- arguments that need handling.) */ if (member_p && decl && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))) TREE_VALUE (parser->unparsed_functions_queues) ! = tree_cons (NULL_TREE, decl, TREE_VALUE (parser->unparsed_functions_queues)); } /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or `function-definition' sequence. MEMBER_P is true, this declaration *************** cp_parser_late_parsing_for_member (parse *** 14362,14378 **** = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues); /* Make sure that any template parameters are in scope. */ maybe_begin_member_template_processing (member_function); - /* If there are default arguments that have not yet been processed, - take care of them now. */ - cp_parser_late_parsing_default_args (parser, TREE_TYPE (member_function), - DECL_FUNCTION_MEMBER_P (member_function) - ? DECL_CONTEXT (member_function) - : NULL_TREE); - /* If the body of the function has not yet been parsed, parse it now. */ if (DECL_PENDING_INLINE_P (member_function)) { tree function_scope; --- 14368,14377 ---- *************** cp_parser_late_parsing_for_member (parse *** 14422,14445 **** /* Restore the queue. */ parser->unparsed_functions_queues = TREE_CHAIN (parser->unparsed_functions_queues); } ! /* TYPE is a FUNCTION_TYPE or METHOD_TYPE which contains a parameter ! with an unparsed DEFAULT_ARG. If non-NULL, SCOPE is the class in ! whose context name lookups in the default argument should occur. ! Parse the default args now. */ static void ! cp_parser_late_parsing_default_args (cp_parser *parser, tree type, tree scope) { cp_lexer *saved_lexer; cp_token_cache *tokens; bool saved_local_variables_forbidden_p; tree parameters; ! ! for (parameters = TYPE_ARG_TYPES (type); parameters; parameters = TREE_CHAIN (parameters)) { if (!TREE_PURPOSE (parameters) || TREE_CODE (TREE_PURPOSE (parameters)) != DEFAULT_ARG) --- 14421,14442 ---- /* Restore the queue. */ parser->unparsed_functions_queues = TREE_CHAIN (parser->unparsed_functions_queues); } ! /* FN is a FUNCTION_DECL which may contains a parameter with an ! unparsed DEFAULT_ARG. Parse the default args now. */ static void ! cp_parser_late_parsing_default_args (cp_parser *parser, tree fn) { cp_lexer *saved_lexer; cp_token_cache *tokens; bool saved_local_variables_forbidden_p; tree parameters; ! ! for (parameters = TYPE_ARG_TYPES (TREE_TYPE (fn)); parameters; parameters = TREE_CHAIN (parameters)) { if (!TREE_PURPOSE (parameters) || TREE_CODE (TREE_PURPOSE (parameters)) != DEFAULT_ARG) *************** cp_parser_late_parsing_default_args (cp_ *** 14459,14472 **** /* Local variable names (and the `this' keyword) may not appear in a default argument. */ saved_local_variables_forbidden_p = parser->local_variables_forbidden_p; parser->local_variables_forbidden_p = true; /* Parse the assignment-expression. */ ! if (scope) ! push_nested_class (scope, 1); TREE_PURPOSE (parameters) = cp_parser_assignment_expression (parser); ! if (scope) pop_nested_class (); /* Restore saved state. */ parser->lexer = saved_lexer; parser->local_variables_forbidden_p = saved_local_variables_forbidden_p; --- 14456,14469 ---- /* Local variable names (and the `this' keyword) may not appear in a default argument. */ saved_local_variables_forbidden_p = parser->local_variables_forbidden_p; parser->local_variables_forbidden_p = true; /* Parse the assignment-expression. */ ! if (DECL_CONTEXT (fn)) ! push_nested_class (DECL_CONTEXT (fn), 1); TREE_PURPOSE (parameters) = cp_parser_assignment_expression (parser); ! if (DECL_CONTEXT (fn)) pop_nested_class (); /* Restore saved state. */ parser->lexer = saved_lexer; parser->local_variables_forbidden_p = saved_local_variables_forbidden_p; *** /dev/null Thu Apr 11 07:25:15 2002 --- testsuite/g++.dg/parse/defarg3.C Mon Jan 6 12:30:37 2003 *************** *** 0 **** --- 1,5 ---- + struct A { + enum { value = 10 }; + A() { f(); } + static int f(int i=value); + }; From gcc-patches-return-75100-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 21:39:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17925 invoked by alias); 6 Jan 2003 21:39:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17918 invoked from network); 6 Jan 2003 21:39:52 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 6 Jan 2003 21:39:52 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id QAA20617; Mon, 6 Jan 2003 16:39:40 -0500 (EST) Date: Mon, 6 Jan 2003 16:39:40 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301062139.QAA20617@caip.rutgers.edu> To: neroden@twcny.rr.com Subject: Re: (patch) fix contrib/test_summary? Cc: gcc-patches@gcc.gnu.org References: <20030106204109.GA487@doctormoo> > From: Nathanael Nerode > > This seems to fix contrib/test_summary to work against new > config.status. I understand the script very poorly, so I have no idea > what else I've broken. Besides LAST_UPDATED, the test_summary script also used to include the configure flags used for the bootstrap but no longer does. If you look at the bottom of these reports, the flags are listed here: http://gcc.gnu.org/ml/gcc-testresults/2002-12/msg01236.html but not here: http://gcc.gnu.org/ml/gcc-testresults/2002-12/msg01247.html Does your patch fix this? If not, would you please fix this too? Thanks, --Kaveh -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75101-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 21:42:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18855 invoked by alias); 6 Jan 2003 21:42:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16381 invoked from network); 6 Jan 2003 21:37:03 -0000 Received: from unknown (HELO mms3.broadcom.com) (63.70.210.38) by 209.249.29.67 with SMTP; 6 Jan 2003 21:37:03 -0000 Received: from 63.70.210.1 by mms3.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Mon, 06 Jan 2003 13:35:18 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id NAA05157 for ; Mon, 6 Jan 2003 13:35:10 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h06LZCER017122 for ; Mon, 6 Jan 2003 13:35:12 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id NAA20464; Mon, 6 Jan 2003 13:35:07 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [applied mips patch] use EABI, not MEABI, for mipsisa32-elf. From: cgd@broadcom.com Date: 06 Jan 2003 13:35:07 -0800 Message-ID: Lines: 56 MIME-Version: 1.0 X-WSS-ID: 1207291C611354-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit MEABI doesn't work for 32-bit MIPS targets. For target mipsisa32-elf, a combined-tree build (incl. newlib/libgloss, binutils, gdb/sim, etc.) produces warnings and errors like: /projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/gcc/xgcc -B/projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/gcc/ -nostdinc -B/projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/mipsisa32-elf/el/newlib/ -isystem /projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/mipsisa32-elf/el/newlib/targ-include -isystem /home/cgd/proj/gcc-testing/combined/newlib/libc/include -B/home/cgd/proj/gcc-testing/work/mipsisa32-elf.install/mipsisa32-elf/bin/ -B/home/cgd/proj/gcc-testing/work/mipsisa32-elf.install/mipsisa32-elf/lib/ -isystem /home/cgd/proj/gcc-testing/work/mipsisa32-elf.install/mipsisa32-elf/include -L/projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/ld -EL -DPACKAGE=\"newlib\" -DVERSION=\"1.11.0\" -I. -I/home/cgd/proj/gcc-testing/combined/newlib/libm/math -I/home/cgd/proj/gcc-testing/combined/newlib/libm/math/../common -O2 -DMISSING_SYSCALL_NAMES -fno-builtin -O2 -g -O2 -EL -c /home/cgd/proj/gcc-testing/combined/newlib/libm/math/e_jn.c /tmp/ccWDM5yC.s: Assembler messages: /tmp/ccWDM5yC.s:228: Warning: Float register should be even, was 1 /tmp/ccWDM5yC.s:459: Warning: Float register should be even, was 3 /tmp/ccWDM5yC.s:544: Warning: Float register should be even, was 11 /projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/gcc/xgcc -B/projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/gcc/ -nostdinc -B/projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/mipsisa32-elf/el/newlib/ -isystem /projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/mipsisa32-elf/el/newlib/targ-include -isystem /home/cgd/proj/gcc-testing/combined/newlib/libc/include -B/home/cgd/proj/gcc-testing/work/mipsisa32-elf.install/mipsisa32-elf/bin/ -B/home/cgd/proj/gcc-testing/work/mipsisa32-elf.install/mipsisa32-elf/lib/ -isystem /home/cgd/proj/gcc-testing/work/mipsisa32-elf.install/mipsisa32-elf/include -L/projects/bbp_ext13/systems/users/cgd/proj/gcc-testing/work/mipsisa32-elf.build/ld -EL -DPACKAGE=\"newlib\" -DVERSION=\"1.11.0\" -I. -I/home/cgd/proj/gcc-testing/combined/newlib/libm/math -I/home/cgd/proj/gcc-testing/combined/newlib/libm/math/../common -O2 -DMISSING_SYSCALL_NAMES -fno-builtin -O2 -g -O2 -EL -c /home/cgd/proj/gcc-testing/combined/newlib/libm/math/er_lgamma.c /home/cgd/proj/gcc-testing/combined/newlib/libm/math/er_lgamma.c: In function `__ieee754_lgamma_r': /home/cgd/proj/gcc-testing/combined/newlib/libm/math/er_lgamma.c:309: error: insn does not satisfy its constraints: (insn 934 107 108 11 (nil) (set (reg:DF 34 $f2) (const_double:DF 0.0 [0x0.0p+0])) 185 {movdf_internal1} (nil) (nil)) /home/cgd/proj/gcc-testing/combined/newlib/libm/math/er_lgamma.c:309: internal compiler error: in reload_cse_simplify_operands, at reload1.c:8331 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. The patch below changes mipsisa32-elf to use EABI, which actually works. It's been pre-approved by Eric and I've committed it. He indicates that he plans to remove it eventually, since it wasn't ever in fact published. He said to say something along the lines of "preapproved in preparation for meabi removal." 8-) Tested by, uh, building for target mipsisa32-elf. cgd =================================================================== 2003-01-06 Chris Demetriou * config.gcc (mipsisa32-*-elf*, mipsisa32el-*-elf*): Default ABI to EABI. Index: config.gcc =================================================================== RCS file: /cvs/gcc/gcc/gcc/config.gcc,v retrieving revision 1.271 diff -u -p -r1.271 config.gcc --- config.gcc 4 Jan 2003 21:13:44 -0000 1.271 +++ config.gcc 6 Jan 2003 21:29:50 -0000 @@ -1830,7 +1830,7 @@ mips-*-ecoff* | mipsel-*-ecoff*) mipsisa32-*-elf* | mipsisa32el-*-elf*) tm_file="${tm_file} mips/elf.h" tmake_file=mips/t-isa3264 - tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_MEABI" + tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_EABI" ;; mipsisa64-*-elf* | mipsisa64el-*-elf*) tm_file="${tm_file} mips/elf.h" From gcc-patches-return-75102-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 21:46:48 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22090 invoked by alias); 6 Jan 2003 21:46:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19542 invoked from network); 6 Jan 2003 21:42:59 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 6 Jan 2003 21:42:59 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h06LglI20767 for ; Mon, 6 Jan 2003 13:42:47 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id for ; Mon, 6 Jan 2003 13:42:18 -0800 Received: from bothner.com (il0102b-dhcp93.apple.com [17.201.26.143]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h06Lgks24410 for ; Mon, 6 Jan 2003 13:42:46 -0800 (PST) Message-ID: <3E19F315.1070808@bothner.com> Date: Mon, 06 Jan 2003 13:20:21 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Gcc Patch List Subject: PATCH - remove 6 pointer fields from C's lang_identifier Content-Type: multipart/mixed; boundary="------------050404030903050801030701" This is a multi-part message in MIME format. --------------050404030903050801030701 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit This patch removes 6 pointer fields from C's lang_identifier, saving (ideally) 24 bytes per IDENTIFIER_NODE (on 32-bit systems). These 6 fields were used for various properties (such as IDENTIFIER_GLOBAL_VALUE), but most of the time at most one of these properties is non-null. In that case, we store the property in the unused 'chain' field, and specify which property is stored in the 'value_kind' bit-field of struct cpp_hashnode. If more than one property is non-null, we allocate an extension TREE_VEC. This patch is for C. I have a similar patch for C++ which depends on this patch. (With the latter patch I ended up allocating 0 extension words for a large C++ pre-processed file.) This is a follow-on this patch (which I got zero feedback on): http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00447.html Now that it actually makes a difference, I hope I'll get some response! -- --Per Bothner per@bothner.com http://www.bothner.com/per/ --------------050404030903050801030701 Content-Type: text/plain; name="c-ident.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="c-ident.patch" 2003-01-06 Per Bothner * cpplib.h (struct cpp_hashnode): New bitfield value_kind. * c-common.h (set_identifier_value): New declaration, (IDENTIFIER_FIELD_KIND, IDENTIFIER_FIELD_DIRECT, IDENTIFIER_FIELD, SET_IDENTIFIER_FIELD, IDENTIFIER_FIELD_INDIRECT): New macros. * c-common.c (set_identifier_value): New function. * c-tree.h (struct lang_identifier): Remove global_value, local_value, label_value, implicit_decl, error_locus, limbo_value fields. (IDENTIFIER_GLOBAL_INDEX, IDENTIFIER_LOCAL_INDEX, IDENTIFIER_LABEL_INDEX, IDENTIFIER_IMPLICIT_INDEX, IDENTIFIER_ERROR_INDEX, IDENTIFIER_LIMBO_INDEX, IDENTIFIER_EXTENSION_INDEX): New macros. (IDENTIFIER_GLOBAL_VALUE, IDENTIFIER_LOCAL_VALUE, IDENTIFIER_LABEL_VALUE, IDENTIFIER_LIMBO_VALUE, IDENTIFIER_IMPLICIT_DECL, IDENTIFIER_ERROR_LOCUS): Redefine to use IDENTIFIER_FIELD. (SET_IDENTIFIER_GLOBAL_VALUE, (SET_IDENTIFIER_LOCAL_VALUE, (SET_IDENTIFIER_LABEL_VALUE, (SET_IDENTIFIER_LIMBO_VALUE, (SET_IDENTIFIER_IMPLICIT_DECL, (SET_IDENTIFIER_ERROR_LOCUS): New macros - use SET_IDENTIFIER_FIELD. * c-decl (clear_limbo_values, poplevel, pop_label_level, pushdecl, implicitly_declare, lookup_label, shadow_label, define_label, store_parm_decls, c_pop_function_context): Use new macros. * c-typeck.c (build_external_ref): Likewise. * c-decl (pushdecl): Clear limbo_value *before* setting global_value, so we have fewer non-zero properties at once. Index: cpplib.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/cpplib.h,v retrieving revision 1.239 diff -u -p -r1.239 cpplib.h --- cpplib.h 1 Jan 2003 12:26:48 -0000 1.239 +++ cpplib.h 6 Jan 2003 21:10:29 -0000 @@ -480,7 +480,8 @@ struct cpp_hashnode then index into directive table. Otherwise, a NODE_OPERATOR. */ unsigned char rid_code; /* Rid code - for front ends. */ - ENUM_BITFIELD(node_type) type : 8; /* CPP node type. */ + unsigned int value_kind : 4; /* For front end. */ + ENUM_BITFIELD(node_type) type : 4; /* CPP node type. */ unsigned char flags; /* CPP flags. */ union _cpp_hashnode_value Index: c-common.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-common.h,v retrieving revision 1.165 diff -u -p -r1.165 c-common.h --- c-common.h 31 Dec 2002 17:34:17 -0000 1.165 +++ c-common.h 6 Jan 2003 21:10:30 -0000 @@ -315,6 +315,27 @@ extern tree gettags PARAMS ((void)); noreturn attribute. */ extern int (*lang_missing_noreturn_ok_p) PARAMS ((tree)); +/* Macros used to associate properties (such as IDENTIFIER_GLOBAL_VALUE) + with IDENTIFIER_NODEs. We assume that for most identifiers there will + zero or one property that is non-null. In that case, we store the + property directly in IDENTIFIER_FIELD_DIRECT, and IDENTIFIER_FIELD_KIND + is the number of the property. If we need more than one non-null property, + then we allocate a TREE_VEC store store the properties, and use + IDENTIFIER_FIELD_INDIRECT to access the property value. */ +#define IDENTIFIER_FIELD_KIND(NODE) \ + (((struct c_common_identifier *) (NODE))->node.value_kind) +#define IDENTIFIER_FIELD_DIRECT(NODE) ((NODE)->common.chain) +#define IDENTIFIER_FIELD_INDIRECT(NODE, INDEX) \ + TREE_VEC_ELT ((NODE)->common.chain, INDEX) +#define IDENTIFIER_FIELD(NODE, INDEX) \ + (IDENTIFIER_FIELD_KIND (NODE) == INDEX\ + ? IDENTIFIER_FIELD_DIRECT (NODE) \ + : IDENTIFIER_FIELD_KIND (NODE) == IDENTIFIER_EXTENSION_INDEX \ + ? IDENTIFIER_FIELD_INDIRECT (NODE, INDEX) \ + : NULL_TREE) +#define SET_IDENTIFIER_FIELD(NODE, INDEX, VALUE) \ + set_identifier_value (NODE, INDEX, IDENTIFIER_EXTENSION_INDEX, VALUE) +extern void set_identifier_value PARAMS ((tree, int,int, tree)); extern int yyparse PARAMS ((void)); extern void free_parser_stacks PARAMS ((void)); Index: c-common.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-common.c,v retrieving revision 1.395 diff -u -p -r1.395 c-common.c --- c-common.c 3 Jan 2003 19:29:47 -0000 1.395 +++ c-common.c 6 Jan 2003 21:10:34 -0000 @@ -6632,4 +6632,40 @@ check_function_arguments_recurse (callba (*callback) (ctx, param, param_num); } +/* Helper function used to implement the SET_IDENTIFIER_FIELD macro. + Set the property number VALUE_INDEX (out of max NUM_VALUES) in + the identifier ID to VALUE. + If there is only a single (non-null) property, it is stored directly + in IDENTIFIER_FIELD_DIRECT; otherwise, the latter points to a + TREE_VEC, and we store it in the element at index VALUE_INDEX. + The assumption is that we will only rarely need to do this. */ + +void +set_identifier_value (id, value_index, num_values, value) + tree id; + int value_index; + int num_values; + tree value; +{ + int cur_kind = IDENTIFIER_FIELD_KIND (id); + if (cur_kind == value_index) + IDENTIFIER_FIELD_DIRECT (id) = value; + else if (cur_kind == num_values) + IDENTIFIER_FIELD_INDIRECT (id, value_index) = value; + else if (IDENTIFIER_FIELD_DIRECT (id) == NULL_TREE) + { + IDENTIFIER_FIELD_KIND (id) = value_index; + IDENTIFIER_FIELD_DIRECT (id) = value; + } + else if (value != NULL_TREE) + { + tree tmp = IDENTIFIER_FIELD_DIRECT (id); + tree vec = make_tree_vec (num_values); + TREE_VEC_ELT (vec, cur_kind) = IDENTIFIER_FIELD_DIRECT (id); + TREE_VEC_ELT (vec, value_index) = value; + IDENTIFIER_FIELD_DIRECT (id) = vec; + IDENTIFIER_FIELD_KIND (id) = num_values; + } +} + #include "gt-c-common.h" Index: c-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-tree.h,v retrieving revision 1.109 diff -u -p -r1.109 c-tree.h --- c-tree.h 16 Sep 2002 18:33:18 -0000 1.109 +++ c-tree.h 6 Jan 2003 21:10:34 -0000 @@ -37,14 +37,16 @@ Software Foundation, 59 Temple Place - S struct lang_identifier GTY(()) { struct c_common_identifier common_id; - tree global_value; - tree local_value; - tree label_value; - tree implicit_decl; - tree error_locus; - tree limbo_value; }; +#define IDENTIFIER_GLOBAL_INDEX 0 +#define IDENTIFIER_LOCAL_INDEX 1 +#define IDENTIFIER_LABEL_INDEX 2 +#define IDENTIFIER_IMPLICIT_INDEX 3 +#define IDENTIFIER_ERROR_INDEX 4 +#define IDENTIFIER_LIMBO_INDEX 5 +#define IDENTIFIER_EXTENSION_INDEX 6 + /* The resulting tree type. */ union lang_tree_node @@ -74,28 +76,40 @@ struct lang_decl GTY(()) /* This represents the value which the identifier has in the file-scope namespace. */ #define IDENTIFIER_GLOBAL_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->global_value) + IDENTIFIER_FIELD (NODE, IDENTIFIER_GLOBAL_INDEX) +#define SET_IDENTIFIER_GLOBAL_VALUE(NODE, VALUE) \ + SET_IDENTIFIER_FIELD (NODE, IDENTIFIER_GLOBAL_INDEX, VALUE) /* This represents the value which the identifier has in the current scope. */ -#define IDENTIFIER_LOCAL_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->local_value) +#define IDENTIFIER_LOCAL_VALUE(NODE) \ + IDENTIFIER_FIELD (NODE, IDENTIFIER_LOCAL_INDEX) +#define SET_IDENTIFIER_LOCAL_VALUE(NODE, VALUE) \ + SET_IDENTIFIER_FIELD (NODE, IDENTIFIER_LOCAL_INDEX, VALUE) /* This represents the value which the identifier has as a label in the current label scope. */ #define IDENTIFIER_LABEL_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->label_value) + IDENTIFIER_FIELD (NODE, IDENTIFIER_LABEL_INDEX) +#define SET_IDENTIFIER_LABEL_VALUE(NODE, VALUE) \ + SET_IDENTIFIER_FIELD (NODE, IDENTIFIER_LABEL_INDEX, VALUE) /* This records the extern decl of this identifier, if it has had one at any point in this compilation. */ #define IDENTIFIER_LIMBO_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->limbo_value) + IDENTIFIER_FIELD (NODE, IDENTIFIER_LIMBO_INDEX) +#define SET_IDENTIFIER_LIMBO_VALUE(NODE, VALUE) \ + SET_IDENTIFIER_FIELD (NODE, IDENTIFIER_LIMBO_INDEX, VALUE) /* This records the implicit function decl of this identifier, if it has had one at any point in this compilation. */ #define IDENTIFIER_IMPLICIT_DECL(NODE) \ - (((struct lang_identifier *) (NODE))->implicit_decl) + IDENTIFIER_FIELD (NODE, IDENTIFIER_IMPLICIT_INDEX) +#define SET_IDENTIFIER_IMPLICIT_DECL(NODE, VALUE) \ + SET_IDENTIFIER_FIELD (NODE, IDENTIFIER_IMPLICIT_INDEX, VALUE) /* This is the last function in which we printed an "undefined variable" message for this identifier. Value is a FUNCTION_DECL or null. */ #define IDENTIFIER_ERROR_LOCUS(NODE) \ - (((struct lang_identifier *) (NODE))->error_locus) - + IDENTIFIER_FIELD (NODE, IDENTIFIER_ERROR_INDEX) +#define SET_IDENTIFIER_ERROR_LOCUS(NODE, VALUE) \ + SET_IDENTIFIER_FIELD (NODE, IDENTIFIER_ERROR_INDEX, VALUE) + /* In identifiers, C uses the following fields in a special way: TREE_PUBLIC to record that there was a previous local extern decl. TREE_USED to record that such a decl was used. Index: c-decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-decl.c,v retrieving revision 1.358 diff -u -p -r1.358 c-decl.c --- c-decl.c 3 Jan 2003 19:29:47 -0000 1.358 +++ c-decl.c 6 Jan 2003 21:10:38 -0000 @@ -467,7 +467,7 @@ clear_limbo_values (block) for (tem = BLOCK_VARS (block); tem; tem = TREE_CHAIN (tem)) if (DECL_NAME (tem) != 0) - IDENTIFIER_LIMBO_VALUE (DECL_NAME (tem)) = 0; + SET_IDENTIFIER_LIMBO_VALUE (DECL_NAME (tem), NULL_TREE); for (tem = BLOCK_SUBBLOCKS (block); tem; tem = TREE_CHAIN (tem)) clear_limbo_values (tem); @@ -606,7 +606,7 @@ poplevel (keep, reverse, functionbody) if (TREE_ADDRESSABLE (link)) TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1; } - IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0; + SET_IDENTIFIER_LOCAL_VALUE (DECL_NAME (link), NULL_TREE); } } @@ -614,7 +614,7 @@ poplevel (keep, reverse, functionbody) that were shadowed by this level. */ for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link)) - IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link); + SET_IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link), TREE_VALUE (link)); /* If the level being exited is the top level of a function, check over all the labels, and clear out the current @@ -648,7 +648,7 @@ poplevel (keep, reverse, functionbody) } else if (warn_unused_label && !TREE_USED (label)) warning_with_decl (label, "label `%s' defined but not used"); - IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0; + SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE); /* Put the labels into the "variables" of the top-level block, so debugger can see them. */ @@ -774,7 +774,7 @@ pop_label_level () else if (warn_unused_label && !TREE_USED (TREE_VALUE (link))) warning_with_decl (TREE_VALUE (link), "label `%s' defined but not used"); - IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) = 0; + SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)), NULL_TREE); /* Delete this element from the list. */ link = TREE_CHAIN (link); @@ -793,8 +793,8 @@ pop_label_level () /* Bring back all the labels that were shadowed. */ for (link = shadowed_labels; link; link = TREE_CHAIN (link)) if (DECL_NAME (TREE_VALUE (link)) != 0) - IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) - = TREE_VALUE (link); + SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)), + TREE_VALUE (link)); named_labels = chainon (named_labels, level->names); shadowed_labels = level->shadowed; @@ -1838,10 +1838,10 @@ pushdecl (x) if (IDENTIFIER_GLOBAL_VALUE (name) == 0 && TREE_PUBLIC (x)) TREE_PUBLIC (name) = 1; - IDENTIFIER_GLOBAL_VALUE (name) = x; - /* We no longer care about any previous block level declarations. */ - IDENTIFIER_LIMBO_VALUE (name) = 0; + SET_IDENTIFIER_LIMBO_VALUE (name, NULL_TREE); + + SET_IDENTIFIER_GLOBAL_VALUE (name, x); /* Don't forget if the function was used via an implicit decl. */ if (IDENTIFIER_IMPLICIT_DECL (name) @@ -1894,7 +1894,7 @@ pushdecl (x) tree oldlocal = IDENTIFIER_LOCAL_VALUE (name); tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name); - IDENTIFIER_LOCAL_VALUE (name) = x; + SET_IDENTIFIER_LOCAL_VALUE (name, x); /* If this is an extern function declaration, see if we have a global definition or declaration for the function. */ @@ -1972,7 +1972,7 @@ pushdecl (x) will have been set when the inline function was parsed. It also helps give slightly better warnings. */ if (IDENTIFIER_LIMBO_VALUE (name) == 0) - IDENTIFIER_LIMBO_VALUE (name) = x; + SET_IDENTIFIER_LIMBO_VALUE (name, x); } warn_if_shadowing (x, oldlocal); @@ -2057,7 +2057,7 @@ implicitly_declare (functionid) TREE_PUBLIC (decl) = 1; /* Record that we have an implicit decl and this is it. */ - IDENTIFIER_IMPLICIT_DECL (functionid) = decl; + SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl); /* ANSI standard says implicit declarations are in the innermost block. So we record the decl in the standard fashion. */ @@ -2200,7 +2200,7 @@ lookup_label (id) DECL_SOURCE_LINE (decl) = lineno; DECL_SOURCE_FILE (decl) = input_filename; - IDENTIFIER_LABEL_VALUE (id) = decl; + SET_IDENTIFIER_LABEL_VALUE (id, decl); named_labels = tree_cons (NULL_TREE, decl, named_labels); @@ -2239,7 +2239,8 @@ shadow_label (name) } shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels); - IDENTIFIER_LABEL_VALUE (name) = decl = 0; + decl = NULL_TREE; + SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE); } return lookup_label (name); @@ -2261,7 +2262,7 @@ define_label (filename, line, name) if (decl != 0 && DECL_CONTEXT (decl) != current_function_decl) { shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels); - IDENTIFIER_LABEL_VALUE (name) = 0; + SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE); decl = lookup_label (name); } @@ -5960,10 +5961,11 @@ store_parm_decls () for (decl = current_binding_level->names; decl; decl = TREE_CHAIN (decl)) if (DECL_NAME (decl)) - IDENTIFIER_LOCAL_VALUE (DECL_NAME (decl)) = 0; + SET_IDENTIFIER_LOCAL_VALUE (DECL_NAME (decl), NULL_TREE); for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link)) - IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link); + SET_IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link), + TREE_VALUE (link)); current_binding_level->names = 0; current_binding_level->shadowed = 0; } @@ -6725,8 +6727,8 @@ c_pop_function_context (f) /* Bring back all the labels that were shadowed. */ for (link = shadowed_labels; link; link = TREE_CHAIN (link)) if (DECL_NAME (TREE_VALUE (link)) != 0) - IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) - = TREE_VALUE (link); + SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)), + TREE_VALUE (link)); if (DECL_SAVED_INSNS (current_function_decl) == 0 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE) Index: c-typeck.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v retrieving revision 1.214 diff -u -p -r1.214 c-typeck.c --- c-typeck.c 16 Dec 2002 18:19:05 -0000 1.214 +++ c-typeck.c 6 Jan 2003 21:10:42 -0000 @@ -1424,8 +1424,8 @@ build_external_ref (id, fun) undeclared_variable_notice = 1; } } - IDENTIFIER_GLOBAL_VALUE (id) = error_mark_node; - IDENTIFIER_ERROR_LOCUS (id) = current_function_decl; + SET_IDENTIFIER_GLOBAL_VALUE (id, error_mark_node); + SET_IDENTIFIER_ERROR_LOCUS (id, current_function_decl); } return error_mark_node; } Index: tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree.h,v retrieving revision 1.371 diff -u -p -r1.371 tree.h --- tree.h 3 Jan 2003 16:41:23 -0000 1.371 +++ tree.h 6 Jan 2003 21:10:45 -0000 @@ -373,7 +373,8 @@ extern void tree_vec_elt_check_failed PA of the scope. Statement nodes for successive statements used to be chained together. Often lists of things are represented by TREE_LIST nodes that - are chained together. */ + are chained together. + Don't use TREE_CHAIN for IDENTIFIER_NODEs. */ #define TREE_CHAIN(NODE) ((NODE)->common.chain) --------------050404030903050801030701-- From gcc-patches-return-75103-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 21:55:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29665 invoked by alias); 6 Jan 2003 21:55:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29657 invoked from network); 6 Jan 2003 21:55:24 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 6 Jan 2003 21:55:24 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 7FAC33FAB; Mon, 6 Jan 2003 22:55:12 +0100 (CET) Date: Mon, 6 Jan 2003 22:55:12 +0100 From: Josef Zlomek To: Zack Weinberg Cc: gcc-patches@gcc.gnu.org Subject: Re: [rtlopt] speed improvement of branch prediction Message-ID: <20030106215512.GA2701@artax.karlin.mff.cuni.cz> References: <20030105164319.GA18624@artax.karlin.mff.cuni.cz> <877kdjo2in.fsf@egil.codesourcery.com> <20030106202916.GC26309@artax.karlin.mff.cuni.cz> <87lm1ydnfx.fsf@egil.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87lm1ydnfx.fsf@egil.codesourcery.com> User-Agent: Mutt/1.3.28i > Is it feasible to merge sreal.c into real.c and share some of the > code? I do not think so. Josef From gcc-patches-return-75104-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 22:09:46 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2226 invoked by alias); 6 Jan 2003 22:09:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1846 invoked from network); 6 Jan 2003 22:08:27 -0000 Received: from unknown (HELO vlsi1.ultra.nyu.edu) (128.122.140.213) by 209.249.29.67 with SMTP; 6 Jan 2003 22:08:27 -0000 Received: by vlsi1.ultra.nyu.edu (4.1/1.34) id AA12042; Mon, 6 Jan 03 17:10:33 EST Date: Mon, 6 Jan 03 17:10:33 EST From: kenner@vlsi1.ultra.nyu.edu (Richard Kenner) Message-Id: <10301062210.AA12042@vlsi1.ultra.nyu.edu> To: dje@watson.ibm.com Subject: Re: rs6000 fused multiply-add patch [+ patchlet] Cc: gcc-patches@gcc.gnu.org I don't think that anyone is objecting to the concept and the benefit. If I understand correctly, the patch violates the semantics of the combiner algorithm which requires a declining cost calculated as the number of instructions. Allowing combinations that do not decrease the cost would make the algorithm non-deterministic and possibly not converge, right? That's what I'm saying, yes. I'm out of the country right now with poor email access and will have more to say on this when I et bck in a few days. From gcc-patches-return-75105-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 22:22:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5471 invoked by alias); 6 Jan 2003 22:22:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5460 invoked from network); 6 Jan 2003 22:22:10 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 6 Jan 2003 22:22:10 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h06MLwI27823 for ; Mon, 6 Jan 2003 14:21:58 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id for ; Mon, 6 Jan 2003 14:21:30 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h06MLwf18978; Mon, 6 Jan 2003 14:21:58 -0800 (PST) Date: Mon, 6 Jan 2003 14:21:24 -0800 Subject: Patch: (darwin specific) add missing prototypes Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen To: gcc-patches@gcc.gnu.org From: Dale Johannesen Content-Transfer-Encoding: 7bit Message-Id: <3106BC3F-21C5-11D7-B860-000393D76DAA@apple.com> My last change omitted prototypes for the new section functions. Committing as obvious. 2003-01-06 Dale Johannesen * config/darwin-protos.h: Add prototypes for new section functions. Index: darwin-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/darwin-protos.h,v retrieving revision 1.18 diff -u -d -b -w -r1.18 darwin-protos.h --- darwin-protos.h 1 Jan 2003 20:39:10 -0000 1.18 +++ darwin-protos.h 6 Jan 2003 22:20:46 -0000 @@ -1,5 +1,5 @@ /* Prototypes. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -27,7 +27,9 @@ extern const char *machopic_stub_name PARAMS ((const char*)); extern void machopic_picsymbol_stub_section PARAMS ((void)); +extern void machopic_picsymbol_stub1_section PARAMS ((void)); extern void machopic_symbol_stub_section PARAMS ((void)); +extern void machopic_symbol_stub1_section PARAMS ((void)); extern void machopic_lazy_symbol_ptr_section PARAMS ((void)); extern void machopic_nl_symbol_ptr_section PARAMS ((void)); From gcc-patches-return-75106-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 22:49:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20965 invoked by alias); 6 Jan 2003 22:49:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20937 invoked from network); 6 Jan 2003 22:49:51 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 6 Jan 2003 22:49:51 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h06Mnc330438; Mon, 6 Jan 2003 17:49:38 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h06MncT290420; Mon, 6 Jan 2003 17:49:38 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id RAA21854; Mon, 6 Jan 2003 17:49:38 -0500 Message-Id: <200301062249.RAA21854@makai.watson.ibm.com> To: Geoff Keating cc: gcc-patches@gcc.gnu.org Subject: [RFC] Implement PowerPC thunks as RTL and enable everywhere Date: Mon, 06 Jan 2003 17:49:38 -0500 From: David Edelsohn I have re-written the PowerPC thunk implementation to generate RTL, as has been done on many other ports. This change also implements the vcall adjustment. The implementation cannot call gen_sibcall() directly because the expander creates a pseudo for the clobbered LR expecting reload to assign the register. The RTL-based thunk generator does not run register allocation, so this will not work. I created the RTL instruction directly with LR pre-allocated instead. I copied the machopic_indirect_call_target() magic, but I cannot test if it works correctly. Would you or someone at Apple please test this and let me know if you have a problem. Unless I hear an objection, I will commit this in a few days. Thanks, David * rs6000.h (FUNCTION_MODE): Always use SImode. * rs6000.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Redefine as hook_bool_tree_hwi_hwi_tree_true. (rs6000_output_mi_thunk): Re-implement as RTL. Index: rs6000.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.h,v retrieving revision 1.242 diff -c -p -r1.242 rs6000.h *** rs6000.h 1 Jan 2003 12:26:58 -0000 1.242 --- rs6000.h 6 Jan 2003 22:24:15 -0000 *** 2274,2280 **** /* Mode of a function address in a call instruction (for indexing purposes). Doesn't matter on RS/6000. */ ! #define FUNCTION_MODE (TARGET_32BIT ? SImode : DImode) /* Define this if addresses of constant functions shouldn't be put through pseudo regs where they can be cse'd. --- 2274,2280 ---- /* Mode of a function address in a call instruction (for indexing purposes). Doesn't matter on RS/6000. */ ! #define FUNCTION_MODE SImode /* Define this if addresses of constant functions shouldn't be put through pseudo regs where they can be cse'd. Index: rs6000.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.407 diff -c -p -r1.407 rs6000.c *** rs6000.c 3 Jan 2003 23:09:33 -0000 1.407 --- rs6000.c 6 Jan 2003 22:43:44 -0000 *************** static const char alt_reg_names[][8] = *** 384,395 **** #undef TARGET_ASM_OUTPUT_MI_THUNK #define TARGET_ASM_OUTPUT_MI_THUNK rs6000_output_mi_thunk - /* ??? Should work everywhere, but ask dje@watson.ibm.com before - enabling for AIX. */ - #if TARGET_OBJECT_FORMAT != OBJECT_XCOFF #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK ! #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall ! #endif #undef TARGET_FUNCTION_OK_FOR_SIBCALL #define TARGET_FUNCTION_OK_FOR_SIBCALL rs6000_function_ok_for_sibcall --- 396,403 ---- #undef TARGET_ASM_OUTPUT_MI_THUNK #define TARGET_ASM_OUTPUT_MI_THUNK rs6000_output_mi_thunk #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK ! #define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true #undef TARGET_FUNCTION_OK_FOR_SIBCALL #define TARGET_FUNCTION_OK_FOR_SIBCALL rs6000_function_ok_for_sibcall *************** rs6000_output_mi_thunk (file, thunk_fnde *** 11340,11498 **** FILE *file; tree thunk_fndecl ATTRIBUTE_UNUSED; HOST_WIDE_INT delta; ! HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED; tree function; { ! const char *this_reg = ! reg_names[ aggregate_value_p (TREE_TYPE (TREE_TYPE (function))) ? 4 : 3 ]; ! const char *prefix; ! const char *fname; ! const char *r0 = reg_names[0]; ! const char *toc = reg_names[2]; ! const char *schain = reg_names[11]; ! const char *r12 = reg_names[12]; ! char buf[512]; ! static int labelno = 0; ! ! /* Small constants that can be done by one add instruction. */ ! if (delta >= -32768 && delta <= 32767) ! { ! if (! TARGET_NEW_MNEMONICS) ! fprintf (file, "\tcal %s,%d(%s)\n", this_reg, (int) delta, this_reg); ! else ! fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, (int) delta); ! } ! /* 64-bit constants. If "int" is 32 bits, we'll never hit this abort. */ ! else if (TARGET_64BIT && (delta < -2147483647 - 1 || delta > 2147483647)) ! abort (); ! /* Large constants that can be done by one addis instruction. */ ! else if ((delta & 0xffff) == 0) ! asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg, ! (int) (delta >> 16)); ! /* 32-bit constants that can be done by an add and addis instruction. */ else ! { ! /* Break into two pieces, propagating the sign bit from the low ! word to the upper word. */ ! int delta_low = ((delta & 0xffff) ^ 0x8000) - 0x8000; ! int delta_high = (delta - delta_low) >> 16; ! ! asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg, ! delta_high); ! if (! TARGET_NEW_MNEMONICS) ! fprintf (file, "\tcal %s,%d(%s)\n", this_reg, delta_low, this_reg); ! else ! fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, delta_low); } ! /* Get the prefix in front of the names. */ ! switch (DEFAULT_ABI) { ! default: ! abort (); ! ! case ABI_AIX: ! prefix = "."; ! break; ! case ABI_V4: ! case ABI_AIX_NODESC: ! case ABI_DARWIN: ! prefix = ""; ! break; } ! /* If the function is compiled in this module, jump to it directly. ! Otherwise, load up its address and jump to it. */ ! ! fname = XSTR (XEXP (DECL_RTL (function), 0), 0); ! if (current_file_function_operand (XEXP (DECL_RTL (function), 0), VOIDmode) && (! lookup_attribute ("longcall", TYPE_ATTRIBUTES (TREE_TYPE (function))) || lookup_attribute ("shortcall", TYPE_ATTRIBUTES (TREE_TYPE (function))))) ! { ! fprintf (file, "\tb %s", prefix); ! assemble_name (file, fname); ! if (DEFAULT_ABI == ABI_V4 && flag_pic) fputs ("@local", file); ! putc ('\n', file); ! } ! ! else ! { ! switch (DEFAULT_ABI) ! { ! default: ! abort (); ! case ABI_AIX: ! /* Set up a TOC entry for the function. */ ! ASM_GENERATE_INTERNAL_LABEL (buf, "Lthunk", labelno); ! toc_section (); ! (*targetm.asm_out.internal_label) (file, "Lthunk", labelno); ! labelno++; ! ! if (TARGET_MINIMAL_TOC) ! fputs (TARGET_32BIT ? "\t.long " : DOUBLE_INT_ASM_OP, file); ! else ! { ! fputs ("\t.tc ", file); ! assemble_name (file, fname); ! fputs ("[TC],", file); ! } ! assemble_name (file, fname); ! putc ('\n', file); ! function_section (current_function_decl); ! if (TARGET_MINIMAL_TOC) ! asm_fprintf (file, (TARGET_32BIT) ! ? "\t{l|lwz} %s,%s(%s)\n" : "\tld %s,%s(%s)\n", r12, ! TARGET_ELF ? ".LCTOC0@toc" : ".LCTOC..1", toc); ! asm_fprintf (file, (TARGET_32BIT) ? "\t{l|lwz} %s," : "\tld %s,", r12); ! assemble_name (file, buf); ! if (TARGET_ELF && TARGET_MINIMAL_TOC) ! fputs ("-(.LCTOC1)", file); ! asm_fprintf (file, "(%s)\n", TARGET_MINIMAL_TOC ? r12 : toc); ! asm_fprintf (file, ! (TARGET_32BIT) ? "\t{l|lwz} %s,0(%s)\n" : "\tld %s,0(%s)\n", ! r0, r12); ! ! asm_fprintf (file, ! (TARGET_32BIT) ? "\t{l|lwz} %s,4(%s)\n" : "\tld %s,8(%s)\n", ! toc, r12); ! ! asm_fprintf (file, "\tmtctr %s\n", r0); ! asm_fprintf (file, ! (TARGET_32BIT) ? "\t{l|lwz} %s,8(%s)\n" : "\tld %s,16(%s)\n", ! schain, r12); ! ! asm_fprintf (file, "\tbctr\n"); ! break; ! ! case ABI_AIX_NODESC: ! case ABI_V4: ! fprintf (file, "\tb %s", prefix); ! assemble_name (file, fname); ! if (flag_pic) fputs ("@plt", file); ! putc ('\n', file); ! break; #if TARGET_MACHO ! case ABI_DARWIN: ! fprintf (file, "\tb %s", prefix); ! if (flag_pic && !machopic_name_defined_p (fname)) ! assemble_name (file, machopic_stub_name (fname)); ! else ! assemble_name (file, fname); ! putc ('\n', file); ! break; #endif ! } ! } } /* A quick summary of the various types of 'constant-pool tables' --- 11353,11451 ---- FILE *file; tree thunk_fndecl ATTRIBUTE_UNUSED; HOST_WIDE_INT delta; ! HOST_WIDE_INT vcall_offset; tree function; { ! rtx this, insn, funexp; ! reload_completed = 1; ! no_new_pseudos = 1; ! /* Mark the end of the (empty) prologue. */ ! emit_note (NULL, NOTE_INSN_PROLOGUE_END); ! /* Find the "this" pointer. If the function returns a structure, ! the structure return pointer is in r3. */ ! if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)))) ! this = gen_rtx_REG (Pmode, 4); else ! this = gen_rtx_REG (Pmode, 3); ! /* Apply the constant offset, if required. */ ! if (delta) ! { ! rtx delta_rtx = GEN_INT (delta); ! emit_insn (TARGET_32BIT ! ? gen_addsi3 (this, this, delta_rtx) ! : gen_adddi3 (this, this, delta_rtx)); } ! /* Apply the offset from the vtable, if required. */ ! if (vcall_offset) { ! rtx vcall_offset_rtx = GEN_INT (vcall_offset); ! rtx tmp = gen_rtx_REG (Pmode, 12); ! emit_move_insn (tmp, gen_rtx_MEM (Pmode, this)); ! emit_insn (TARGET_32BIT ! ? gen_addsi3 (tmp, tmp, vcall_offset_rtx) ! : gen_adddi3 (tmp, tmp, vcall_offset_rtx)); ! emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp)); ! emit_insn (TARGET_32BIT ! ? gen_addsi3 (this, this, tmp) ! : gen_adddi3 (this, this, tmp)); } ! /* Generate a tail call to the target function. */ ! if (!TREE_USED (function)) ! { ! assemble_external (function); ! TREE_USED (function) = 1; ! } ! funexp = XEXP (DECL_RTL (function), 0); ! SYMBOL_REF_FLAG (funexp) = 0; ! if (current_file_function_operand (funexp, VOIDmode) && (! lookup_attribute ("longcall", TYPE_ATTRIBUTES (TREE_TYPE (function))) || lookup_attribute ("shortcall", TYPE_ATTRIBUTES (TREE_TYPE (function))))) ! SYMBOL_REF_FLAG (funexp) = 1; ! funexp = gen_rtx_MEM (FUNCTION_MODE, funexp); #if TARGET_MACHO ! if (flag_pic) ! funexp = machopic_indirect_call_target (funexp); #endif ! ! /* gen_sibcall expects reload to convert scratch pseudo to LR so we must ! generate sibcall RTL explicitly to avoid constraint abort. */ ! insn = emit_call_insn ( ! gen_rtx_PARALLEL (VOIDmode, ! gen_rtvec (4, ! gen_rtx_CALL (VOIDmode, ! funexp, const0_rtx), ! gen_rtx_USE (VOIDmode, const0_rtx), ! gen_rtx_USE (VOIDmode, ! gen_rtx_REG (SImode, ! LINK_REGISTER_REGNUM)), ! gen_rtx_RETURN (VOIDmode)))); ! SIBLING_CALL_P (insn) = 1; ! emit_barrier (); ! ! /* Run just enough of rest_of_compilation to get the insns emitted. ! There's not really enough bulk here to make other passes such as ! instruction scheduling worth while. Note that use_thunk calls ! assemble_start_function and assemble_end_function. */ ! insn = get_insns (); ! shorten_branches (insn); ! final_start_function (insn, file, 1); ! final (insn, file, 1, 0); ! final_end_function (); ! ! reload_completed = 0; ! no_new_pseudos = 0; } /* A quick summary of the various types of 'constant-pool tables' From gcc-patches-return-75107-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 22:58:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31477 invoked by alias); 6 Jan 2003 22:58:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31464 invoked from network); 6 Jan 2003 22:58:06 -0000 Received: from unknown (HELO e31.co.us.ibm.com) (32.97.110.129) by 209.249.29.67 with SMTP; 6 Jan 2003 22:58:06 -0000 Received: from westrelay03.boulder.ibm.com (westrelay03.boulder.ibm.com [9.17.194.24]) by e31.co.us.ibm.com (8.12.2/8.12.2) with ESMTP id h06MvsSv061962 for ; Mon, 6 Jan 2003 17:57:54 -0500 Received: from dyn9-47-17-68.beaverton.ibm.com (dyn9-47-17-68.beaverton.ibm.com [9.47.17.68]) by westrelay03.boulder.ibm.com (8.12.3/NCO/VER6.4) with ESMTP id h06Mvr1U057602 for ; Mon, 6 Jan 2003 15:57:54 -0700 Received: (from janis@localhost) by dyn9-47-17-68.beaverton.ibm.com (8.9.3/8.9.3) id PAA10291 for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 15:00:35 -0800 Date: Mon, 6 Jan 2003 15:00:35 -0800 From: Janis Johnson To: gcc-patches@gcc.gnu.org Subject: [WWW] new info about locating regressions Message-ID: <20030106150035.A7422@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i I'm planning to make these changes to the web page about locating regressions. It includes a couple of things that Gerald had asked me to fix, plus new things I noticed in recent hunts. There's now a stronger recommendation to use rsync for the repository used for the hunts. Janis Index: reghunt-howto.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/reghunt-howto.html,v retrieving revision 1.3 diff -u -r1.3 reghunt-howto.html --- reghunt-howto.html 23 Dec 2002 17:23:22 -0000 1.3 +++ reghunt-howto.html 6 Jan 2003 21:06:58 -0000 @@ -42,10 +42,10 @@ while the range is too large to investigate by hand:

    @@ -56,13 +56,13 @@ Janis Johnson). There are several short cuts that can be used to shorten the elapsed time of the search.

    -

    Eventually you'll need to identify the patch +

    Eventually you'll need to identify the patch and verify that it causes the behavior of the test to change.

    There are a variety of problems you might encounter, but many of them are simple to work around.

    -

    Get GCC sources

    +

    Get GCC sources

    Get a local CVS tree using the cvs instructions. Use a read-only tree that is separate from what you use for development or @@ -70,12 +70,16 @@

    rsync

    -

    You'll be checking out the local tree used for the regression search -over and over again. If you've got enough disk space, either on the test -system or on a machine to which it has fast access, it's much quicker to -get a local copy of the GCC CVS repository using rsync by following the -rsync instructions. Besides being quicker, it -doesn't affect other GCC developers who are using the real repository.

    +

    Using rsync to get a local copy of the GCC CVS repository is highly +recommended for regression hunts. You'll be checking out the tree used +for the regression search over and over again and won't want to affect +access times for other GCC developers who are using the real repository, +and it will also be faster for you.

    + +

    Follow the rsync instructions. The full tree +takes a lot of disk space, but it's possible to exclude directories you +won't need for your hunt. If you're already using rsync, see the +short cuts below for making a smaller copy.

    CVS mainline

    @@ -123,7 +127,7 @@ Further updates that use the previous date and a new date sometimes run into problems, with a few files not being updated correctly.

    -

    Build GCC

    +

    Build GCC

    The kind of bug you are investigating will determine what kind of build is required for testing GCC on a particular date. In almost @@ -154,7 +158,7 @@ cc1plus -quiet testcase.ii -

    Run the test

    +

    Run the test

    Assuming that there is a self-contained test for the bug, as there usually is for bugs reported via GNATS, write a small script to run it @@ -165,13 +169,19 @@

    Hints for coming up with a self-contained test is beyond the scope of this document.

    -

    Identify the patch

    +

    Identify the patch

    -

    Differences in the ChangeLog files will let you identify files that -have changed. If it's a small enough set you can guess which patch -might have caused the regression and update only the files changed -by that patch. Remember to look at all ChangeLogs that might list -relevant changes, not just the obvious ones.

    +

    Differences in the ChangeLog files can help you identify files that +have changed, although you must keep in mind that CVS checkins are not +atomic and ChangeLog diffs between two dates are not always an accurate +reflection of changes to other files. If the set of changes is small +enough you can guess which patch might have caused the regression and +update only the files changed by that patch. Remember to look at all +ChangeLogs that might list relevant changes, not just the obvious ones. +To get an accurate list of files that changed betwen two times, do a +CVS update to the first date and then a CVS update to the second date, +and look for lines in the output from the second update that begin +with "U ".

    The following CVS commands can help you identify changes from one version of a file to another:

    @@ -210,7 +220,9 @@

    Before building a compiler after updating the sources, check that the new sources are different from the sources for the current ends of the range. If not, make this new date one of the endpoints without -doing the build and running the test.

    +doing the build and running the test. Since CVS checkins are not +atomic, you can't rely on ChangeLog differences to reflect actual +differences to other files.

    When you first use rsync you can exclude directories for components that you know you won't be building. If you're already using a local @@ -254,8 +266,48 @@

    If a test causes the compiler or the compiled test program to hang, run it from a csh or tcsh script using -limit cputime mm:ss so it will fail if it requires -more than the amount of time you specified.

    +limit cputime mm:ss so it will fail if it +requires more than the amount of time you specified. The same technique +can be used to limit other resources, including memory.

    + +

    Latent bugs can become apparent due to to small changes in code sizes +or data layout. Test failures for these bugs can be intermittent, +leading to randomness in a binary search for the patch that introduced +the bug. This makes it important to see if the patch resulting from a +regression hunt looks as if it's actually related to the bug. For +example, if a search on i686-pc-linux-gnu comes up with a +change to an unrelated target, you're probably looking for such a bug.

    + +

    Branch and release dates

    + +

    If no one has provided a range of dates for when a particular +mainline regression appeared, you can narrow the search by knowing in +which release it first appeared and then testing the mainline between +the branchpoint for that release and the branchpoint for the previous +release that does not have the bug. Here are some dates for major CVS +milestones.

    + +
    Class libgcj Classpath Merge Status
    java.awt.List Yes Yes Diff
    java.awt.Toolkit Yes Yes Diff
    java.io.DataOutputStream Yes Yes No
    java.io.FileDescriptor Yes Yes No
    java.io.LineNumberReader Yes Yes No
    java.io.ObjectInputStream Yes Yes Diff
    java.io.ObjectOutputStream Yes Yes Diff
    java.io.ObjectStreamClass Yes Yes Diff
    java.io.ObjectStreamField Yes Yes Diff
    java.io.OutputStreamWriter Yes Yes No
    java.io.PrintStream Yes Yes No
    java.lang.VMThrowable Yes No Yes
    java.lang.Win32Process Yes No No
    java.net.DatagramSocket Yes Yes No
    java.net.HttpURLConnection Yes Yes Diff
    java.net.InetAddress Yes Yes No
    java.net.JarURLConnection Yes Yes No
    java.net.MimeTypeMapper No Yes No
    java.util.prefs.PreferencesFactory No Yes No
    java.util.prefs.Preferences No Yes No
    java.util.ResourceBundle Yes Yes Diff
    java.util.TreeMap Yes Yes Diff
    java.util.zip.DeflaterConstants No Yes No
    java.util.zip.DeflaterEngine No Yes No
    java.util.zip.DeflaterHuffman No Yes No
    + + + + + + + + + + + + + + + + + + +
    tagadded on this date
    gcc-3_3-branchpoint2002-12-13
    gcc-3_2-branchpoint2002-07-26 + (from gcc-3_1-branch, not from mainline)
    gcc-3_1-branchpoint2002-02-25
    gcc-3_0-branchpoint2001-02-12
    gcc-2_95-branchpoint1999-05-18
    From gcc-patches-return-75108-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 22:58:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32098 invoked by alias); 6 Jan 2003 22:58:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32082 invoked from network); 6 Jan 2003 22:58:44 -0000 Received: from unknown (HELO mail.libertysurf.net) (213.36.80.91) by 209.249.29.67 with SMTP; 6 Jan 2003 22:58:44 -0000 Received: from localhost.localdomain (212.83.141.54) by mail.libertysurf.net (6.5.026) id 3DE4935E0056C014 for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 23:58:33 +0100 Content-Type: text/plain; charset="us-ascii" From: Eric Botcazou To: gcc-patches@gcc.gnu.org Subject: 3 pending patches from 2002 Date: Mon, 6 Jan 2003 23:56:50 +0100 User-Agent: KMail/1.4.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200301062355.37371.ebotcazou@libertysurf.fr> Hi, 3 patches for high-priority PRs (regressions) are awaiting evaluation: PR optimization/7675: http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00336.html As Richard pointed out, it's only an ad hoc patch. But, given that the ri= ght=20 fix will not likely be suited to the 3.2 and 3.3 branches, should we wait= =20 until 3.4 to fix the bug ? PR c/8032: http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01636.html Probably not worth applying on the 3.2 branch. PR inline-asm/8832: (former optimization/8832): http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00721.html Same thing. --=20 Eric Botcazou, desperately trying to keep the number of high-priority PR=20 below 100 ;-) From gcc-patches-return-75109-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 23:01:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2562 invoked by alias); 6 Jan 2003 23:01:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2532 invoked from network); 6 Jan 2003 23:01:12 -0000 Received: from unknown (HELO dorothy.sfbay.redhat.com) (12.150.115.200) by 209.249.29.67 with SMTP; 6 Jan 2003 23:01:12 -0000 Received: (from rth@localhost) by dorothy.sfbay.redhat.com (8.11.6/8.11.6) id h06N10p11694 for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 15:01:00 -0800 X-Authentication-Warning: dorothy.sfbay.redhat.com: rth set sender to rth@redhat.com using -f Date: Mon, 6 Jan 2003 15:01:00 -0800 From: Richard Henderson To: gcc-patches@gcc.gnu.org Subject: fix alpha glibc build Message-ID: <20030106150100.A11687@redhat.com> Mail-Followup-To: Richard Henderson , gcc-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i We failed to frob the string properly, and so wound up emitting "%T__libc_res" to the assembly file. Oops. r~ * config/alpha/alpha.c (alpha_encode_section_info): Adjust symbol_str properly when changing "local-ness". * config/alpha/alpha.md (movdi_er_high_g): Allow all symbols. * gcc.dg/tls/alias-1.c: New. Index: gcc/config/alpha/alpha.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.c,v retrieving revision 1.284 diff -c -p -d -u -r1.284 alpha.c --- gcc/config/alpha/alpha.c 20 Dec 2002 19:42:40 -0000 1.284 +++ gcc/config/alpha/alpha.c 6 Jan 2003 22:55:10 -0000 @@ -1974,18 +1974,22 @@ alpha_encode_section_info (decl, first) { char *newstr; size_t len; + char want_prefix = (is_local ? '@' : '%'); + char other_prefix = (is_local ? '%' : '@'); - if (symbol_str[0] == (is_local ? '@' : '%')) + if (symbol_str[0] == want_prefix) { if (symbol_str[1] == encoding) return; symbol_str += 2; } + else if (symbol_str[0] == other_prefix) + symbol_str += 2; len = strlen (symbol_str) + 1; newstr = alloca (len + 2); - newstr[0] = (is_local ? '@' : '%'); + newstr[0] = want_prefix; newstr[1] = encoding; memcpy (newstr + 2, symbol_str, len); Index: gcc/config/alpha/alpha.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.md,v retrieving revision 1.201 diff -c -p -d -u -r1.201 alpha.md --- gcc/config/alpha/alpha.md 20 Dec 2002 19:42:41 -0000 1.201 +++ gcc/config/alpha/alpha.md 6 Jan 2003 22:55:10 -0000 @@ -5330,10 +5330,12 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi [(match_dup 0)] "operands[0] = split_small_symbolic_operand (operands[0]);") +;; Accepts any symbolic, not just global, since function calls that +;; don't go via bsr still use !literal in hopes of linker relaxation. (define_insn "movdi_er_high_g" [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DI 1 "register_operand" "r") - (match_operand:DI 2 "global_symbolic_operand" "") + (match_operand:DI 2 "symbolic_operand" "") (match_operand 3 "const_int_operand" "")] UNSPEC_LITERAL))] "TARGET_EXPLICIT_RELOCS" Index: gcc/testsuite/gcc.dg/tls/alias-1.c =================================================================== RCS file: gcc/testsuite/gcc.dg/tls/alias-1.c diff -N gcc/testsuite/gcc.dg/tls/alias-1.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gcc/testsuite/gcc.dg/tls/alias-1.c 6 Jan 2003 22:55:14 -0000 @@ -0,0 +1,21 @@ +/* { dg-do link } */ +/* Test that encode_section_info handles the change from externally + defined to locally defined (via hidden). Extracted from glibc. */ + +struct __res_state { + char x[123]; +}; + +extern __thread struct __res_state bar + __attribute__ ((tls_model ("initial-exec"))); + +int main() +{ + bar.x[0] = 0; + return 0; +} + +__thread struct __res_state foo; +extern __thread struct __res_state bar + __attribute__ ((alias ("foo"))) + __attribute__ ((visibility ("hidden"))); From gcc-patches-return-75110-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 23:09:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9441 invoked by alias); 6 Jan 2003 23:09:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9427 invoked from network); 6 Jan 2003 23:09:06 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 6 Jan 2003 23:09:06 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18VgMN-00083z-00; Mon, 06 Jan 2003 23:08:43 +0000 Date: Mon, 6 Jan 2003 23:08:43 +0000 From: Neil Booth To: Per Bothner Cc: Gcc Patch List Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier Message-ID: <20030106230843.GA30910@daikokuya.co.uk> References: <3E19F315.1070808@bothner.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E19F315.1070808@bothner.com> User-Agent: Mutt/1.4i Per Bothner wrote:- > This patch removes 6 pointer fields from C's lang_identifier, > saving (ideally) 24 bytes per IDENTIFIER_NODE (on 32-bit systems). Wow! This *must* speed up a bootstrap, and have an effect on memory consumption (and therefore how often we GC). Please let us know how much. > +#define IDENTIFIER_FIELD(NODE, INDEX) \ > + (IDENTIFIER_FIELD_KIND (NODE) == INDEX\ > + ? IDENTIFIER_FIELD_DIRECT (NODE) \ > + : IDENTIFIER_FIELD_KIND (NODE) == IDENTIFIER_EXTENSION_INDEX \ > + ? IDENTIFIER_FIELD_INDIRECT (NODE, INDEX) \ > + : NULL_TREE) Mightn't that be nicer in a true function? I think such things are not worth "inlining". Well done, Neil. From gcc-patches-return-75111-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 23:21:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16275 invoked by alias); 6 Jan 2003 23:21:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16267 invoked from network); 6 Jan 2003 23:21:02 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 6 Jan 2003 23:21:02 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h06NKmE03157; Mon, 6 Jan 2003 15:20:48 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: David Edelsohn Cc: kenner@vlsi1.ultra.nyu.edu (Richard Kenner), segher@koffie.nl, gcc-patches@gcc.gnu.org Subject: Re: rs6000 fused multiply-add patch [+ patchlet] References: <87n0mfgozb.fsf@egil.codesourcery.com> <200301060224.VAA24602@makai.watson.ibm.com> From: Geoff Keating Date: 06 Jan 2003 15:20:48 -0800 In-Reply-To: <200301060224.VAA24602@makai.watson.ibm.com> Message-ID: Lines: 28 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii David Edelsohn writes: > I don't think that anyone is objecting to the concept and the > benefit. If I understand correctly, the patch violates the semantics of > the combiner algorithm which requires a declining cost calculated as the > number of instructions. Allowing combinations that do not decrease the > cost would make the algorithm non-deterministic and possibly not converge, > right? It could also cause combine to perform a de-optimisation. Now, its default behaivour is to leave the original code alone, which at least allows the user to try to obtain the best code sequence. The difficulty I have with this patch is the justification for it. It's not claimed that the change in the RTL itself improves performance, but that because of other limitations in combine, the change allows other changes that improve performance; and this example is used as justification for allowing a whole class of changes only one of which is the one that has been justified. No analysis has been made of the impact of this patch on compile speed, no analysis has been made of the impact of the patch on compiled code performance on other architectures, only limited analysis has been made of compiled code performance on powerpc, and there is no sound theoretical foundation for the patch. -- - Geoffrey Keating From gcc-patches-return-75112-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 23:31:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18860 invoked by alias); 6 Jan 2003 23:30:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18211 invoked from network); 6 Jan 2003 23:25:54 -0000 Received: from unknown (HELO mms1.broadcom.com) (63.70.210.58) by 209.249.29.67 with SMTP; 6 Jan 2003 23:25:54 -0000 Received: from 63.70.210.1 by mms1.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Mon, 06 Jan 2003 15:25:15 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id PAA25756; Mon, 6 Jan 2003 15:25:33 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h06NPZER019322; Mon, 6 Jan 2003 15:25:35 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id PAA21280; Mon, 6 Jan 2003 15:25:30 -0800 (PST) To: gcc-patches@gcc.gnu.org cc: echristo@redhat.com Subject: [mips patch rfa] Add MIPS32 Release 2 support. From: cgd@broadcom.com Date: 06 Jan 2003 15:25:30 -0800 Message-ID: Lines: 557 MIME-Version: 1.0 X-WSS-ID: 1204CFD1672198-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit The patch below adds support for MIPS32 Release 2 (mips32r2) support to GCC. This patch does not include support for the new "ins" and "ext" instructions, because, well, i tried and failed and now i'm hoping to convince Eric to do it for me. 8-) Tested using C language only (check-gcc, i.e., no g++, etc.), using a combined-tree build including latest binutils and newlib and sim, for targets: * mipsisa32-elf: verified no change in testsuite results. * mipsisa32r2-elf: * without related sim changes, verified no change in testsuite results compared to mipsisa32-elf other than those caused by generating the new instructions (rotates, plus seb and seh). I.e., verified that the new instructions are getting used and that tests which don't use them don't now fail. * with related sim changes, verified no change compared to mipsisa32-elf. I.e., when the new instructions do exist, things work as expected. 8-) cgd -- 2003-01-06 Chris Demetriou * config.gcc (mipsisa32r2-*-elf*, mipsisa32r2el-*-elf*): New targets, to support MIPS32 Release 2 (MIPS32R2) configurations. * config/mips/mips.h (enum processor_type): Rename PROCESSOR_R4KC to PROCESSOR_4KC, PROCESSOR_R5KC to PROCESSOR_5KC, and PROCESSOR_R20KC to PROCESSOR_20KC. Add PROCESSOR_M4K. (TARGET_MIPS4KC, TARGET_MIPS5KC): Update for the renaming. (ISA_MIPS32R2): New define. (TARGET_CPU_CPP_BUILTINS, GENERATE_MULT3_SI, ISA_HAS_CONDMOVE) (ISA_HAS_8CC, ISA_HAS_MADD_MSUB, ISA_HAS_CLZ_CLO) (ISA_HAS_PREFETCH): Add support for MIPS32R2. (MIPS_ISA_DEFAULT): Likewise. Also, fix indentation. (ISA_HAS_ROTR_SI): Add support for MIPS32R2, and avoid if compiling MIPS16 code. (ISA_HAS_ROTR_DI): Do not use if compiling MIPS16 code, and fix comment. (ISA_HAS_ALU32R2): New define. (ASM_SPEC, LINK_SPEC): Pass -mips32r2 to assembler and linker. * config/mips/mips.c (mips_cpu_info_table): Adjust for enum processor_type value renaming. Add support for MIPS32R2. Clean up comments, and move "sb1" entry with other MIPS64 CPU entries. (override_options): Avoid branch-likely instructions on MIPS32R2. * config/mips/mips.md (mulsi3_mult3): Add support for MIPS32R2. (extendhisi2): Use extendhisi2_hw if ISA_HAS_ALU32R2. (extendqisi2): Use extendqisi2_hw if ISA_HAS_ALU32R2. (extendhisi2_hw, extendqisi2_hw): New. * config/mips/netbsd.h (TARGET_CPU_CPP_BUILTINS): Add support for MIPS32R2. (LINK_SPEC): Pass -mips32r2 to linker. * config/mips/t-isa3264: Built -mips32r2 multilibs. * doc/invoke.texi (MIPS Options): Add -mips32r2, add support for mips32r2 in the -march description. Alphabetically sort CPU names in the -march description. Add long-missed -mips32 and -mips64 to MIPS option summary. * config.gcc: Update copyright years to include 2003. * config/mips/mips.c: Likewise. * config/mips/mips.h: Likewise. * config/mips/mips.md: Likewise. * config/mips/netbsd.h: Likewise. * doc/invoke.texi: Likewise. Index: config.gcc =================================================================== RCS file: /cvs/gcc/gcc/gcc/config.gcc,v retrieving revision 1.272 diff -u -p -r1.272 config.gcc --- config.gcc 6 Jan 2003 21:35:22 -0000 1.272 +++ config.gcc 6 Jan 2003 23:19:12 -0000 @@ -1,5 +1,5 @@ # GCC build-, host- and target-specific configuration file. -# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. #This file is part of GCC. @@ -1831,6 +1831,11 @@ mipsisa32-*-elf* | mipsisa32el-*-elf*) tm_file="${tm_file} mips/elf.h" tmake_file=mips/t-isa3264 tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_EABI" + ;; +mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*) + tm_file="${tm_file} mips/elf.h" + tmake_file=mips/t-isa3264 + tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_EABI" ;; mipsisa64-*-elf* | mipsisa64el-*-elf*) tm_file="${tm_file} mips/elf.h" Index: config/mips/mips.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v retrieving revision 1.243 diff -u -p -r1.243 mips.c --- config/mips/mips.c 20 Dec 2002 04:30:51 -0000 1.243 +++ config/mips/mips.c 6 Jan 2003 23:19:14 -0000 @@ -1,6 +1,6 @@ /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -583,8 +583,9 @@ const struct mips_cpu_info mips_cpu_info { "mips2", PROCESSOR_R6000, 2 }, { "mips3", PROCESSOR_R4000, 3 }, { "mips4", PROCESSOR_R8000, 4 }, - { "mips32", PROCESSOR_R4KC, 32 }, - { "mips64", PROCESSOR_R5KC, 64 }, + { "mips32", PROCESSOR_4KC, 32 }, + { "mips32r2", PROCESSOR_M4K, 33 }, + { "mips64", PROCESSOR_5KC, 64 }, /* MIPS I */ { "r3000", PROCESSOR_R3000, 1 }, @@ -611,18 +612,18 @@ const struct mips_cpu_info mips_cpu_info { "vr5400", PROCESSOR_R5400, 4 }, { "vr5500", PROCESSOR_R5500, 4 }, - - /* MIPS 32 */ - { "4kc", PROCESSOR_R4KC, 32 }, - { "4kp", PROCESSOR_R4KC, 32 }, /* = 4kc */ - - /* MIPS 64 */ - { "5kc", PROCESSOR_R5KC, 64 }, - { "20kc", PROCESSOR_R20KC, 64 }, - { "sr71000", PROCESSOR_SR71000, 64 }, - - /* Broadcom SB-1 CPU core */ + /* MIPS32 */ + { "4kc", PROCESSOR_4KC, 32 }, + { "4kp", PROCESSOR_4KC, 32 }, /* = 4kc */ + + /* MIPS32 Release 2 */ + { "m4k", PROCESSOR_M4K, 33 }, + + /* MIPS64 */ + { "5kc", PROCESSOR_5KC, 64 }, + { "20kc", PROCESSOR_20KC, 64 }, { "sb1", PROCESSOR_SB1, 64 }, + { "sr71000", PROCESSOR_SR71000, 64 }, /* End marker */ { 0, 0, 0 } @@ -5268,7 +5269,7 @@ override_options () of the [MIPS32 and MIPS64] architecture." Therefore, we do not issue those instructions unless instructed to do so by -mbranch-likely. */ - if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS64)) + if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64)) target_flags |= MASK_BRANCHLIKELY; else target_flags &= ~MASK_BRANCHLIKELY; Index: config/mips/mips.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v retrieving revision 1.229 diff -u -p -r1.229 mips.h --- config/mips/mips.h 16 Dec 2002 22:45:40 -0000 1.229 +++ config/mips/mips.h 6 Jan 2003 23:19:15 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and @@ -72,9 +72,10 @@ enum processor_type { PROCESSOR_R5400, PROCESSOR_R5500, PROCESSOR_R8000, - PROCESSOR_R4KC, - PROCESSOR_R5KC, - PROCESSOR_R20KC, + PROCESSOR_4KC, + PROCESSOR_5KC, + PROCESSOR_20KC, + PROCESSOR_M4K, PROCESSOR_SR71000, PROCESSOR_SB1 }; @@ -351,6 +352,7 @@ extern void sbss_section PARAMS ((void) #define ISA_MIPS3 (mips_isa == 3) #define ISA_MIPS4 (mips_isa == 4) #define ISA_MIPS32 (mips_isa == 32) +#define ISA_MIPS32R2 (mips_isa == 33) #define ISA_MIPS64 (mips_isa == 64) /* Architecture target defines. */ @@ -359,8 +361,8 @@ extern void sbss_section PARAMS ((void) #define TARGET_MIPS4100 (mips_arch == PROCESSOR_R4100) #define TARGET_MIPS4120 (mips_arch == PROCESSOR_R4120) #define TARGET_MIPS4300 (mips_arch == PROCESSOR_R4300) -#define TARGET_MIPS4KC (mips_arch == PROCESSOR_R4KC) -#define TARGET_MIPS5KC (mips_arch == PROCESSOR_R5KC) +#define TARGET_MIPS4KC (mips_arch == PROCESSOR_4KC) +#define TARGET_MIPS5KC (mips_arch == PROCESSOR_5KC) #define TARGET_MIPS5400 (mips_arch == PROCESSOR_R5400) #define TARGET_MIPS5500 (mips_arch == PROCESSOR_R5500) #define TARGET_SB1 (mips_arch == PROCESSOR_SB1) @@ -458,6 +460,11 @@ extern void sbss_section PARAMS ((void) builtin_define ("__mips=32"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ } \ + else if (ISA_MIPS32R2) \ + { \ + builtin_define ("__mips=33"); \ + builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32R2"); \ + } \ else if (ISA_MIPS64) \ { \ builtin_define ("__mips=64"); \ @@ -707,13 +714,17 @@ extern void sbss_section PARAMS ((void) # if MIPS_ISA_DEFAULT == 32 # define MULTILIB_ISA_DEFAULT "mips32" # else -# if MIPS_ISA_DEFAULT == 64 -# define MULTILIB_ISA_DEFAULT "mips64" +# if MIPS_ISA_DEFAULT == 33 +# define MULTILIB_ISA_DEFAULT "mips32r2" # else -# define MULTILIB_ISA_DEFAULT "mips1" -# endif +# if MIPS_ISA_DEFAULT == 64 +# define MULTILIB_ISA_DEFAULT "mips64" +# else +# define MULTILIB_ISA_DEFAULT "mips1" +# endif +# endif +# endif # endif -# endif # endif # endif # endif @@ -770,6 +781,7 @@ extern void sbss_section PARAMS ((void) || TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -806,6 +818,7 @@ extern void sbss_section PARAMS ((void) /* ISA has the conditional move instructions introduced in mips4. */ #define ISA_HAS_CONDMOVE ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS5500 \ && !TARGET_MIPS16) @@ -817,6 +830,7 @@ extern void sbss_section PARAMS ((void) branch on CC, and move (both FP and non-FP) on CC. */ #define ISA_HAS_8CC (ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) /* This is a catch all for the other new mips4 instructions: indexed load and @@ -832,6 +846,7 @@ extern void sbss_section PARAMS ((void) /* ISA has integer multiply-accumulate instructions, madd and msub. */ #define ISA_HAS_MADD_MSUB ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -843,6 +858,7 @@ extern void sbss_section PARAMS ((void) /* ISA has count leading zeroes/ones instruction (not implemented). */ #define ISA_HAS_CLZ_CLO ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -879,22 +895,25 @@ extern void sbss_section PARAMS ((void) ) /* ISA has 32-bit rotate right instruction. */ -#define ISA_HAS_ROTR_SI (TARGET_MIPS5400 \ - || TARGET_MIPS5500 \ - || TARGET_SR71K \ - ) +#define ISA_HAS_ROTR_SI (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + || TARGET_MIPS5400 \ + || TARGET_MIPS5500 \ + || TARGET_SR71K \ + )) -/* ISA has 32-bit rotate right instruction. */ +/* ISA has 64-bit rotate right instruction. */ #define ISA_HAS_ROTR_DI (TARGET_64BIT \ + && !TARGET_MIPS16 \ && (TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || TARGET_SR71K \ )) - /* ISA has data prefetch instruction. */ #define ISA_HAS_PREFETCH ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -903,6 +922,12 @@ extern void sbss_section PARAMS ((void) also requires TARGET_DOUBLE_FLOAT. */ #define ISA_HAS_TRUNC_W (!ISA_MIPS1) +/* ISA includes the MIPS32r2 ALU extensions other than rotates + (seb, seh, ins, ext). Rotates are handled by ISA_HAS_ROTR_SI. */ +#define ISA_HAS_ALU32R2 (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + )) + /* CC1_SPEC causes -mips3 and -mips4 to set -mfp64 and -mgp64; -mips1 or -mips2 sets -mfp32 and -mgp32. This can be overridden by an explicit -mfp32, -mfp64, -mgp32 or -mgp64. -mfp64 sets MASK_FLOAT64 in @@ -1066,7 +1091,8 @@ extern int mips_abi; #undef ASM_SPEC #define ASM_SPEC "\ -%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}\ +%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \ +%{mips32} %{mips32r2} %{mips64} \ %{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \ %(subtarget_asm_optimizing_spec) \ %(subtarget_asm_debugging_spec) \ @@ -1123,7 +1149,7 @@ extern int mips_abi; #ifndef LINK_SPEC #define LINK_SPEC "\ %(endian_spec) \ -%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ +%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{shared} %{non_shared}" #endif /* LINK_SPEC defined */ Index: config/mips/mips.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v retrieving revision 1.161 diff -u -p -r1.161 mips.md --- config/mips/mips.md 6 Jan 2003 20:12:37 -0000 1.161 +++ config/mips/mips.md 6 Jan 2003 23:19:15 -0000 @@ -1,6 +1,6 @@ ;; Mips.md Machine Description for MIPS based processors ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +;; 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ;; Contributed by A. Lichnewsky, lich@inria.inria.fr ;; Changes by Michael Meissner, meissner@osf.org ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -1808,6 +1808,7 @@ || TARGET_MIPS5400 || TARGET_MIPS5500 || ISA_MIPS32 + || ISA_MIPS32R2 || ISA_MIPS64) return \"mul\\t%0,%1,%2\"; return \"mult\\t%0,%1,%2\"; @@ -4379,6 +4380,13 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_ALU32R2) + { + emit_insn (gen_extendhisi2_hw (operands[0], + force_reg (HImode, operands[1]))); + DONE; + } + if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4394,6 +4402,14 @@ move\\t%0,%z4\\n\\ } }") +(define_insn "extendhisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] + "ISA_HAS_ALU32R2" + "seh %0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + (define_insn "extendhisi2_internal" [(set (match_operand:SI 0 "register_operand" "=d,d") (sign_extend:SI (match_operand:HI 1 "memory_operand" "R,m")))] @@ -4441,6 +4457,12 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_ALU32R2) + { + emit_insn (gen_extendqisi2_hw (operands[0], + force_reg (QImode, operands[1]))); + DONE; + } if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4455,6 +4477,14 @@ move\\t%0,%z4\\n\\ DONE; } }") + +(define_insn "extendqisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] + "ISA_HAS_ALU32R2" + "seb %0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) (define_insn "extendqisi2_insn" [(set (match_operand:SI 0 "register_operand" "=d,d") Index: config/mips/netbsd.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/netbsd.h,v retrieving revision 1.27 diff -u -p -r1.27 netbsd.h --- config/mips/netbsd.h 10 Nov 2002 18:28:39 -0000 1.27 +++ config/mips/netbsd.h 6 Jan 2003 23:19:15 -0000 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems. - Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 + Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -94,6 +94,8 @@ Boston, MA 02111-1307, USA. */ builtin_define ("__mips=4"); \ else if (ISA_MIPS32) \ builtin_define ("__mips=32"); \ + else if (ISA_MIPS32R2) \ + builtin_define ("__mips=33"); \ else if (ISA_MIPS64) \ builtin_define ("__mips=64"); \ \ @@ -153,7 +155,7 @@ Boston, MA 02111-1307, USA. */ "%{EL:-m elf32lmip} \ %{EB:-m elf32bmip} \ %(endian_spec) \ - %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ + %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \ %(netbsd_link_spec)" Index: config/mips/t-isa3264 =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/t-isa3264,v retrieving revision 1.4 diff -u -p -r1.4 t-isa3264 --- config/mips/t-isa3264 17 Aug 2002 13:04:39 -0000 1.4 +++ config/mips/t-isa3264 6 Jan 2003 23:19:15 -0000 @@ -33,8 +33,8 @@ TARGET_LIBGCC2_CFLAGS = -G 0 # Build the libraries for both hard and soft floating point -MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips64 -MULTILIB_DIRNAMES = soft-float el eb mips32 mips64 +MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips32r2/mips64 +MULTILIB_DIRNAMES = soft-float el eb mips32 mips32r2 mips64 MULTILIB_MATCHES = EL=mel EB=meb EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o Index: doc/invoke.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/invoke.texi,v retrieving revision 1.218 diff -u -p -r1.218 invoke.texi --- doc/invoke.texi 31 Dec 2002 14:59:09 -0000 1.218 +++ doc/invoke.texi 6 Jan 2003 23:19:16 -0000 @@ -1,12 +1,12 @@ @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -@c 2000, 2001, 2002 Free Software Foundation, Inc. +@c 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @ignore @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, -1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or @@ -481,7 +481,8 @@ in the following sections. -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd @gol -mgas -mgp32 -mgp64 @gol -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol --mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol +-mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol +-mlong64 -mlong32 -mlong-calls -mmemcpy @gol -mmips-as -mmips-tfile -mno-abicalls @gol -mno-embedded-data -mno-uninit-const-in-rodata @gol -mno-embedded-pic -mno-gpopt -mno-long-calls @gol @@ -7298,13 +7299,19 @@ These @samp{-m} options are defined for @item -march=@var{arch} @opindex march Generate code that will run on @var{arch}, which can be the name of a -generic MIPS ISA, or the name of a particular processor. The ISA names -are: @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, @samp{mips32} -and @samp{mips64}. The processor names are: @samp{r2000}, -@samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{vr4100}, @samp{vr4300}, -@samp{r4400}, @samp{r4600}, @samp{r4650}, @samp{vr5000}, @samp{r6000}, -@samp{r8000}, @samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, -@samp{orion}, and @samp{sb1}. The special value @samp{from-abi} selects the +generic MIPS ISA, or the name of a particular processor. +The ISA names are: +@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, +@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. +The processor names are: +@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, +@samp{m4k}, +@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, +@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, +@samp{orion}, +@samp{sb1}, +@samp{vr4100}, @samp{vr4300}, and @samp{vr5000}. +The special value @samp{from-abi} selects the most compatible architecture for the selected ABI (that is, @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. @@ -7362,6 +7369,10 @@ Equivalent to @samp{-march=mips4}. @item -mips32 @opindex mips32 Equivalent to @samp{-march=mips32}. + +@item -mips32r2 +@opindex mips32r2 +Equivalent to @samp{-march=mips32r2}. @item -mips64 @opindex mips64 From gcc-patches-return-75113-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 23:36:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20131 invoked by alias); 6 Jan 2003 23:36:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20118 invoked from network); 6 Jan 2003 23:36:36 -0000 Received: from unknown (HELO e32.co.us.ibm.com) (32.97.110.130) by 209.249.29.67 with SMTP; 6 Jan 2003 23:36:36 -0000 Received: from westrelay03.boulder.ibm.com (westrelay03.boulder.ibm.com [9.17.194.24]) by e32.co.us.ibm.com (8.12.2/8.12.2) with ESMTP id h06NaNn0080806 for ; Mon, 6 Jan 2003 18:36:24 -0500 Received: from dyn9-47-17-68.beaverton.ibm.com (dyn9-47-17-68.beaverton.ibm.com [9.47.17.68]) by westrelay03.boulder.ibm.com (8.12.3/NCO/VER6.4) with ESMTP id h06NaN1U069260 for ; Mon, 6 Jan 2003 16:36:23 -0700 Received: (from janis@localhost) by dyn9-47-17-68.beaverton.ibm.com (8.9.3/8.9.3) id PAA08146 for gcc-patches@gcc.gnu.org; Mon, 6 Jan 2003 15:39:04 -0800 Date: Mon, 6 Jan 2003 15:39:04 -0800 From: Janis Johnson To: gcc-patches@gcc.gnu.org Subject: [doc-patch] fix PR 8947 with addition to invoke.texi Message-ID: <20030106153904.A8081@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i This patch fixes PR 8947 by making it more explicit that an option breaks binary compatibility. It also makes a markup fix and updates the copyright for the file. OK for the mainline, 3.3-branch, and 3.2-branch? 2003-01-06 Janis Johnson PR other/8947 * doc/invoke.texi (-malign-double): Explain that the option breaks binary compatibility. Index: invoke.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/invoke.texi,v retrieving revision 1.218 diff -u -r1.218 invoke.texi --- invoke.texi 31 Dec 2002 14:59:09 -0000 1.218 +++ invoke.texi 6 Jan 2003 23:27:18 -0000 @@ -1,12 +1,12 @@ @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -@c 2000, 2001, 2002 Free Software Foundation, Inc. +@c 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @ignore @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, -1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or @@ -7818,9 +7818,11 @@ produce code that runs somewhat faster on a @samp{Pentium} at the expense of more memory. -@strong{Warning:} if you use the @samp{-malign-double} switch, +@strong{Warning:} if you use the @option{-malign-double} switch, structures containing the above types will be aligned differently than -the published application binary interface specifications for the 386. +the published application binary interface specifications for the 386 +and will not be binary compatible with structures in code compiled +without that switch. @item -m128bit-long-double @opindex m128bit-long-double From gcc-patches-return-75114-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 06 23:50:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23896 invoked by alias); 6 Jan 2003 23:50:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23829 invoked from network); 6 Jan 2003 23:50:34 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 6 Jan 2003 23:50:34 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h06NoNe14648; Mon, 6 Jan 2003 18:50:23 -0500 Date: Mon, 6 Jan 2003 18:50:23 -0500 (EST) From: Jeff Sturm To: Richard Henderson cc: gcc-patches@gcc.gnu.org Subject: Re: fix alpha glibc build In-Reply-To: <20030106150100.A11687@redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 6 Jan 2003, Richard Henderson wrote: > (define_insn "movdi_er_high_g" > [(set (match_operand:DI 0 "register_operand" "=r") > (unspec:DI [(match_operand:DI 1 "register_operand" "r") > - (match_operand:DI 2 "global_symbolic_operand" "") > + (match_operand:DI 2 "symbolic_operand" "") > (match_operand 3 "const_int_operand" "")] > UNSPEC_LITERAL))] > "TARGET_EXPLICIT_RELOCS" Since this hunk fixes PR 9180, reported against the 3.3 branch, can it go there too? Jeff From gcc-patches-return-75115-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 00:10:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2699 invoked by alias); 7 Jan 2003 00:10:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1259 invoked from network); 7 Jan 2003 00:08:12 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 7 Jan 2003 00:08:12 -0000 Received: from fleche.redhat.com (tq0106.peakpeak.com [207.174.177.106]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA31269; Mon, 6 Jan 2003 17:07:58 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 53F1B4F8099; Mon, 6 Jan 2003 17:11:35 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: avoid crash with gcj -fno-assume-compiled From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I HAVE a towel. Date: 06 Jan 2003 17:11:34 -0700 Message-ID: <87lm1xddjd.fsf@fleche.redhat.com> Lines: 56 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Today I tried -fno-assume-compiled, and got a crash: fleche. gcj --syntax-only -fno-assume-compiled=org.apache.foo foo.java jc1: internal compiler error: Segmentation fault The appended patch fixes this crash, and makes the logic in add_assume_compiled correct (this function was checking `ident' instead of `parent->ident'). Ok for trunk? (Not the 3.3 branch since Jeff's assume-compiled patches aren't there. If/when those are moved over, this can move at the same time.) Tom Index: ChangeLog from Tom Tromey * class.c (add_assume_compiled): Don't adjust parent if we're already at the root of tree. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.142 diff -u -r1.142 class.c --- class.c 1 Jan 2003 15:10:00 -0000 1.142 +++ class.c 6 Jan 2003 23:44:05 -0000 @@ -150,6 +150,7 @@ const char *ident; int excludep; { + int len; assume_compiled_node *parent; assume_compiled_node *node = xmalloc (sizeof (assume_compiled_node)); @@ -183,7 +184,8 @@ class or a package name. Adjust PARENT accordingly. */ parent = find_assume_compiled_node (assume_compiled_tree, ident); - if (ident[strlen (parent->ident)] != '.') + len = strlen (parent->ident); + if (parent->ident[len] && parent->ident[len] != '.') parent = parent->parent; /* Insert NODE into the tree. */ @@ -194,7 +196,7 @@ } /* Returns nonzero if IDENT is the name of a class that the compiler - should assume has been compiled to FIXME */ + should assume has been compiled to object code. */ static int assume_compiled (ident) From gcc-patches-return-75116-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:14:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31645 invoked by alias); 7 Jan 2003 01:14:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29883 invoked from network); 7 Jan 2003 01:10:34 -0000 Received: from unknown (HELO regyva.regy.canterbury.ac.nz) (132.181.30.7) by 209.249.29.67 with SMTP; 7 Jan 2003 01:10:34 -0000 Received: from CONVERSION-DAEMON.it.canterbury.ac.nz by it.canterbury.ac.nz (PMDF V6.1-1 #39332) id <01KQYFPWIIA89D644H@it.canterbury.ac.nz> for gcc-patches@gcc.gnu.org; Tue, 07 Jan 2003 14:10:18 +1300 (NEW ZEALAND DAYLIGHT TIME) Received: from lupus.elec.canterbury.ac.nz (lupus.elec.canterbury.ac.nz [132.181.50.44]) by it.canterbury.ac.nz (PMDF V6.1-1 #39332) with ESMTP id <01KQYFPXKZEW8YHFY3@it.canterbury.ac.nz>; Tue, 07 Jan 2003 14:10:20 +1300 (NEW ZEALAND DAYLIGHT TIME) Received: from ongaonga.elec.canterbury.ac.nz (ongaonga [132.181.54.69]) by lupus.elec.canterbury.ac.nz (8.9.1b+Sun/8.9.1) with ESMTP id OAA29865; Tue, 07 Jan 2003 14:10:17 +1300 (NZDT) Received: (from mph@localhost) by ongaonga.elec.canterbury.ac.nz (8.11.6/8.11.6) id h071AGN24667; Tue, 07 Jan 2003 14:10:16 +1300 Date: Tue, 07 Jan 2003 14:10:16 +1300 From: Michael Hayes Subject: Re: [patch] c4x target mainline In-reply-to: <20030104194114.1614B76790@home.nl> To: hermantenbrugge@home.nl (Herman ten Brugge) Cc: gcc-patches@gcc.gnu.org Message-id: <15898.10488.453115.229175@ongaonga.elec.canterbury.ac.nz> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit References: <20030104194114.1614B76790@home.nl> Herman ten Brugge writes: > I found a problem in the c4x target on mainline. The problem is that the > c4x target includes hwint.h. The recent changes to hwint.h makes the c4x > target fail. > The including of hwint.h was done about 3 years ago to make the > c4x target TI assembler compliant. The changes in printing routines > over time makes this patch obsolete. So the fix is simple. Just remove > the include and the redefination of HOST_WIDE_INT_PRINT_HEX. Thanks Herman, I've committed the patch. Michael. From gcc-patches-return-75117-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:29:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5636 invoked by alias); 7 Jan 2003 01:29:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5626 invoked from network); 7 Jan 2003 01:29:06 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 01:29:06 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h071PSo08008; Mon, 6 Jan 2003 17:25:29 -0800 Date: Mon, 06 Jan 2003 17:25:28 -0800 From: Mark Mitchell To: Eric Botcazou , "gcc-patches@gcc.gnu.org" Subject: Re: 3 pending patches from 2002 Message-ID: <14980000.1041902728@warlock.codesourcery.com> In-Reply-To: <200301062355.37371.ebotcazou@libertysurf.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Monday, January 06, 2003 11:56:50 PM +0100 Eric Botcazou wrote: > PR c/8032: > http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01636.html > Probably not worth applying on the 3.2 branch. Does this work if the constructor is skipping around a lot, e.g.: struct S { int a; int b; int c; int d; }; struct S s = { .c = 3, .a = 7, 6 }; I don't remember what the "6" is supposed to initialize (b? d?), but we should make sure your patch does the right thing. > PR inline-asm/8832: (former optimization/8832): > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00721.html > Same thing. OK for all affected branches. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75118-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:32:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7839 invoked by alias); 7 Jan 2003 01:32:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5638 invoked from network); 7 Jan 2003 01:29:08 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 7 Jan 2003 01:29:08 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h071Suw11635 for ; Mon, 6 Jan 2003 17:28:56 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id for ; Mon, 6 Jan 2003 17:28:28 -0800 Received: from keatge.apple.com (keatge.apple.com [17.201.20.159]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h071Sus19576 for ; Mon, 6 Jan 2003 17:28:56 -0800 (PST) Received: (from gkeating@localhost) by keatge.apple.com (8.12.2/8.9.1) id h071St4u003070; Mon, 6 Jan 2003 17:28:55 -0800 (PST) Date: Mon, 6 Jan 2003 17:28:55 -0800 (PST) From: Geoffrey Keating Message-Id: <200301070128.h071St4u003070@keatge.apple.com> To: gcc-patches@gcc.gnu.org Subject: [PCH] Update GC statistics after load This prevents GGC from running a collection almost immediately after a PCH load, which is usually much better for performance... Bootstrapped & tested on powerpc-darwin. -- - Geoffrey Keating ===File ~/patches/pchbranch-gcstatsupdate.patch============= 2003-01-03 Geoffrey Keating * ggc-page.c (ggc_pch_read): Update the statistics after a PCH load. Index: ggc-page.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ggc-page.c,v retrieving revision 1.48.4.9 diff -u -p -u -p -r1.48.4.9 ggc-page.c --- ggc-page.c 24 Dec 2002 02:06:39 -0000 1.48.4.9 +++ ggc-page.c 7 Jan 2003 01:20:17 -0000 @@ -1,5 +1,5 @@ /* "Bag-of-pages" garbage collector for the GNU compiler. - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. @@ -1833,4 +1833,7 @@ ggc_pch_read (f, addr) G.pages[i] = entry; G.page_tails[i] = entry; } + + /* Update the statistics. */ + G.allocated = G.allocated_last_gc = offs - (char *)addr; } ============================================================ From gcc-patches-return-75119-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:33:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8825 invoked by alias); 7 Jan 2003 01:33:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8800 invoked from network); 7 Jan 2003 01:33:36 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 01:33:36 -0000 Received: (from mitchell@localhost) by localhost.localdomain (8.11.6/8.11.6) id h071U1T08166; Mon, 6 Jan 2003 17:30:01 -0800 Date: Mon, 6 Jan 2003 17:30:01 -0800 Message-Id: <200301070130.h071U1T08166@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Cc: oldham@codesourcery.com Subject: C++ ABI PATCH: Overlong unnamed bitfields Reply-to: mark@codesourcery.com Here's a corner-case patch: unnamed bitfields whose width is longer than their types on PCC_BITFIELD_TYPE_MATTERS machines. After my recent correction to the stor-layout.c PCC_BITFIELD_TYPE_MATTERS logic, these bitfields were being handled incorrectly. Fixed with the following ugliness in the C++ front end. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-06 Mark Mitchell * class.c (layout_class_type): Correct handling of unnamed bitfields wider than their types. 2003-01-06 Mark Mitchell * testsuite/g++.dg/abi/bitfield9.C: New test. Index: testsuite/g++.dg/abi/bitfield9.C =================================================================== RCS file: testsuite/g++.dg/abi/bitfield9.C diff -N testsuite/g++.dg/abi/bitfield9.C *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/g++.dg/abi/bitfield9.C 7 Jan 2003 01:31:05 -0000 *************** *** 0 **** --- 1,11 ---- + // { dg-do run { target i?86-*-* } } + // { dg-options -w } + + struct X { + char : 45; + }; + + int main () { + if (__alignof__ (X) != 4) + return 1; + } Index: cp/class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/class.c,v retrieving revision 1.508 diff -c -5 -p -r1.508 class.c *** cp/class.c 3 Jan 2003 19:48:50 -0000 1.508 --- cp/class.c 7 Jan 2003 01:31:06 -0000 *************** layout_class_type (tree t, tree *virtual *** 4991,5000 **** --- 4991,5001 ---- /* Layout the non-static data members. */ for (field = non_static_data_members; field; field = TREE_CHAIN (field)) { tree type; tree padding; + bool was_unnamed_p = false; /* We still pass things that aren't non-static data members to the back-end, in case it wants to do something with them. */ if (TREE_CODE (field) != FIELD_DECL) { *************** layout_class_type (tree t, tree *virtual *** 5022,5032 **** if (DECL_C_BIT_FIELD (field) && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field))) { integer_type_kind itk; tree integer_type; - /* We must allocate the bits as if suitably aligned for the longest integer type that fits in this many bits. type of the field. Then, we are supposed to use the left over bits as additional padding. */ for (itk = itk_char; itk != itk_none; ++itk) --- 5023,5032 ---- *************** layout_class_type (tree t, tree *virtual *** 5051,5069 **** --- 5051,5084 ---- "version of GCC", t); padding = size_binop (MINUS_EXPR, DECL_SIZE (field), TYPE_SIZE (integer_type)); } + /* An unnamed bitfield does not normally affect the + alignment of the containing class on a target where + PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not + make any exceptions for unnamed bitfields when the + bitfields are longer than their types. Therefore, we + temporarily give the field a name. */ + if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field)) + { + was_unnamed_p = true; + DECL_NAME (field) = make_anon_name (); + } DECL_SIZE (field) = TYPE_SIZE (integer_type); DECL_ALIGN (field) = TYPE_ALIGN (integer_type); DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type); } else padding = NULL_TREE; layout_nonempty_base_or_field (rli, field, NULL_TREE, empty_base_offsets); + /* If the bit-field had no name originally, remove the name + now. */ + if (was_unnamed_p) + DECL_NAME (field) = NULL_TREE; /* Remember the location of any empty classes in FIELD. */ if (abi_version_at_least (2)) record_subobject_offsets (TREE_TYPE (field), byte_position(field), From gcc-patches-return-75120-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:35:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11730 invoked by alias); 7 Jan 2003 01:35:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11718 invoked from network); 7 Jan 2003 01:35:53 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 01:35:53 -0000 Received: (from mitchell@localhost) by localhost.localdomain (8.11.6/8.11.6) id h071WH708178; Mon, 6 Jan 2003 17:32:17 -0800 Date: Mon, 6 Jan 2003 17:32:17 -0800 Message-Id: <200301070132.h071WH708178@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Subject: C++ PATCH: Do not synthesize thunks Reply-to: mark@codesourcery.com This patch fixes an abort on a rather large test case that I could not successfully shrink down. Clearly, however, it makes no sense to be synthesizing thunks. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-06 Mark Mitchell * decl2.c (mark_used): Do not synthesize thunks. Index: cp/decl2.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl2.c,v retrieving revision 1.590 diff -c -5 -p -r1.590 decl2.c *** cp/decl2.c 3 Jan 2003 23:13:09 -0000 1.590 --- cp/decl2.c 7 Jan 2003 01:19:18 -0000 *************** mark_used (tree decl) *** 4612,4621 **** --- 4612,4622 ---- /* Is it a synthesized method that needs to be synthesized? */ if (TREE_CODE (decl) == FUNCTION_DECL && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl) && DECL_ARTIFICIAL (decl) + && !DECL_THUNK_P (decl) && ! DECL_INITIAL (decl) /* Kludge: don't synthesize for default args. */ && current_function_decl) { synthesize_method (decl); From gcc-patches-return-75121-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:39:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15077 invoked by alias); 7 Jan 2003 01:39:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15058 invoked from network); 7 Jan 2003 01:39:26 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 01:39:26 -0000 Received: (from mitchell@localhost) by localhost.localdomain (8.11.6/8.11.6) id h071Zox08189; Mon, 6 Jan 2003 17:35:50 -0800 Date: Mon, 6 Jan 2003 17:35:50 -0800 Message-Id: <200301070135.h071Zox08189@localhost.localdomain> X-Authentication-Warning: localhost.localdomain: mitchell set sender to mark@codesourcery.com using -f From: Mark Mitchell To: gcc-patches@gcc.gnu.org Cc: bangerth@ticam.utexas.edu Subject: C++ PATCH: Fix regression in template instantiation code Reply-to: mark@codesourcery.com Wolfgang pointed out that my patch from yesterday to pt.c didn't really do the trick. It turns out that I misunderstood what was going wrong in the hash-table code; this patch fixes the problem. I think. Tested on i686-pc-linux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-06 Mark Mitchell * pt.c (retrieve_local_specialization): Revert 2003-01-05 change. (hash_local_specialization): New function. (register_local_specialization): Revert 2003-01-05 change. (instantiate_decl): Use hash_local_specialization when creating the local_specializations table. Index: cp/pt.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/pt.c,v retrieving revision 1.643 diff -c -5 -p -r1.643 pt.c *** cp/pt.c 6 Jan 2003 02:40:31 -0000 1.643 --- cp/pt.c 7 Jan 2003 01:19:20 -0000 *************** retrieve_specialization (tmpl, args) *** 743,753 **** static tree retrieve_local_specialization (tmpl) tree tmpl; { ! tree spec = (tree) htab_find (local_specializations, tmpl); return spec ? TREE_PURPOSE (spec) : NULL_TREE; } /* Returns nonzero iff DECL is a specialization of TMPL. */ --- 743,755 ---- static tree retrieve_local_specialization (tmpl) tree tmpl; { ! tree spec = ! (tree) htab_find_with_hash (local_specializations, tmpl, ! htab_hash_pointer (tmpl)); return spec ? TREE_PURPOSE (spec) : NULL_TREE; } /* Returns nonzero iff DECL is a specialization of TMPL. */ *************** static int *** 920,940 **** eq_local_specializations (const void *p1, const void *p2) { return TREE_VALUE ((tree) p1) == (tree) p2; } /* Like register_specialization, but for local declarations. We are registering SPEC, an instantiation of TMPL. */ static void register_local_specialization (spec, tmpl) tree spec; tree tmpl; { void **slot; ! slot = htab_find_slot (local_specializations, tmpl, INSERT); *slot = build_tree_list (spec, tmpl); } /* Print the list of candidate FNS in an error message. */ --- 922,951 ---- eq_local_specializations (const void *p1, const void *p2) { return TREE_VALUE ((tree) p1) == (tree) p2; } + /* Hash P1, an entry in the local specializations table. */ + + static hashval_t + hash_local_specialization (const void* p1) + { + return htab_hash_pointer (TREE_VALUE ((tree) p1)); + } + /* Like register_specialization, but for local declarations. We are registering SPEC, an instantiation of TMPL. */ static void register_local_specialization (spec, tmpl) tree spec; tree tmpl; { void **slot; ! slot = htab_find_slot_with_hash (local_specializations, tmpl, ! htab_hash_pointer (tmpl), INSERT); *slot = build_tree_list (spec, tmpl); } /* Print the list of candidate FNS in an error message. */ *************** instantiate_decl (d, defer_ok) *** 10306,10316 **** template from within the body of another. */ saved_local_specializations = local_specializations; /* Set up the list of local specializations. */ local_specializations = htab_create (37, ! htab_hash_pointer, eq_local_specializations, NULL); /* Set up context. */ start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED); --- 10317,10327 ---- template from within the body of another. */ saved_local_specializations = local_specializations; /* Set up the list of local specializations. */ local_specializations = htab_create (37, ! hash_local_specialization, eq_local_specializations, NULL); /* Set up context. */ start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED); From gcc-patches-return-75122-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 01:42:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17218 invoked by alias); 7 Jan 2003 01:42:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17208 invoked from network); 7 Jan 2003 01:42:11 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 7 Jan 2003 01:42:11 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h071fxI01938 for ; Mon, 6 Jan 2003 17:41:59 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id for ; Mon, 6 Jan 2003 17:41:31 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h071fxf08382; Mon, 6 Jan 2003 17:41:59 -0800 (PST) Date: Mon, 6 Jan 2003 17:41:25 -0800 Subject: Patch: fix regression in sibcalls (ppc & elsewhere) redone Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen To: gcc-patches@gcc.gnu.org From: Dale Johannesen Content-Transfer-Encoding: 7bit Message-Id: <226D4018-21E1-11D7-B860-000393D76DAA@apple.com> One more time. This does what Geoff suggested. Bootstrapped and tested on Darwin. 2003-01-06 Dale Johannesen * function.c (assign_parms): Don't set pretend_args_size if REG_PARM_STACK_SPACE. function.h (struct function): Clarify behavior of pretend_args_size. config/rs6000/rs6000.c (setup_incoming_varargs): Don't set pretend_args_size. Index: function.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/function.c,v retrieving revision 1.390 diff -u -d -b -w -c -3 -p -r1.390 function.c cvs server: conflicting specifications of output style *** function.c 16 Dec 2002 18:19:29 -0000 1.390 --- function.c 7 Jan 2003 01:38:30 -0000 *************** assign_parms (fndecl) *** 4477,4482 **** --- 4477,4488 ---- if (nregs > 0) { + #if defined (REG_PARM_STACK_SPACE) && !defined (MAYBE_REG_PARM_STACK_SPACE) + /* When REG_PARM_STACK_SPACE is nonzero, stack space for + split parameters was allocated by our caller, so we + won't be pushing it in the prolog. */ + if (REG_PARM_STACK_SPACE (fndecl) == 0) + #endif current_function_pretend_args_size = (((nregs * UNITS_PER_WORD) + (PARM_BOUNDARY / BITS_PER_UNIT) - 1) / (PARM_BOUNDARY / BITS_PER_UNIT) Index: function.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/function.h,v retrieving revision 1.90 diff -u -d -b -w -c -3 -p -r1.90 function.h cvs server: conflicting specifications of output style *** function.h 16 Dec 2002 18:19:29 -0000 1.90 --- function.h 7 Jan 2003 01:38:30 -0000 *************** struct function GTY(()) *** 207,213 **** /* # bytes the prologue should push and pretend that the caller pushed them. The prologue must do this, but only if parms can be passed in ! registers. */ int pretend_args_size; /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is --- 207,213 ---- /* # bytes the prologue should push and pretend that the caller pushed them. The prologue must do this, but only if parms can be passed in ! registers, and not when REG_PARM_STACK_SPACE is nonzero. */ int pretend_args_size; /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is Index: config/rs6000/rs6000.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.407 diff -u -d -b -w -c -3 -p -r1.407 rs6000.c cvs server: conflicting specifications of output style *** config/rs6000/rs6000.c 3 Jan 2003 23:09:33 -0000 1.407 --- config/rs6000/rs6000.c 7 Jan 2003 01:38:31 -0000 *************** setup_incoming_varargs (cum, mode, type, *** 3325,3331 **** CUMULATIVE_ARGS *cum; enum machine_mode mode; tree type; ! int *pretend_size; int no_rtl; { --- 3325,3331 ---- CUMULATIVE_ARGS *cum; enum machine_mode mode; tree type; ! int *pretend_size ATTRIBUTE_UNUSED; int no_rtl; { *************** setup_incoming_varargs (cum, mode, type, *** 3380,3388 **** (GP_ARG_MIN_REG + first_reg_offset, mem, GP_ARG_NUM_REG - first_reg_offset, (GP_ARG_NUM_REG - first_reg_offset) * UNITS_PER_WORD); - - /* ??? Does ABI_V4 need this at all? */ - *pretend_size = (GP_ARG_NUM_REG - first_reg_offset) * UNITS_PER_WORD; } /* Save FP registers if needed. */ --- 3380,3385 ---- From gcc-patches-return-75123-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 02:27:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18826 invoked by alias); 7 Jan 2003 02:27:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16259 invoked from network); 7 Jan 2003 02:23:26 -0000 Received: from unknown (HELO cantvc.canterbury.ac.nz) (132.181.2.36) by 209.249.29.67 with SMTP; 7 Jan 2003 02:23:26 -0000 Received: from CONVERSION-DAEMON.it.canterbury.ac.nz by it.canterbury.ac.nz (PMDF V6.1-1 #39332) id <01KQYIA2QIGG9D644H@it.canterbury.ac.nz> for gcc-patches@gcc.gnu.org; Tue, 07 Jan 2003 15:23:07 +1300 (NEW ZEALAND DAYLIGHT TIME) Received: from lupus.elec.canterbury.ac.nz (lupus.elec.canterbury.ac.nz [132.181.50.44]) by it.canterbury.ac.nz (PMDF V6.1-1 #39332) with ESMTP id <01KQYIA3VNM48YHLVC@it.canterbury.ac.nz> for gcc-patches@gcc.gnu.org; Tue, 07 Jan 2003 15:23:05 +1300 (NEW ZEALAND DAYLIGHT TIME) Received: from ongaonga.elec.canterbury.ac.nz (ongaonga [132.181.54.69]) by lupus.elec.canterbury.ac.nz (8.9.1b+Sun/8.9.1) with ESMTP id PAA00753 for ; Tue, 07 Jan 2003 15:23:04 +1300 (NZDT) Received: (from mph@localhost) by ongaonga.elec.canterbury.ac.nz (8.11.6/8.11.6) id h072N3506402; Tue, 07 Jan 2003 15:23:03 +1300 Date: Tue, 07 Jan 2003 15:23:03 +1300 From: Michael Hayes Subject: [patch] c4x naked attribute To: gcc-patches@gcc.gnu.org Message-id: <15898.14855.685965.498652@ongaonga.elec.canterbury.ac.nz> MIME-version: 1.0 Content-type: multipart/mixed; boundary="Boundary_(ID_QQuKQ+8D3aU6Ii3lzupVTg)" --Boundary_(ID_QQuKQ+8D3aU6Ii3lzupVTg) Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit Content-description: message body text Hi, I've commited the following patch to remove some bit rot in the c4x function attributes and to update the docs. * config/c4x/c4x.c (c4x_naked_function_p): Rename from c4x_assembler_function_p. (c4x_null_epilogue_p): Complement return value, all uses updated. (c4x_insert_attributes): Add naked. * config/c4x/c4x.md (c4x_null_epilogue_p): Changes uses. * doc/extend.texi: Update C4x function attributes. --Boundary_(ID_QQuKQ+8D3aU6Ii3lzupVTg) Content-type: application/octet-stream Content-transfer-encoding: BASE64 Content-disposition: attachment; filename=naked.patch.gz H4sICFY5Gj4AA25ha2VkLnBhdGNoAN1YbVPbRhD+DL9ikw+pTeQg2WC79qQdGpwO HZIwxnTS6XRuDulkFOSTeicRKOG/d1d3kmxsXgptWqqxZb3s7e3z7N7unvdkIM4H 4CcyjKab/tY5fV/5668ff6yP3xxCGMViAJv+md6c+n71vT6fc7auRKYicRbJKSj8 0VEiwXvlef31IApDaPnQ6kArhZYqnoKxc2NjY8n4Na8Lu8KHtuu2wesP2t7AdaHl 4rFmNLZareVRPfiJSxrUAbc98DqDzrYZRJPMH5ApISDgGWfF1Wt4f7S/zybj0WhY GOR1tx2vtw0kvA5GPM2VWCFu38oE4edK3iwRyUwolafZShH8bG7A20R95iqAQPgx VzxDCjVsbOJLneGdT0qINxZpxZSYslyLgKVwsDPeeXcIjUYudTSVIiDBZnO4PDAW PGRhLn3SPT/yLIkCGvHs+giutZgdx0LdOmzZwtkMTQvjhGfz8io7XynOCU6kkaK7 Zc9vlqW4MM7rAl63vobzXlol/BQBPy3fGpufgF+vL+BVcBvNYu32+ttO79teuXbN p54JSbgxqlEDwCV+rdezi1RYB0Jxg54lp7LJLwcjaPi5UkJmtQZybUEzgAkoaMRJ cpqnjGeYG4/zTEDjeTX1cwdIEduZTMZ7PxxNRgiYZmk24ZkJoWahC+DLl5WaCvfd QwthuLJc0Arp9bsFRXaF3EDRUnD8/fQ8HNM8pFXBIc5TLnH5qCROprkog6Pf3nL6 Ha8MjuKINNBSA51AlMHnRH6TgRQiiIXW8QWmDn0C2YmAUPEZZpKkyAWvwKxdKKI3 SBAnCTKuOgUlBNIsemBzwcagZIPG4ETHeRQHwKE01Oil0VGIFN4cqU1r/mUJw3I6 tPdXhadLvNbTXwmviZwHYF0RcnfjvMX9Io2Kmaz3PdfzHDz1a/9jfkFE2qojbDr6 gwJ5KjByiQFWPGg0jcQ9HGtgygTK2R/hUzINjRGzKGOf8lnKigeNqZDMlqxQJbMK J+kYVoPHk4/sLebRERuP9ncmo112AA1S0ESVni2WFSVViDyOkiXf34OOe7n9H6Vi VQzJPI4rdXV98dpuz/HaXqcOIuIIS5dMqmxIyJTAIhkwP5mlschEYHM5wIsXcFcR uiZYtx+3CV7Ptz6PY83wlPj8DlGuprrwqgmKCmIVFA+FuLqI/Hvw/pKjPWKh3V2o FhBimDcKKjB03u6NDyfs4HB0tPsBQ+vHvcPJaAzI4NCwBd+9Btdet1qEaM3whvaI M3R8HJ2JX4vXv1nbEZBp/UjIvqJxFp2dGsvgzrhDU77/0KQ2Ya0qqu6wcoN94tXJ cq74utfbghrwfLn47wP2lgC7KwF7dzUNmBCEyup2REODehYH6icmNLa6bt/Z6pY5 gMgrH20tkkdq/RPhny40Obh11Rk2OdW2xIGliYZ36Cg3LahmYf/yAFXV+kNdizud lcpe3m6XbeDq/dCtFh0rwU+rpIJKuRbw886Y7Y7e7A+W3UTMYa+qcj+rFTKdCt+k VPvIugnbn61up12uYFNNsFZdonkzNGwWSdxHSLzg5+aCTMVI/N0pOlpzFSKz1c0J NhaYsuGqbIguYYFAPFyHPiGPNU6BpuK5/CEbjQYWykJpzd2VU5XSvY/vRvSnTiBA oJbPJ0LRJhT7Muze6C8Z6sB5psHSDVxjY6UvZCIvZpCE5YKYs2wI+iTJsRRj03cs gPu+SDFlA6n+virJCGZ+f/IoMJacYp+WYoQKSXHxWH3U/TtQHwv6Fn9ItFjwV0O7 RtvbFA9VP/wk4uESqjX1/3HHn3cK80G3FAAA --Boundary_(ID_QQuKQ+8D3aU6Ii3lzupVTg) Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit Content-description: message body text Michael. --Boundary_(ID_QQuKQ+8D3aU6Ii3lzupVTg)-- From gcc-patches-return-75124-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 02:57:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14879 invoked by alias); 7 Jan 2003 02:57:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9726 invoked from network); 7 Jan 2003 02:52:36 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 7 Jan 2003 02:52:36 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h072OoB10224; Mon, 6 Jan 2003 21:24:50 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h072qPa07342; Mon, 6 Jan 2003 21:52:25 -0500 Received: from frogsleap.quesejoda.com (sebastian-int.corp.redhat.com [172.16.52.221]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h072qJn13631; Mon, 6 Jan 2003 21:52:24 -0500 Received: by frogsleap.quesejoda.com (Postfix, from userid 500) id 83E173C27B; Mon, 6 Jan 2003 18:52:03 -0800 (PST) Date: Mon, 6 Jan 2003 18:52:03 -0800 From: Aldy Hernandez To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org Subject: Re: [altivec] tidy up assembler code Message-ID: <20030107025203.GA27900@redhat.com> References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> <3E1687E1.D23E33F2@koffie.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <3E1687E1.D23E33F2@koffie.nl> User-Agent: Mutt/1.4i Sorry for the delay (blame it on xmas). This is OK. Thank you. I've committed the following to mainline. It needed some massaging wrt attributes (vecsimple vs vecperm, etc). 2003-01-06 Aldy Hernandez Segher Boessenkool * config/rs6000/altivec.md: Remove spaces from assembler instruction argument lists. Index: config/rs6000/altivec.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/rs6000/altivec.md,v retrieving revision 1.4 diff -c -p -r1.4 altivec.md *** config/rs6000/altivec.md 23 Dec 2002 22:08:57 -0000 1.4 --- config/rs6000/altivec.md 7 Jan 2003 02:49:55 -0000 *************** *** 529,535 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 65))] "TARGET_ALTIVEC" ! "vmsumubm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsummbm" --- 529,535 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 65))] "TARGET_ALTIVEC" ! "vmsumubm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsummbm" *************** *** 538,544 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 66))] "TARGET_ALTIVEC" ! "vmsumubm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhm" --- 538,544 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 66))] "TARGET_ALTIVEC" ! "vmsumubm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhm" *************** *** 547,553 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 67))] "TARGET_ALTIVEC" ! "vmsumuhm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshm" --- 547,553 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 67))] "TARGET_ALTIVEC" ! "vmsumuhm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshm" *************** *** 556,562 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 68))] "TARGET_ALTIVEC" ! "vmsumshm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhs" --- 556,562 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 68))] "TARGET_ALTIVEC" ! "vmsumshm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhs" *************** *** 566,572 **** (match_operand:V4SI 3 "register_operand" "v")] 69)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumuhs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshs" --- 566,572 ---- (match_operand:V4SI 3 "register_operand" "v")] 69)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumuhs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumshs" *************** *** 576,582 **** (match_operand:V4SI 3 "register_operand" "v")] 70)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumshs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "umaxv16qi3" --- 576,582 ---- (match_operand:V4SI 3 "register_operand" "v")] 70)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmsumshs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "umaxv16qi3" *************** *** 642,648 **** (match_operand:V8HI 3 "register_operand" "v")] 71)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhaddshs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmhraddshs" [(set (match_operand:V8HI 0 "register_operand" "=v") --- 642,648 ---- (match_operand:V8HI 3 "register_operand" "v")] 71)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhaddshs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmhraddshs" [(set (match_operand:V8HI 0 "register_operand" "=v") *************** *** 651,657 **** (match_operand:V8HI 3 "register_operand" "v")] 72)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhraddshs %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmladduhm" [(set (match_operand:V8HI 0 "register_operand" "=v") --- 651,657 ---- (match_operand:V8HI 3 "register_operand" "v")] 72)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vmhraddshs %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmladduhm" [(set (match_operand:V8HI 0 "register_operand" "=v") *************** *** 659,665 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:V8HI 3 "register_operand" "v")] 73))] "TARGET_ALTIVEC" ! "vmladduhm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmrghb" --- 659,665 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:V8HI 3 "register_operand" "v")] 73))] "TARGET_ALTIVEC" ! "vmladduhm %0,%1,%2,%3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmrghb" *************** *** 1315,1349 **** [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")] 139))] "TARGET_ALTIVEC" ! "vspltisb %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vspltish" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")] 140))] "TARGET_ALTIVEC" ! "vspltish %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vspltisw" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")] 141))] "TARGET_ALTIVEC" ! "vspltisw %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vspltisw_v4sf" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:QI 1 "immediate_operand" "i")] 142))] "TARGET_ALTIVEC" ! "vspltisw %0, %1" [(set_attr "type" "vecperm")]) (define_insn "ftruncv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=v") (fix:V4SF (match_operand:V4SF 1 "register_operand" "v")))] "TARGET_ALTIVEC" ! "vrfiz %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vperm_4si" --- 1315,1349 ---- [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")] 139))] "TARGET_ALTIVEC" ! "vspltisb %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vspltish" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")] 140))] "TARGET_ALTIVEC" ! "vspltish %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vspltisw" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")] 141))] "TARGET_ALTIVEC" ! "vspltisw %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vspltisw_v4sf" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:QI 1 "immediate_operand" "i")] 142))] "TARGET_ALTIVEC" ! "vspltisw %0,%1" [(set_attr "type" "vecperm")]) (define_insn "ftruncv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=v") (fix:V4SF (match_operand:V4SF 1 "register_operand" "v")))] "TARGET_ALTIVEC" ! "vrfiz %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vperm_4si" *************** *** 1386,1406 **** [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 148))] "TARGET_ALTIVEC" ! "vrfip %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfin" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 149))] "TARGET_ALTIVEC" ! "vrfin %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfim" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 150))] "TARGET_ALTIVEC" ! "vrfim %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfux" --- 1386,1406 ---- [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 148))] "TARGET_ALTIVEC" ! "vrfip %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfin" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 149))] "TARGET_ALTIVEC" ! "vrfin %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrfim" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 150))] "TARGET_ALTIVEC" ! "vrfim %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfux" *************** *** 1408,1414 **** (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 151))] "TARGET_ALTIVEC" ! "vcfux %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfsx" --- 1408,1414 ---- (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 151))] "TARGET_ALTIVEC" ! "vcfux %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vcfsx" *************** *** 1416,1422 **** (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 152))] "TARGET_ALTIVEC" ! "vcfsx %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctuxs" --- 1416,1422 ---- (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") (match_operand:QI 2 "immediate_operand" "i")] 152))] "TARGET_ALTIVEC" ! "vcfsx %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctuxs" *************** *** 1425,1431 **** (match_operand:QI 2 "immediate_operand" "i")] 153)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctuxs %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctsxs" --- 1425,1431 ---- (match_operand:QI 2 "immediate_operand" "i")] 153)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctuxs %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vctsxs" *************** *** 1434,1468 **** (match_operand:QI 2 "immediate_operand" "i")] 154)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctsxs %0, %1, %2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vlogefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 155))] "TARGET_ALTIVEC" ! "vlogefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vexptefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 156))] "TARGET_ALTIVEC" ! "vexptefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrsqrtefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 157))] "TARGET_ALTIVEC" ! "vrsqrtefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 158))] "TARGET_ALTIVEC" ! "vrefp %0, %1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vsel_4si" --- 1434,1468 ---- (match_operand:QI 2 "immediate_operand" "i")] 154)) (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] "TARGET_ALTIVEC" ! "vctsxs %0,%1,%2" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vlogefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 155))] "TARGET_ALTIVEC" ! "vlogefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vexptefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 156))] "TARGET_ALTIVEC" ! "vexptefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrsqrtefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 157))] "TARGET_ALTIVEC" ! "vrsqrtefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vrefp" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 158))] "TARGET_ALTIVEC" ! "vrefp %0,%1" [(set_attr "type" "vecfloat")]) (define_insn "altivec_vsel_4si" *************** *** 1507,1513 **** (match_operand:V4SI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 163))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_4sf" --- 1507,1513 ---- (match_operand:V4SI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 163))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_4sf" *************** *** 1516,1522 **** (match_operand:V4SF 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 164))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_8hi" --- 1516,1522 ---- (match_operand:V4SF 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 164))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_8hi" *************** *** 1525,1531 **** (match_operand:V8HI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 165))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_16qi" --- 1525,1531 ---- (match_operand:V8HI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 165))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vsldoi_16qi" *************** *** 1534,1582 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 166))] "TARGET_ALTIVEC" ! "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 167))] "TARGET_ALTIVEC" ! "vupkhsb %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 168))] "TARGET_ALTIVEC" ! "vupkhpx %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 169))] "TARGET_ALTIVEC" ! "vupkhsh %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 170))] "TARGET_ALTIVEC" ! "vupklsb %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 171))] "TARGET_ALTIVEC" ! "vupklpx %0, %1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 172))] "TARGET_ALTIVEC" ! "vupklsh %0, %1" [(set_attr "type" "vecperm")]) ;; AltiVec predicates. --- 1534,1582 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 166))] "TARGET_ALTIVEC" ! "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 167))] "TARGET_ALTIVEC" ! "vupkhsb %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 168))] "TARGET_ALTIVEC" ! "vupkhpx %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupkhsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 169))] "TARGET_ALTIVEC" ! "vupkhsh %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 170))] "TARGET_ALTIVEC" ! "vupklsb %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 171))] "TARGET_ALTIVEC" ! "vupklpx %0,%1" [(set_attr "type" "vecperm")]) (define_insn "altivec_vupklsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 172))] "TARGET_ALTIVEC" ! "vupklsh %0,%1" [(set_attr "type" "vecperm")]) ;; AltiVec predicates. *************** *** 1879,1885 **** (clobber (match_scratch:V4SF 2 "=&v")) (clobber (match_scratch:V4SF 3 "=&v"))] "TARGET_ALTIVEC" ! "vspltisw %2, -1\;vslw %3,%2,%2\;vandc %0,%1,%3" [(set_attr "type" "vecsimple") (set_attr "length" "12")]) --- 1879,1885 ---- (clobber (match_scratch:V4SF 2 "=&v")) (clobber (match_scratch:V4SF 3 "=&v"))] "TARGET_ALTIVEC" ! "vspltisw %2,-1\;vslw %3,%2,%2\;vandc %0,%1,%3" [(set_attr "type" "vecsimple") (set_attr "length" "12")]) From gcc-patches-return-75125-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 02:59:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16105 invoked by alias); 7 Jan 2003 02:59:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14717 invoked from network); 7 Jan 2003 02:55:42 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 7 Jan 2003 02:55:42 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h072tUI12006 for ; Mon, 6 Jan 2003 18:55:30 -0800 (PST) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Mon, 6 Jan 2003 18:55:26 -0800 Received: from apple.com (mrs1.apple.com [17.201.24.248]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id h072tPQ16524; Mon, 6 Jan 2003 18:55:25 -0800 (PST) Date: Mon, 6 Jan 2003 18:55:25 -0800 Subject: Re: [C++ PATCH] Fix PR 45, 3784 Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v548) Cc: gcc-patches@gcc.gnu.org, neroden@twcny.rr.com To: Nathan Sidwell From: Mike Stump In-Reply-To: <3E15C6D6.6020306@blueyonder.co.uk> Message-Id: <788ED09F-21EB-11D7-B9FA-003065A77310@apple.com> Content-Transfer-Encoding: 7bit Boy is this going to slow down compiles! :-( Not your fault, I'm just noting it. The solution is to canonicalize types, if only for cp_tree_equal! Abraham's has a test case at: http://users.rcn.com/abrahams/instantiation_speed/index.html Compile with REPEATS=100 for fun. If you really slowed it down, you may want to start with 10 or 20. I think that should be able help characterize the slowdown, if you're interested. If anyone wants to speed it up, before you start, I have patches that fix most of the problems, except for the canonicalization part. That part would be useful to work on. If not, I suspect I'll get a chance come back to this at some point. Note - I didn't try this out on a compile with your change in it, but I have seen how often we come through this code with the testcase, I suspect a good sized hit on compile speed, but I could be wrong. On Friday, January 3, 2003, at 09:22 AM, Nathan Sidwell wrote: > 2002-12-26 Nathan Sidwell > > PR c++/45, c++/3784 > * tree.c (cp_tree_equal, TEMPLATE_PARM_INDEX): The types must be > the same too. From gcc-patches-return-75126-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 03:04:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17559 invoked by alias); 7 Jan 2003 03:04:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17543 invoked from network); 7 Jan 2003 03:04:10 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 03:04:10 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h0730Xo11825; Mon, 6 Jan 2003 19:00:33 -0800 Date: Mon, 06 Jan 2003 19:00:31 -0800 From: Mark Mitchell To: Janis Johnson , "gcc-patches@gcc.gnu.org" Subject: Re: [doc-patch] fix PR 8947 with addition to invoke.texi Message-ID: <33870000.1041908431@warlock.codesourcery.com> In-Reply-To: <20030106153904.A8081@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Monday, January 06, 2003 03:39:04 PM -0800 Janis Johnson wrote: > This patch fixes PR 8947 by making it more explicit that an option > breaks binary compatibility. It also makes a markup fix and updates > the copyright for the file. > > OK for the mainline, 3.3-branch, and 3.2-branch? Yes. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75127-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 04:26:31 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31755 invoked by alias); 7 Jan 2003 04:26:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31733 invoked from network); 7 Jan 2003 04:26:28 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 7 Jan 2003 04:26:28 -0000 Received: from localhost (IDENT:yyx1frqzsxNQQ+vtt7HhPBHdNGpK5I/8@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h074QGlU029480 for ; Mon, 6 Jan 2003 23:26:16 -0500 Date: Mon, 06 Jan 2003 23:26:11 -0500 (EST) Message-Id: <20030106.232611.35471931.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.c: Remove useless variables. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to remove useless variables. Committed as obvious. Kazu Hirata 2003-01-06 Kazu Hirata * config/h8300/h8300.c (h8300_expand_prologue): Remove fsize. (h8300_expand_epilogue): Likewise. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.197 diff -u -r1.197 h8300.c --- h8300.c 5 Jan 2003 15:47:36 -0000 1.197 +++ h8300.c 7 Jan 2003 04:18:08 -0000 @@ -502,7 +502,6 @@ void h8300_expand_prologue () { - int fsize = round_frame_size (get_frame_size ()); int regno; int saved_regs; int n_regs; @@ -526,7 +525,7 @@ } /* Leave room for locals. */ - dosize (-1, fsize); + dosize (-1, round_frame_size (get_frame_size ())); /* Push the rest of the registers in ascending order. */ saved_regs = compute_saved_regs (); @@ -592,7 +591,6 @@ void h8300_expand_epilogue () { - int fsize = round_frame_size (get_frame_size ()); int regno; int saved_regs; int n_regs; @@ -652,7 +650,7 @@ } /* Deallocate locals. */ - dosize (1, fsize); + dosize (1, round_frame_size (get_frame_size ())); /* Pop frame pointer if we had one. */ if (frame_pointer_needed) From gcc-patches-return-75128-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 04:35:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2696 invoked by alias); 7 Jan 2003 04:35:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2689 invoked from network); 7 Jan 2003 04:35:20 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 7 Jan 2003 04:35:20 -0000 Received: from localhost (IDENT:SMdGWYdpN5A2giR+RJAv3w3Eg6cXRaHD@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h074Z7lU030309 for ; Mon, 6 Jan 2003 23:35:08 -0500 Date: Mon, 06 Jan 2003 23:35:07 -0500 (EST) Message-Id: <20030106.233507.23008504.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.c: Constify some variables. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -5, Required: 5 X-Spam-Tests: UNIFIED_PATCH X-Spam-Report: SPAM: -5 hits, 5 required; SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to constify some variables. Committed as obvious. Kazu Hirata 2003-01-06 Kazu Hirata * config/h8300/h8300.c (final_prescan_insn): Constify uid. (output_logical_op): Constify intval and det. (compute_logical_length): Likewise. (compute_logical_cc): Likewise. (output_a_shift): Constify mask. (h8300_encode_label): Constify len. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.198 diff -u -r1.198 h8300.c --- h8300.c 7 Jan 2003 04:25:58 -0000 1.198 +++ h8300.c 7 Jan 2003 04:27:51 -0000 @@ -1609,7 +1609,7 @@ /* This holds the last insn address. */ static int last_insn_address = 0; - int uid = INSN_UID (insn); + const int uid = INSN_UID (insn); if (TARGET_RTL_DUMP) { @@ -2055,12 +2055,12 @@ /* Figure out the logical op that we need to perform. */ enum rtx_code code = GET_CODE (operands[3]); /* Pretend that every byte is affected if both operands are registers. */ - unsigned HOST_WIDE_INT intval = + const unsigned HOST_WIDE_INT intval = (unsigned HOST_WIDE_INT) ((GET_CODE (operands[2]) == CONST_INT) ? INTVAL (operands[2]) : 0x55555555); /* The determinant of the algorithm. If we perform an AND, 0 affects a bit. Otherwise, 1 affects a bit. */ - unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; + const unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; /* The name of an insn. */ const char *opname; char insn_buf[100]; @@ -2208,12 +2208,12 @@ /* Figure out the logical op that we need to perform. */ enum rtx_code code = GET_CODE (operands[3]); /* Pretend that every byte is affected if both operands are registers. */ - unsigned HOST_WIDE_INT intval = + const unsigned HOST_WIDE_INT intval = (unsigned HOST_WIDE_INT) ((GET_CODE (operands[2]) == CONST_INT) ? INTVAL (operands[2]) : 0x55555555); /* The determinant of the algorithm. If we perform an AND, 0 affects a bit. Otherwise, 1 affects a bit. */ - unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; + const unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; /* Insn length. */ unsigned int length = 0; @@ -2330,12 +2330,12 @@ /* Figure out the logical op that we need to perform. */ enum rtx_code code = GET_CODE (operands[3]); /* Pretend that every byte is affected if both operands are registers. */ - unsigned HOST_WIDE_INT intval = + const unsigned HOST_WIDE_INT intval = (unsigned HOST_WIDE_INT) ((GET_CODE (operands[2]) == CONST_INT) ? INTVAL (operands[2]) : 0x55555555); /* The determinant of the algorithm. If we perform an AND, 0 affects a bit. Otherwise, 1 affects a bit. */ - unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; + const unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; /* Condition code. */ enum attr_cc cc = CC_CLOBBER; @@ -3245,9 +3245,9 @@ case SHIFT_ROT_AND: { int m = GET_MODE_BITSIZE (mode) - n; - int mask = (shift_type == SHIFT_ASHIFT - ? ((1 << m) - 1) << n - : (1 << m) - 1); + const int mask = (shift_type == SHIFT_ASHIFT + ? ((1 << m) - 1) << n + : (1 << m) - 1); char insn_buf[200]; /* Not all possibilities of rotate are supported. They shouldn't @@ -3912,7 +3912,7 @@ tree decl; { const char *str = XSTR (XEXP (DECL_RTL (decl), 0), 0); - int len = strlen (str); + const int len = strlen (str); char *newstr = alloca (len + 2); newstr[0] = '&'; From gcc-patches-return-75129-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 05:20:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13788 invoked by alias); 7 Jan 2003 05:20:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12137 invoked from network); 7 Jan 2003 05:15:43 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 7 Jan 2003 05:15:43 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h074luB32427; Mon, 6 Jan 2003 23:47:56 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h075FVa00700; Tue, 7 Jan 2003 00:15:31 -0500 Received: from frogsleap.quesejoda.com (sebastian-int.corp.redhat.com [172.16.52.221]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h075FPn18229; Tue, 7 Jan 2003 00:15:30 -0500 Received: by frogsleap.quesejoda.com (Postfix, from userid 500) id 369FC3C27B; Mon, 6 Jan 2003 21:15:10 -0800 (PST) Date: Mon, 6 Jan 2003 21:15:10 -0800 From: Aldy Hernandez To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org Subject: Re: [altivec] fix crashes when using -dXXX Message-ID: <20030107051510.GA28562@redhat.com> References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> <3E16898E.F681C63E@koffie.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <3E16898E.F681C63E@koffie.nl> User-Agent: Mutt/1.4i On Sat, Jan 04, 2003 at 08:13:19AM +0100, Segher Boessenkool wrote: > vscr and the spe registers were missing from some tables; this causes > randomish crashes (and garbage in output) when using -da or the likes. > This happens since a few months already at least, so maybe apply to the > 3.3/3.2 branches too? This is OK. I've committed your patch to 3.3 and mainline. Thank you Segher. Aldy From gcc-patches-return-75130-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 05:34:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18591 invoked by alias); 7 Jan 2003 05:34:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16255 invoked from network); 7 Jan 2003 05:29:13 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 7 Jan 2003 05:29:13 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h0751QB01742; Tue, 7 Jan 2003 00:01:26 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h075T1a02727; Tue, 7 Jan 2003 00:29:01 -0500 Received: from frogsleap.quesejoda.com (sebastian-int.corp.redhat.com [172.16.52.221]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h075Sjn18587; Tue, 7 Jan 2003 00:28:50 -0500 Received: by frogsleap.quesejoda.com (Postfix, from userid 500) id 7E9D53C27B; Mon, 6 Jan 2003 21:24:08 -0800 (PST) Date: Mon, 6 Jan 2003 21:24:08 -0800 From: Aldy Hernandez To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org, dje@watson.ibm.com, geoffk@geoffk.org Subject: Re: [altivec] patch for gcc.dg/altivec-5.c Message-ID: <20030107052408.GA28589@redhat.com> References: <252454AE-1E54-11D7-9C31-000393750C1E@redhat.com> <3E168ABF.2E31E13C@koffie.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <3E168ABF.2E31E13C@koffie.nl> User-Agent: Mutt/1.4i I'm going to punt this off to David or Geoff because I don't quite agree (but I may be wrong). AltiVec only accepts [REG+REG], so I'm confused why you would accept an invalid addressing mode. Perhaps your patch is hiding some other bug? Geoff? David? On Sat, Jan 04, 2003 at 08:18:23AM +0100, Segher Boessenkool wrote: > With this patch, the compiler doesn't ICE anymore, and generates > valid output. It still does a lwz from a non-aligned address > though, but I think that's unrelated: that vector is passed on > the stack, so GCC will have to handle it somehow. > > > > 2002-12-29 Segher Boessenkool > > * config/rs6000/rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): > Fix gcc.dg/altivec-5.c, by accepting reg+offset addressing > until reload phase. > > > > *** ../../gcc-clean/gcc/config/rs6000/rs6000.h Fri Dec 27 03:21:40 2002 > --- ./config/rs6000/rs6000.h Sun Dec 29 04:43:53 2002 > *************** typedef struct rs6000_args > *** 2065,2072 **** > && GET_CODE (XEXP (X, 0)) == REG \ > && INT_REG_OK_FOR_BASE_P (XEXP (X, 0), (STRICT)) \ > && LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 0) \ > ! && (! ALTIVEC_VECTOR_MODE (MODE) \ > ! || (GET_CODE (XEXP (X,1)) == CONST_INT && INTVAL (XEXP (X,1)) == 0)) \ > && (! SPE_VECTOR_MODE (MODE) \ > || (GET_CODE (XEXP (X, 1)) == CONST_INT \ > && SPE_CONST_OFFSET_OK (INTVAL (XEXP (X, 1))))) \ > --- 2065,2073 ---- > && GET_CODE (XEXP (X, 0)) == REG \ > && INT_REG_OK_FOR_BASE_P (XEXP (X, 0), (STRICT)) \ > && LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 0) \ > ! && (! ALTIVEC_VECTOR_MODE (MODE) \ > ! || (GET_CODE (XEXP (X,1)) == CONST_INT \ > ! && (! STRICT || INTVAL (XEXP (X,1)) == 0))) \ > && (! SPE_VECTOR_MODE (MODE) \ > || (GET_CODE (XEXP (X, 1)) == CONST_INT \ > && SPE_CONST_OFFSET_OK (INTVAL (XEXP (X, 1))))) \ From gcc-patches-return-75131-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 08:34:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21605 invoked by alias); 7 Jan 2003 08:34:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21591 invoked from network); 7 Jan 2003 08:34:30 -0000 Received: from unknown (HELO devserv.devel.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 7 Jan 2003 08:34:30 -0000 Received: (from jakub@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) id h078YFU32165; Tue, 7 Jan 2003 03:34:15 -0500 Date: Tue, 7 Jan 2003 03:34:15 -0500 From: Jakub Jelinek To: Mark Mitchell Cc: Eric Botcazou , "gcc-patches@gcc.gnu.org" Subject: Re: 3 pending patches from 2002 Message-ID: <20030107033415.B24226@devserv.devel.redhat.com> Reply-To: Jakub Jelinek References: <200301062355.37371.ebotcazou@libertysurf.fr> <14980000.1041902728@warlock.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <14980000.1041902728@warlock.codesourcery.com>; from mark@codesourcery.com on Mon, Jan 06, 2003 at 05:25:28PM -0800 On Mon, Jan 06, 2003 at 05:25:28PM -0800, Mark Mitchell wrote: > struct S { int a; int b; int c; int d; }; > > struct S s = { .c = 3, .a = 7, 6 }; > > I don't remember what the "6" is supposed to initialize (b? d?), but > we should make sure your patch does the right thing. It should initialize .b = 6. Jakub From gcc-patches-return-75132-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 09:10:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22415 invoked by alias); 7 Jan 2003 09:10:05 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22407 invoked from network); 7 Jan 2003 09:10:02 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 7 Jan 2003 09:10:02 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 81A2B3FB2; Tue, 7 Jan 2003 10:09:50 +0100 (CET) Date: Tue, 7 Jan 2003 10:09:50 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: Re: Fix latent bug in optabs Message-ID: <20030107090950.GA3494@artax.karlin.mff.cuni.cz> References: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> User-Agent: Mutt/1.3.28i Cau, muzu to commitnout do hammer branche? Melo by to opravit segfault pri buildovani ipv6calc na beta-i386 Pepa > when emiting a libcall whose parameter is large > (for example "struct { unsigned char b[128]; } bitvec;" ) > the loop is created to copy the parameter. > > When compiling my testcase, the REG_LIBCALL note was tried to attach to > NOTE_INSN_LOOP_BEG which of course did not success and the missing > REG_LIBCALL note caused a segfault in gcse. > However if the REG_LIBCALL note was attached to some "normal" instruction > it would be wrong because the block between REG_LIBCALL and REG_RETVAL > must be in a single basic block > but the loop copying the parameters was inside too. > > This patch checks whether the insns between REG_LIBCALL and REG_RETVAL > will be contained in a single basic block (by checking whether all > instructions are not control_flow_insn_p) and > if the insns will not be in a single basic block > the REG_LIBCALL and REG_RETVAL notes will not be emitted. > This fixes the problem with a source which made gcse to segfault. > > Bootstrapped/regtested mainline i386 (athlon). > OK for mainline and 3_3-branch? > > Josef > > > Sun Jan 5 15:47:06 CET 2003 Josef Zlomek > > * Makefile.in (optabs.o): Add dependencies on basic-block.h and > hard-reg-set.h. > * basic-block.h (control_flow_insn_p): Fuction was exported. > * cfgbuild.c (control_flow_insn_p): Fuction was made non-static. > * optabs.c (emit_libcall_block): Emit REG_LIBCALL and REG_RETVAL > notes only when the region is contained in a single basic block. From gcc-patches-return-75133-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 09:11:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22891 invoked by alias); 7 Jan 2003 09:11:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22865 invoked from network); 7 Jan 2003 09:11:05 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 7 Jan 2003 09:11:05 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 99A703FD2; Tue, 7 Jan 2003 10:10:53 +0100 (CET) Date: Tue, 7 Jan 2003 10:10:53 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: Re: Fix latent bug in optabs Message-ID: <20030107091053.GA3627@artax.karlin.mff.cuni.cz> References: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> <20030107090950.GA3494@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107090950.GA3494@artax.karlin.mff.cuni.cz> User-Agent: Mutt/1.3.28i I'm sorry, this is private mail. From gcc-patches-return-75134-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 10:07:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14331 invoked by alias); 7 Jan 2003 10:07:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14322 invoked from network); 7 Jan 2003 10:07:40 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 7 Jan 2003 10:07:40 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18Vqds-00062z-00; Tue, 07 Jan 2003 10:07:28 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18Vqds-0004Zp-00; Tue, 07 Jan 2003 10:07:28 +0000 Date: Tue, 7 Jan 2003 10:07:24 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Janis Johnson cc: Subject: Re: [doc-patch] fix PR 8947 with addition to invoke.texi In-Reply-To: <20030106153904.A8081@us.ibm.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 6 Jan 2003, Janis Johnson wrote: > --- invoke.texi 31 Dec 2002 14:59:09 -0000 1.218 > +++ invoke.texi 6 Jan 2003 23:27:18 -0000 > @@ -1,12 +1,12 @@ > @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, > -@c 2000, 2001, 2002 Free Software Foundation, Inc. > +@c 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Remember when updating copyright notices on subsidiary files in manuals that the overall notice that gets printed in the manual (in this case, in gcc.texi) needs updating as well. (Files included in gccint.texi have also been changed in 2003 without the copyright notice being updated. For changes to code, --version copyright dates may need updating.) -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75135-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 10:37:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20660 invoked by alias); 7 Jan 2003 10:37:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20070 invoked from network); 7 Jan 2003 10:34:32 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 7 Jan 2003 10:34:32 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-18.rdu.redhat.com [172.16.50.18]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 06576ABAF8; Tue, 7 Jan 2003 10:34:19 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h07AYjG04675; Tue, 7 Jan 2003 10:34:45 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15898.44357.760630.936775@cuddles.cambridge.redhat.com> Date: Tue, 7 Jan 2003 10:34:45 +0000 (GMT) To: tromey@redhat.com Cc: Gcc Patch List , Java Patch List Subject: Patch: avoid crash with gcj -fno-assume-compiled In-Reply-To: <87lm1xddjd.fsf@fleche.redhat.com> References: <87lm1xddjd.fsf@fleche.redhat.com> Tom Tromey writes: > Index: ChangeLog > from Tom Tromey > > * class.c (add_assume_compiled): Don't adjust parent if we're > already at the root of tree. OK. Last time I looked there were other bugs in that code too. Andrew. From gcc-patches-return-75136-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 11:08:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31903 invoked by alias); 7 Jan 2003 11:08:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31892 invoked from network); 7 Jan 2003 11:08:04 -0000 Received: from unknown (HELO mail.brainstorm.co.uk) (217.169.5.196) by 209.249.29.67 with SMTP; 7 Jan 2003 11:08:04 -0000 Received: from nicola.brainstorm.co.uk (nicola.brainstorm.co.uk [192.168.4.138]) by mail.brainstorm.co.uk (8.11.4/8.11.4) with ESMTP id h07B7SG18053; Tue, 7 Jan 2003 11:07:28 GMT Date: Tue, 7 Jan 2003 11:07:28 +0000 (GMT) From: Nicola Pero To: shebs@apple.com cc: gcc-patches@gcc.gnu.org, "Timothy J. Wood" Subject: patch: libobjc.def missing some useful symbols Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Since we are talking of building libobjc as a DLL on Windows, libobjc.def is missing some symbols - this patch adds them (this is basically a merge from gnustep's own libobjc branch, where libobjc.def is/was used regularly, and these new symbols were added to libobjc.def). Is CVS HEAD open again for such commits ? If so, Stan, is it Ok to commit it ? Tue Jan 7 12:02:06 2003 Nicola Pero * libobjc.def (__objc_runtime_mutex, __objc_is_multi_threaded, __objc_runtime_threads_alive, objc_set_thread_callback, objc_condition_allocate, objc_condition_deallocate, objc_condition_wait, objc_condition_broadcast, objc_condition_signal, objc_set_error_handler): Added. Index: libobjc.def =================================================================== RCS file: /cvs/gcc/gcc/libobjc/libobjc.def,v retrieving revision 1.3 diff -u -r1.3 libobjc.def --- libobjc.def 15 Mar 2001 02:18:09 -0000 1.3 +++ libobjc.def 12 Sep 2002 11:06:58 -0000 @@ -60,6 +60,15 @@ __objc_init_selector_tables __objc_register_selectors_from_class __sel_register_typed_name +__objc_runtime_mutex +__objc_is_multi_threaded +__objc_runtime_threads_alive +objc_set_thread_callback +objc_condition_allocate +objc_condition_deallocate +objc_condition_wait +objc_condition_broadcast +objc_condition_signal sel_get_any_typed_uid sel_get_any_uid sel_get_name @@ -161,3 +170,4 @@ hash_next hash_remove hash_value_for_key +objc_set_error_handler From gcc-patches-return-75137-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 11:48:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11990 invoked by alias); 7 Jan 2003 11:48:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11964 invoked from network); 7 Jan 2003 11:47:58 -0000 Received: from unknown (HELO mail.libertysurf.net) (213.36.80.91) by 209.249.29.67 with SMTP; 7 Jan 2003 11:47:58 -0000 Received: from localhost.localdomain (212.83.141.3) by mail.libertysurf.net (6.5.026) id 3DE4935E0057BFCA for gcc-patches@gcc.gnu.org; Tue, 7 Jan 2003 12:47:46 +0100 Content-Type: text/plain; charset="iso-8859-1" From: Eric Botcazou To: "gcc-patches@gcc.gnu.org" Subject: Re: 3 pending patches from 2002 Date: Tue, 7 Jan 2003 12:48:14 +0100 User-Agent: KMail/1.4.1 References: <14980000.1041902728@warlock.codesourcery.com> In-Reply-To: <14980000.1041902728@warlock.codesourcery.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200301071248.14217.ebotcazou@libertysurf.fr> > > PR c/8032: > > http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01636.html > > Probably not worth applying on the 3.2 branch. > > Does this work if the constructor is skipping around a lot, e.g.: > > struct S { int a; int b; int c; int d; }; > > struct S s =3D { .c =3D 3, .a =3D 7, 6 }; > > I don't remember what the "6" is supposed to initialize (b? d?), but > we should make sure your patch does the right thing. Ok, I'm going to more thoroughly test this stuff, before and after my pat= ch. > > PR inline-asm/8832: (former optimization/8832): > > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00721.html > > Same thing. > > OK for all affected branches. (Sorry if you have already considered it) I'd like to have some comments = on=20 the testcase: /* PR inline-asm/8832 */ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* Verify that GCC doesn't optimize old style asm instructions. */ void foo(int v) { if (v) asm ("dummy1"); asm ("dummy2"); if (v) asm ("dummy3"); } /* { dg-final { scan-assembler "L2" } } */ gcc-3.2.2 optimizes away the dummy1 and dummy2 statements, while gcc-3.3 = and=20 gcc-3.4 include the dummy2 statement in the "if (v)" test. So it is suffi= cient=20 to test that we have two reachable labels, hence the assembly scan for "L= 2". Is that robust ? If no, how should I write the testcase ? --=20 Eric Botcazou From gcc-patches-return-75138-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 11:56:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19133 invoked by alias); 7 Jan 2003 11:56:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19112 invoked from network); 7 Jan 2003 11:56:05 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 7 Jan 2003 11:56:05 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h07Bt4Y13847; Tue, 7 Jan 2003 06:55:11 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h07BsXO2011905; Tue, 7 Jan 2003 09:54:33 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h07BsJ8j011888; Tue, 7 Jan 2003 09:54:19 -0200 To: David Edelsohn Cc: Nathanael Nerode , gcc-patches@gcc.gnu.org Subject: Re: GCC top-level configure versus contrib/test_summary References: <200212302057.PAA29930@makai.watson.ibm.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 07 Jan 2003 09:54:18 -0200 In-Reply-To: <200212302057.PAA29930@makai.watson.ibm.com> Message-ID: Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= On Dec 30, 2002, David Edelsohn wrote: > contrib/test_summary needs to be updated. It may still be confused by > other items in the new config.status. Fixed with the following patch. Sorry that it took so long... Nathan, I saw your patch (a bit too late :-) and it seems like it does fix part of the problem, indeed, but since I'd cleaned some other stuff up while at that, I thought I'd put mine in. Sorry 'bout wasting your efforts. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=testsum-configflags.patch Index: contrib/ChangeLog from Alexandre Oliva * test_summary (configflags): Compute correctly with both autoconfiscated and Cygnus-style top-level. Index: contrib/test_summary =================================================================== RCS file: /cvs/gcc/gcc/contrib/test_summary,v retrieving revision 1.21 diff -u -p -r1.21 test_summary --- contrib/test_summary 16 May 2002 17:41:58 -0000 1.21 +++ contrib/test_summary 7 Jan 2003 11:50:39 -0000 @@ -94,16 +94,19 @@ BEGIN { print "cat <<'"'"'EOF'"'"' |"; '${prepend_logs+" system(\"cat $prepend_logs\"); "}' } -$1 ~ /\/configure$/ { - srcdir = $1; - gsub(/\/configure$/, "", srcdir); +$0 ~ /^(|# )[^ ]*\/configure / { + configflags = $0 " "; + gsub(/^# /, "", configflags); + srcdir = configflags; + gsub(/\/configure .*/, "", srcdir); printf "LAST_UPDATED: "; system("tail -1 " srcdir "/LAST_UPDATED"); print ""; - $1 = "configure flags:"; configflags = $0; - gsub(/--with-gcc-version-trigger=[^ ]* /, "", configflags); - gsub(/ --norecursion/, "", configflags) + gsub(/^[^ ]*\/configure /, "configure flags: ", configflags); + gsub(/ --with-gcc-version-trigger=[^ ]* /, " ", configflags); + gsub(/ --norecursion /, " ", configflags); + gsub(/ $/, "", configflags); } /^Running target / { print ""; print; } /^Target / { if (host != "") next; else host = $3; } --=-=-= -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer --=-=-=-- From gcc-patches-return-75139-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 12:09:46 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31952 invoked by alias); 7 Jan 2003 12:09:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31929 invoked from network); 7 Jan 2003 12:09:42 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by 209.249.29.67 with SMTP; 7 Jan 2003 12:09:42 -0000 Received: by fw-cam.cambridge.arm.com; id MAA28352; Tue, 7 Jan 2003 12:09:29 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xmaa27178; Tue, 7 Jan 03 12:08:37 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id MAA15955; Tue, 7 Jan 2003 12:08:36 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h07C8aD02450; Tue, 7 Jan 2003 12:08:36 GMT Message-Id: <200301071208.h07C8aD02450@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: Alexandre Oliva cc: Ulrich Weigand , dje@watson.ibm.com, drow@mvista.com, hpenner@de.ibm.com, gcc-patches@gcc.gnu.org, Richard.Earnshaw@arm.com Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: Re: S/390: -march= and -mcpu= options In-reply-to: Your message of "24 Dec 2002 19:15:12 -0200." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 07 Jan 2003 12:08:33 +0000 From: Richard Earnshaw > On Dec 23, 2002, Ulrich Weigand wrote: > > >> Second, the people who participated in the earlier discussion > >> agreed that there should be a shorthand. > > > Why shouldn't -march=z900 be enough? > > It should. IMHO, any sane implementation of -march/-mtune should tune > for the specified arch unless an -mtune argument is present, which > renders -mcpu (which is an alias for -march -mtune) totally useless. > > The only exception I can think of is in case the default tuning is > something actually more recent than the default arch, in which case > someone might want to downgrade the arch without downgrading tuning. > This probably happens seldom enough, if ever, that arranging for > -march to be the -mtune default is perfectly reasonable. > The problem here is that tuning for an architecture (ie an abstract ISA) can be meaningless. There can be multiple implementations of an ISA with different trade-offs. You just can't guess and give good results. R. From gcc-patches-return-75140-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 13:39:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24954 invoked by alias); 7 Jan 2003 13:39:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24642 invoked from network); 7 Jan 2003 13:36:30 -0000 Received: from unknown (HELO newton.math.purdue.edu) (128.210.3.6) by 209.249.29.67 with SMTP; 7 Jan 2003 13:36:30 -0000 Received: from banach.math.purdue.edu (lucier@banach.math.purdue.edu [128.210.3.16]) by newton.math.purdue.edu (8.10.1/8.10.1/PURDUE_MATH-4.0) with ESMTP id h07DaEW22878; Tue, 7 Jan 2003 08:36:14 -0500 (EST) Received: (from lucier@localhost) by banach.math.purdue.edu (8.10.1/8.10.1/PURDUE_MATH-4.0) id h07DaDm06424; Tue, 7 Jan 2003 08:36:13 -0500 (EST) From: Brad Lucier Message-Id: <200301071336.h07DaDm06424@banach.math.purdue.edu> Subject: Re: RFC: hex constants in const_int (plus small altivec problem) To: aldyh@redhat.com Date: Tue, 7 Jan 2003 08:36:13 -0500 (EST) Cc: gcc-patches@gcc.gnu.org, rth@redhat.com, lucier@math.purdue.edu (Brad Lucier) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Instead of implementing altivec single precision fp vector multiply as fmadd with -0.0, perhaps doing it as an fmsub with +0.0 would require a shorter instruction sequence. Brad From gcc-patches-return-75141-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 13:55:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11027 invoked by alias); 7 Jan 2003 13:55:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11016 invoked from network); 7 Jan 2003 13:55:14 -0000 Received: from unknown (HELO garibaldi.home) (62.30.75.143) by 209.249.29.67 with SMTP; 7 Jan 2003 13:55:14 -0000 Received: from codesourcery.com (localhost.localdomain [127.0.0.1]) by garibaldi.home (8.12.5/8.12.5) with ESMTP id h07Dsx1p004063; Tue, 7 Jan 2003 13:54:59 GMT Message-ID: <3E1ADC33.8050408@codesourcery.com> Date: Tue, 07 Jan 2003 13:54:59 +0000 From: Nathan Sidwell User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20021003 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Mark Mitchell CC: gcc-patches@gcc.gnu.org Subject: [C++ PATCH]: Fix 9212 Content-Type: multipart/mixed; boundary="------------070207040603060404080200" This is a multi-part message in MIME format. --------------070207040603060404080200 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Mark, this fixes 9212, a parsing error. Although this is an obvious fix, it is not 'orthogonally-clean', in that CP_PARSER_DECLARATOR_EITHER also means 'need unqualified-id'. A theoretically cleaner patch would have to pass something else down. built & tested on i686-pc-linux-gnu, ok? nathan -- Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC The voices in my head said this was stupid too nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org --------------070207040603060404080200 Content-Type: text/plain; name="9212.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="9212.patch" 2003-01-07 Nathan Sidwell PR C++/9212 * parser.c (cp_parser_direct_declarator): If accepting either abstract or named, the name must be an unqualified-id. Index: cp/parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.20 diff -c -3 -p -r1.20 parser.c *** cp/parser.c 6 Jan 2003 18:40:18 -0000 1.20 --- cp/parser.c 7 Jan 2003 13:49:16 -0000 *************** typedef enum cp_parser_declarator_kind *** 1132,1138 **** CP_PARSER_DECLARATOR_ABSTRACT, /* We want a named declarator. */ CP_PARSER_DECLARATOR_NAMED, ! /* We don't mind. */ CP_PARSER_DECLARATOR_EITHER } cp_parser_declarator_kind; --- 1132,1138 ---- CP_PARSER_DECLARATOR_ABSTRACT, /* We want a named declarator. */ CP_PARSER_DECLARATOR_NAMED, ! /* We don't mind, but the name must be an unqualified-id */ CP_PARSER_DECLARATOR_EITHER } cp_parser_declarator_kind; *************** cp_parser_direct_declarator (parser, dcl *** 10302,10317 **** if (dcl_kind == CP_PARSER_DECLARATOR_EITHER) cp_parser_parse_tentatively (parser); declarator = cp_parser_declarator_id (parser); ! if (dcl_kind == CP_PARSER_DECLARATOR_EITHER ! && !cp_parser_parse_definitely (parser)) ! declarator = error_mark_node; if (declarator == error_mark_node) break; if (TREE_CODE (declarator) == SCOPE_REF) { tree scope = TREE_OPERAND (declarator, 0); ! /* In the declaration of a member of a template class outside of the class itself, the SCOPE will sometimes be a TYPENAME_TYPE. For example, given: --- 10302,10325 ---- if (dcl_kind == CP_PARSER_DECLARATOR_EITHER) cp_parser_parse_tentatively (parser); declarator = cp_parser_declarator_id (parser); ! if (dcl_kind == CP_PARSER_DECLARATOR_EITHER) ! { ! if (!cp_parser_parse_definitely (parser)) ! declarator = error_mark_node; ! else if (TREE_CODE (declarator) != IDENTIFIER_NODE) ! { ! cp_parser_error (parser, "expected unqualified-id"); ! declarator = error_mark_node; ! } ! } ! if (declarator == error_mark_node) break; if (TREE_CODE (declarator) == SCOPE_REF) { tree scope = TREE_OPERAND (declarator, 0); ! /* In the declaration of a member of a template class outside of the class itself, the SCOPE will sometimes be a TYPENAME_TYPE. For example, given: --------------070207040603060404080200 Content-Type: text/plain; name="9212.C" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="9212.C" // { dg-do compile } // Copyright (C) 2003 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 6 Jan 2003 // PR 9212. We erroneously accepted an ill-formed // function-declaration, rather than a variable initializer. struct A { enum E { e }; A(E); }; struct B { enum F { f }; B(F); }; struct C { C(A, B, A); }; C c(A(A::e), B(B::f), A(A::e)); // This is not a function declaration --------------070207040603060404080200-- From gcc-patches-return-75142-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 14:04:34 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13905 invoked by alias); 7 Jan 2003 14:04:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13896 invoked from network); 7 Jan 2003 14:04:31 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 14:04:31 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h07E0qo30219; Tue, 7 Jan 2003 06:00:52 -0800 Date: Tue, 07 Jan 2003 06:00:51 -0800 From: Mark Mitchell To: Eric Botcazou cc: "gcc-patches@gcc.gnu.org" Subject: Re: 3 pending patches from 2002 Message-ID: <49220000.1041948051@warlock.codesourcery.com> In-Reply-To: <200301071212.16678.ebotcazou@libertysurf.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Tuesday, January 07, 2003 12:14:13 PM +0100 Eric Botcazou wrote: > gcc-3.2.2 optimizes away the dummy1 and dummy2 statements, while gcc-3.3 > and gcc-3.4 include the dummy2 statement in the "if (v)" test. So it is > sufficient to test that we have two reachable labels, hence the assembly > scan for "L2". > > Is that robust ? If no, how should I write the testcase ? I should have been more explicit. I looked at that, didn't like the test case, couldn't figure out how to do it better, and decided it was better than nothing. :-) -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75143-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 14:05:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14961 invoked by alias); 7 Jan 2003 14:05:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14947 invoked from network); 7 Jan 2003 14:05:28 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by 209.249.29.67 with SMTP; 7 Jan 2003 14:05:28 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h07E1po30225; Tue, 7 Jan 2003 06:01:51 -0800 Date: Tue, 07 Jan 2003 06:01:50 -0800 From: Mark Mitchell To: Nathan Sidwell cc: "gcc-patches@gcc.gnu.org" Subject: Re: [C++ PATCH]: Fix 9212 Message-ID: <49980000.1041948110@warlock.codesourcery.com> In-Reply-To: <3E1ADC33.8050408@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Tuesday, January 07, 2003 01:54:59 PM +0000 Nathan Sidwell wrote: > Mark, > this fixes 9212, a parsing error. Although this is an obvious fix, it > is not 'orthogonally-clean', in that CP_PARSER_DECLARATOR_EITHER also > means 'need unqualified-id'. A theoretically cleaner patch would have > to pass something else down. Ah, now you're seeing why I got scared. :-) > built & tested on i686-pc-linux-gnu, ok? Yes, but update the comment for CP_PARSER_DECLARATOR_EITHER. Thanks, -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75144-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 14:11:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18384 invoked by alias); 7 Jan 2003 14:11:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18373 invoked from network); 7 Jan 2003 14:11:34 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 7 Jan 2003 14:11:34 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 9EAA114C58; Tue, 7 Jan 2003 15:11:22 +0100 (MET) To: Christian Cornelssen , Alexandre Oliva Cc: Subject: Re: [3.4] DESTDIR support completed References: From: Andreas Jaeger Date: Tue, 07 Jan 2003 15:11:22 +0100 In-Reply-To: (Christian Cornelssen's message of "Fri, 3 Jan 2003 18:43:27 +0100 (CET)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Alexandre, is the patch now ok? I offer to commit the patch on behalf of Christian since he has no CVS access. But if you like to do it yourself, it's fine with me. I prefer to have these patches in soon since they touch quite a lot of places and I think we should not wait so long that they do not apply anymore. Thanks, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75145-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 14:36:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25905 invoked by alias); 7 Jan 2003 14:36:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25751 invoked from network); 7 Jan 2003 14:35:14 -0000 Received: from unknown (HELO talisman.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 7 Jan 2003 14:35:14 -0000 Received: (from rsandifo@localhost) by talisman.cambridge.redhat.com (8.11.6/8.11.6) id h07EZkT29095; Tue, 7 Jan 2003 14:35:46 GMT X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: cgd@broadcom.com Cc: gcc-patches@gcc.gnu.org, echristo@redhat.com Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. References: From: Richard Sandiford Date: 07 Jan 2003 14:35:46 +0000 In-Reply-To: Message-ID: Lines: 63 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii cgd@broadcom.com writes: > +/* ISA includes the MIPS32r2 ALU extensions other than rotates > + (seb, seh, ins, ext). Rotates are handled by ISA_HAS_ROTR_SI. */ > +#define ISA_HAS_ALU32R2 (!TARGET_MIPS16 \ > + && (ISA_MIPS32R2 \ > + )) > + Did you think about adding ISA_HAS_SEB_SEH? I'm not saying it's a good idea, but it does seem more consistent with the other ISA_HAS_* macros (e.g. ISA_HAS_NMADD_NMSUB). > @@ -94,6 +94,8 @@ Boston, MA 02111-1307, USA. */ > builtin_define ("__mips=4"); \ > else if (ISA_MIPS32) \ > builtin_define ("__mips=32"); \ > + else if (ISA_MIPS32R2) \ > + builtin_define ("__mips=33"); \ > else if (ISA_MIPS64) \ > builtin_define ("__mips=64"); \ Blech. ;) How about keeping __mips=32 and introducing a separate define for the ISA revision? It'd be nice not to expose this "32r2 == 33" thing to users. (Wonder if there'll ever be a mips32r32...) > @@ -7362,6 +7369,10 @@ Equivalent to @samp{-march=mips4}. > @item -mips32 > @opindex mips32 > Equivalent to @samp{-march=mips32}. > + > +@item -mips32r2 > +@opindex mips32r2 > +Equivalent to @samp{-march=mips32r2}. > > @item -mips64 > @opindex mips64 Does this option actually work? As far as I can tell, -mips32r2 == -mips32, since -mips* is interpreted using atoi(). I guess -mips33 will select 32r2 though. ;) Having an integer mips_isa has worked well so far, but now you're adding a second mips32 ISA, maybe mips_isa should become an enum instead (like mips_arch and mips_tune). E.g. enum mips_isa { ISA_MIPS1, ..., ISA_MIPS32, ISA_MIPS32R2, ... }; (deliberately aping the libopcodes definition). Then use mips_parse_cpu to interpret the -mips option. That'd get rid of all this "ISA 33" nastiness. There'd still need to be a special case for -mips16, of course. Actually, since we have target flags free, maybe -mips16 should go into TARGET_SWITCHES... Richard From gcc-patches-return-75146-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 15:22:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9281 invoked by alias); 7 Jan 2003 15:22:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9271 invoked from network); 7 Jan 2003 15:22:03 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 7 Jan 2003 15:22:03 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 3ABD714C63 for ; Tue, 7 Jan 2003 16:21:51 +0100 (MET) To: gcc-patches@gcc.gnu.org Subject: Ping (Re: Update m68k-*-linux* configuration) References: X-Yow: Hand me a pair of leather pants and a CASIO keyboard -- I'm living for today! From: Andreas Schwab Date: Tue, 07 Jan 2003 16:21:49 +0100 In-Reply-To: (Andreas Schwab's message of "Mon, 25 Nov 2002 23:00:11 +0100") Message-ID: Lines: 11 User-Agent: Gnus/5.090007 (Oort Gnus v0.07) Emacs/21.3.50 (ia64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Ok to check in? http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01556.html Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." From gcc-patches-return-75147-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 15:31:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12328 invoked by alias); 7 Jan 2003 15:31:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12011 invoked from network); 7 Jan 2003 15:30:29 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 7 Jan 2003 15:30:29 -0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 017C74EB0A; Tue, 7 Jan 2003 16:30:17 +0100 (CET) Date: Tue, 7 Jan 2003 16:30:17 +0100 From: Jan Hubicka To: Joel Sherrill , gcc-patches@gcc.gnu.org Cc: Matthias Klose , Jan Hubicka , Andreas Schwab Subject: Re: PR 8343 and and PR 9201 Message-ID: <20030107153017.GE27778@kam.mff.cuni.cz> References: <15898.36917.770.413581@gargle.gargle.HOWL> <3E1AEF57.1005B414@OARcorp.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E1AEF57.1005B414@OARcorp.com> User-Agent: Mutt/1.3.28i Hi, this fixes the first one. eliminate_virtual_regs replaces operand by operand validating after each replacement. In this case we do have two different places (becuase of match_dup) so it fails. Honza Tue Jan 7 18:30:35 CET 2003 Jan Hubicka PR target/8343 * m68k.md (umulsidi, mulsidi expanders): Use register operand. *** m68k.md.old Tue Jan 7 18:29:00 2003 --- m68k.md Tue Jan 7 18:30:24 2003 *************** *** 3122,3128 **** [(parallel [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) (mult:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "nonimmediate_operand" ""))) (set (subreg:SI (match_dup 0) 0) (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1)) (zero_extend:DI (match_dup 2))) --- 3122,3128 ---- [(parallel [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) (mult:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "register_operand" ""))) (set (subreg:SI (match_dup 0) 0) (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1)) (zero_extend:DI (match_dup 2))) *************** *** 3161,3167 **** [(parallel [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) (mult:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "nonimmediate_operand" ""))) (set (subreg:SI (match_dup 0) 0) (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1)) (sign_extend:DI (match_dup 2))) --- 3161,3167 ---- [(parallel [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) (mult:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "register_operand" ""))) (set (subreg:SI (match_dup 0) 0) (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1)) (sign_extend:DI (match_dup 2))) From gcc-patches-return-75148-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 15:42:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15932 invoked by alias); 7 Jan 2003 15:42:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15892 invoked from network); 7 Jan 2003 15:42:00 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 7 Jan 2003 15:42:00 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 7496714C69 for ; Tue, 7 Jan 2003 16:41:48 +0100 (MET) To: gcc-patches@gcc.gnu.org Subject: Build failure due to undefined PCC_BITFIELD_TYPE_MATTERS X-Yow: I'm changing the CHANNEL.. But all I get is commercials for ``RONCO MIRACLE BAMBOO STEAMERS''! From: Andreas Schwab Date: Tue, 07 Jan 2003 16:41:46 +0100 Message-ID: Lines: 43 User-Agent: Gnus/5.090007 (Oort Gnus v0.07) Emacs/21.3.50 (ia64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit This fixes building the C++ compiler on targets where PCC_BITFIELD_TYPE_MATTERS is not defined, like m68k-linux. Committed as obvious. Andreas. 2003-01-07 Andreas Schwab * class.c (layout_class_type): Don't use PCC_BITFIELD_TYPE_MATTERS if not defined. --- cp/class.c.~1.509.~ 2003-01-07 15:50:39.000000000 +0100 +++ cp/class.c 2003-01-07 16:33:31.000000000 +0100 @@ -1,6 +1,6 @@ /* Functions related to building classes and their related objects. Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GCC. @@ -5053,6 +5053,7 @@ layout_class_type (tree t, tree *virtual padding = size_binop (MINUS_EXPR, DECL_SIZE (field), TYPE_SIZE (integer_type)); } +#ifdef PCC_BITFIELD_TYPE_MATTERS /* An unnamed bitfield does not normally affect the alignment of the containing class on a target where PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not @@ -5064,6 +5065,7 @@ layout_class_type (tree t, tree *virtual was_unnamed_p = true; DECL_NAME (field) = make_anon_name (); } +#endif DECL_SIZE (field) = TYPE_SIZE (integer_type); DECL_ALIGN (field) = TYPE_ALIGN (integer_type); DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type); -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." From gcc-patches-return-75149-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:03:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25162 invoked by alias); 7 Jan 2003 16:03:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25151 invoked from network); 7 Jan 2003 16:02:59 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 7 Jan 2003 16:02:59 -0000 Received: from localhost (IDENT:Uk2ATkI+0TBt5QCQ1p5qQwGRKs0G74Zb@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h07G2klU028982 for ; Tue, 7 Jan 2003 11:02:46 -0500 Date: Tue, 07 Jan 2003 11:02:43 -0500 (EST) Message-Id: <20030107.110243.130783410.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.c: Optimize logical ops in SImode. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: 1.1, Required: 5 X-Spam-Level: * (1.1) X-Spam-Tests: DOUBLE_CAPSWORD X-Spam-Report: SPAM: 1.1 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to optimize logical ops in SImode. Without the patch, gcc converts A & 65534, where A is in SImode, to and.l #65534,er0 taking 6 bytes, where as the same thing can be done in 4 bytes as follows and #254,r0l sub.w e0,e0 This inefficiency comes from the fact that output_logical_op() does not fully detect optimizable cases. The patch simplifies and improves the detection at the same time. Tested on h8300 port. Committed. Kazu Hirata 2003-01-07 Kazu Hirata * config/h8300/h8300.c (output_logical_op): Simplify and optimize the handling of SImode. * config/h8300/h8300.c (compute_logical_op_length): Update accordingly. * config/h8300/h8300.c (compute_logical_op_cc): Likewise. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.199 diff -c -r1.199 h8300.c *** h8300.c 7 Jan 2003 04:34:30 -0000 1.199 --- h8300.c 7 Jan 2003 15:47:49 -0000 *************** *** 2061,2066 **** --- 2061,2073 ---- /* The determinant of the algorithm. If we perform an AND, 0 affects a bit. Otherwise, 1 affects a bit. */ const unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; + /* Break up DET into pieces. */ + const unsigned HOST_WIDE_INT b0 = (det >> 0) & 0xff; + const unsigned HOST_WIDE_INT b1 = (det >> 8) & 0xff; + const unsigned HOST_WIDE_INT w0 = (det >> 0) & 0xffff; + const unsigned HOST_WIDE_INT w1 = (det >> 16) & 0xffff; + int lower_half_easy_p = 0; + int upper_half_easy_p = 0; /* The name of an insn. */ const char *opname; char insn_buf[100]; *************** *** 2108,2127 **** } break; case SImode: ! /* First, see if we can finish with one insn. ! If code is either AND or XOR, we exclude two special cases, ! 0xffffff00 and 0xffff00ff, because insns like sub.w or not.w ! can do a better job. */ if ((TARGET_H8300H || TARGET_H8300S) ! && ((det & 0x0000ffff) != 0) ! && ((det & 0xffff0000) != 0) ! && (code == IOR || det != 0xffffff00) ! && (code == IOR || det != 0xffff00ff) ! && !(code == AND ! && (det == 0xff00ffff ! || (det & 0xffff00ff) == 0xff000000 ! || (det & 0xffffff00) == 0xff000000))) { sprintf (insn_buf, "%s.l\t%%S2,%%S0", opname); output_asm_insn (insn_buf, operands); --- 2115,2139 ---- } break; case SImode: ! if (TARGET_H8300H || TARGET_H8300S) ! { ! /* Determine if the lower half can be taken care of in no more ! than two bytes. */ ! lower_half_easy_p = (b0 == 0 ! || b1 == 0 ! || (code != IOR && w0 == 0xffff)); ! ! /* Determine if the upper half can be taken care of in no more ! than two bytes. */ ! upper_half_easy_p = ((code != IOR && w1 == 0xffff) ! || (code == AND && w1 == 0xff00)); ! } ! /* Check if doing everything with one insn is no worse than ! using multiple insns. */ if ((TARGET_H8300H || TARGET_H8300S) ! && w0 != 0 && w1 != 0 ! && !(lower_half_easy_p && upper_half_easy_p)) { sprintf (insn_buf, "%s.l\t%%S2,%%S0", opname); output_asm_insn (insn_buf, operands); *************** *** 2214,2219 **** --- 2226,2238 ---- /* The determinant of the algorithm. If we perform an AND, 0 affects a bit. Otherwise, 1 affects a bit. */ const unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; + /* Break up DET into pieces. */ + const unsigned HOST_WIDE_INT b0 = (det >> 0) & 0xff; + const unsigned HOST_WIDE_INT b1 = (det >> 8) & 0xff; + const unsigned HOST_WIDE_INT w0 = (det >> 0) & 0xffff; + const unsigned HOST_WIDE_INT w1 = (det >> 16) & 0xffff; + int lower_half_easy_p = 0; + int upper_half_easy_p = 0; /* Insn length. */ unsigned int length = 0; *************** *** 2242,2261 **** } break; case SImode: ! /* First, see if we can finish with one insn. ! If code is either AND or XOR, we exclude two special cases, ! 0xffffff00 and 0xffff00ff, because insns like sub.w or not.w ! can do a better job. */ if ((TARGET_H8300H || TARGET_H8300S) ! && ((det & 0x0000ffff) != 0) ! && ((det & 0xffff0000) != 0) ! && (code == IOR || det != 0xffffff00) ! && (code == IOR || det != 0xffff00ff) ! && !(code == AND ! && (det == 0xff00ffff ! || (det & 0xffff00ff) == 0xff000000 ! || (det & 0xffffff00) == 0xff000000))) { if (REG_P (operands[2])) length += 4; --- 2261,2285 ---- } break; case SImode: ! if (TARGET_H8300H || TARGET_H8300S) ! { ! /* Determine if the lower half can be taken care of in no more ! than two bytes. */ ! lower_half_easy_p = (b0 == 0 ! || b1 == 0 ! || (code != IOR && w0 == 0xffff)); ! ! /* Determine if the upper half can be taken care of in no more ! than two bytes. */ ! upper_half_easy_p = ((code != IOR && w1 == 0xffff) ! || (code == AND && w1 == 0xff00)); ! } ! /* Check if doing everything with one insn is no worse than ! using multiple insns. */ if ((TARGET_H8300H || TARGET_H8300S) ! && w0 != 0 && w1 != 0 ! && !(lower_half_easy_p && upper_half_easy_p)) { if (REG_P (operands[2])) length += 4; *************** *** 2336,2341 **** --- 2360,2372 ---- /* The determinant of the algorithm. If we perform an AND, 0 affects a bit. Otherwise, 1 affects a bit. */ const unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; + /* Break up DET into pieces. */ + const unsigned HOST_WIDE_INT b0 = (det >> 0) & 0xff; + const unsigned HOST_WIDE_INT b1 = (det >> 8) & 0xff; + const unsigned HOST_WIDE_INT w0 = (det >> 0) & 0xffff; + const unsigned HOST_WIDE_INT w1 = (det >> 16) & 0xffff; + int lower_half_easy_p = 0; + int upper_half_easy_p = 0; /* Condition code. */ enum attr_cc cc = CC_CLOBBER; *************** *** 2351,2370 **** } break; case SImode: ! /* First, see if we can finish with one insn. ! If code is either AND or XOR, we exclude two special cases, ! 0xffffff00 and 0xffff00ff, because insns like sub.w or not.w ! can do a better job. */ if ((TARGET_H8300H || TARGET_H8300S) ! && ((det & 0x0000ffff) != 0) ! && ((det & 0xffff0000) != 0) ! && (code == IOR || det != 0xffffff00) ! && (code == IOR || det != 0xffff00ff) ! && !(code == AND ! && (det == 0xff00ffff ! || (det & 0xffff00ff) == 0xff000000 ! || (det & 0xffffff00) == 0xff000000))) { cc = CC_SET_ZNV; } --- 2382,2406 ---- } break; case SImode: ! if (TARGET_H8300H || TARGET_H8300S) ! { ! /* Determine if the lower half can be taken care of in no more ! than two bytes. */ ! lower_half_easy_p = (b0 == 0 ! || b1 == 0 ! || (code != IOR && w0 == 0xffff)); ! ! /* Determine if the upper half can be taken care of in no more ! than two bytes. */ ! upper_half_easy_p = ((code != IOR && w1 == 0xffff) ! || (code == AND && w1 == 0xff00)); ! } ! /* Check if doing everything with one insn is no worse than ! using multiple insns. */ if ((TARGET_H8300H || TARGET_H8300S) ! && w0 != 0 && w1 != 0 ! && !(lower_half_easy_p && upper_half_easy_p)) { cc = CC_SET_ZNV; } From gcc-patches-return-75150-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:21:20 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31195 invoked by alias); 7 Jan 2003 16:21:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29675 invoked from network); 7 Jan 2003 16:20:00 -0000 Received: from unknown (HELO fillmore.constant.com) (12.247.41.113) by sources.redhat.com with SMTP; 7 Jan 2003 16:20:00 -0000 Received: (from bkoz@localhost) by fillmore.constant.com (8.11.6/8.11.6) id h07GKBG06596; Tue, 7 Jan 2003 10:20:11 -0600 Date: Tue, 7 Jan 2003 10:20:11 -0600 Message-Id: <200301071620.h07GKBG06596@fillmore.constant.com> To: gcc-patches@gcc.gnu.org Subject: [v3] libstdc++/8707 From: Benjamin Kosnik X-Organization: Red Hat / San Francisco Grabbed the make distclean bits from libjava... now make distclean does not error out. tested x86/linux 2003-01-07 Benjamin Kosnik PR libstdc++/8707 * Makefile.am (distclean-multi): Fix. * Makefile.in: Regenerate. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/Makefile.am,v retrieving revision 1.37 diff -c -p -r1.37 Makefile.am *** Makefile.am 22 Oct 2002 21:48:26 -0000 1.37 --- Makefile.am 7 Jan 2003 16:17:45 -0000 *************** *** 1,6 **** ## Makefile for the toplevel directory of the GNU C++ Standard library. ## ! ## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ## Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. --- 1,6 ---- ## Makefile for the toplevel directory of the GNU C++ Standard library. ## ! ## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 ## Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. *************** doxygen-man: *** 90,96 **** # Multilib support. MAKEOVERRIDES= ! # Multilib variables. MULTISRCTOP = MULTIBUILDTOP = MULTIDIRS = --- 90,96 ---- # Multilib support. MAKEOVERRIDES= ! # Multilib support variables. MULTISRCTOP = MULTIBUILDTOP = MULTIDIRS = *************** MULTISUBDIR = *** 98,113 **** MULTIDO = true MULTICLEAN = true ! # Multilib Makefile bits. .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \ maintainer-clean-multi ! all-am: all-multi ! install-am: install-multi ! mostlyclean-am: mostlyclean-multi ! clean-am: clean-multi ! distclean-am: distclean-multi ! maintainer-clean-am: maintainer-clean-multi all-multi: : $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do --- 98,113 ---- MULTIDO = true MULTICLEAN = true ! # Multilib support. .PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \ maintainer-clean-multi ! all-recursive: all-multi ! install-recursive: install-multi ! mostlyclean-recursive: mostlyclean-multi ! clean-recursive: clean-multi ! distclean-recursive: distclean-multi ! maintainer-clean-recursive: maintainer-clean-multi all-multi: : $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do From gcc-patches-return-75151-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:24:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 681 invoked by alias); 7 Jan 2003 16:24:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 621 invoked from network); 7 Jan 2003 16:24:04 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 7 Jan 2003 16:24:04 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07GNj339348; Tue, 7 Jan 2003 11:23:45 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07GNjT378248; Tue, 7 Jan 2003 11:23:45 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id LAA28676; Tue, 7 Jan 2003 11:23:44 -0500 Message-Id: <200301071623.LAA28676@makai.watson.ibm.com> To: Aldy Hernandez cc: Segher Boessenkool , gcc-patches@gcc.gnu.org, geoffk@geoffk.org Subject: Re: [altivec] patch for gcc.dg/altivec-5.c In-Reply-To: Message from Aldy Hernandez of "Mon, 06 Jan 2003 21:24:08 PST." <20030107052408.GA28589@redhat.com> Date: Tue, 07 Jan 2003 11:23:44 -0500 From: David Edelsohn >>>>> Aldy Hernandez writes: Aldy> I'm going to punt this off to David or Geoff because I don't quite Aldy> agree (but I may be wrong). Aldy> AltiVec only accepts [REG+REG], so I'm confused why you would accept Aldy> an invalid addressing mode. Perhaps your patch is hiding some other Aldy> bug? The comment for the patch is wrong. LEGITIMATE_OFFSET_ADDRESS_P already accepts REG+CONST addresses for Altivec and SPE, but requires that the displacement be valid. The patch allows any constant when not enforcing strict addressing. That macro probably should allow any constant offset prior to strict mode to not overly constrain addresses too early. David From gcc-patches-return-75152-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:36:57 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7345 invoked by alias); 7 Jan 2003 16:36:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6654 invoked from network); 7 Jan 2003 16:34:23 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 7 Jan 2003 16:34:23 -0000 Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h07GY8Rb015359 for ; Tue, 7 Jan 2003 11:34:08 -0500 Received: (from pinard@localhost) by trex.iro.umontreal.ca (8.11.4/8.11.1) id h07GY7H25816; Tue, 7 Jan 2003 11:34:07 -0500 Date: Tue, 7 Jan 2003 11:34:07 -0500 Message-Id: <200301071634.h07GY7H25816@trex.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: New Spanish PO file for `gcc' X-MailScanner: Found to be clean X-MailScanner-SpamScore: s Hello, gentle maintainer. This is a message from the Translation Project robot. A revised PO file, for programs using the textual domain `gcc', has been submitted by the team of translators taking care of the Spanish language. This particular file, along with all other PO files pertaining to the same textual domain, is available as: > http://www.iro.umontreal.ca/contrib/po/maint/gcc/es.po The file should soon be made available in mirror sites as: > ftp://ftp.unex.es/pub/gnu-i18n/po/maint/gcc/es.po > http://translation.sf.net/maint/gcc/es.po > ftp://tiger.informatik.hu-berlin.de/pub/po/maint/gcc/es.po This file has already been sent to you separately on 2003-01-07, as a MIME invoice unpacking the file `gcc-3.3-b20021230.es.po'. The following HTML page should also be updated by tomorrow. > http://www.iro.umontreal.ca/contrib/po/HTML/domain-gcc.html Please consider including all PO files, as they stand, in the `po/' subdirectory of your next release of programs using that textual domain, whether it is official or pretest. Whenever you have a distribution ready which holds a newer PO Template, please send the URL of this distribution to the address below. The distribution could be a pretest or a snapshot, it does not even have to compile. This is to be used by translators, when they need to get some translation context from your sources. Within the Translation Project, each PO Template file should have different version numbers, but since it is not OK to have two different distributions using same version numbers, this is not a problem in practice. Contact me if any question arises. Thanks for your collaboration, The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca From gcc-patches-return-75153-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:37:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7746 invoked by alias); 7 Jan 2003 16:37:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6662 invoked from network); 7 Jan 2003 16:34:28 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 7 Jan 2003 16:34:28 -0000 Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h07GY8Rb015358 for ; Tue, 7 Jan 2003 11:34:08 -0500 Received: (from pinard@localhost) by trex.iro.umontreal.ca (8.11.4/8.11.1) id h07GY7N25819; Tue, 7 Jan 2003 11:34:07 -0500 Date: Tue, 7 Jan 2003 11:34:07 -0500 Message-Id: <200301071634.h07GY7N25819@trex.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: Contents of file `gcc-3.3-b20021230.es.po.gz' MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-MailScanner: Found to be clean --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=gcc-3.3-b20021230.es.po.gz Content-Transfer-Encoding: base64 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 i//8/yMb5GSuhQwA --=-=-= The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca --=-=-=-- From gcc-patches-return-75154-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:47:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12086 invoked by alias); 7 Jan 2003 16:47:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12079 invoked from network); 7 Jan 2003 16:47:05 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by 209.249.29.67 with SMTP; 7 Jan 2003 16:47:05 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18Vyl5-0006AX-00; Tue, 07 Jan 2003 12:47:28 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18Vwsd-0004TN-00; Tue, 07 Jan 2003 11:47:07 -0500 Date: Tue, 7 Jan 2003 11:47:07 -0500 From: Daniel Jacobowitz To: Stuart Hastings Cc: gcc-patches@gcc.gnu.org Subject: Re: patch: set i686 default for Darwin/x86 Message-ID: <20030107164707.GA15111@nevyn.them.org> Mail-Followup-To: Stuart Hastings , gcc-patches@gcc.gnu.org References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.1i On Mon, Jan 06, 2003 at 10:28:57AM -0800, Stuart Hastings wrote: > Darwin/x86 doesn't really support anything older than an i686. > Darwin/PPC default unchanged. > > O.K. to commit? > > stuart hastings > Apple Computer > > 2003-01-06 Stuart Hastings > > * config.guess Set i686 default for Darwin/x86. Wrong place to send this; it needs to go to config-patches@. See the MAINTAINERS file. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer From gcc-patches-return-75155-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 16:50:03 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12847 invoked by alias); 7 Jan 2003 16:50:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11419 invoked from network); 7 Jan 2003 16:44:54 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 7 Jan 2003 16:44:54 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h07GH5B06887; Tue, 7 Jan 2003 11:17:05 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Giga23999; Tue, 7 Jan 2003 11:44:42 -0500 Received: from frogsleap.quesejoda.com (sebastian-int.corp.redhat.com [172.16.52.221]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07GiQn14109; Tue, 7 Jan 2003 11:44:31 -0500 Received: by frogsleap.quesejoda.com (Postfix, from userid 500) id 498B13C435; Tue, 7 Jan 2003 08:44:11 -0800 (PST) Date: Tue, 7 Jan 2003 08:44:11 -0800 From: Aldy Hernandez To: David Edelsohn Cc: Segher Boessenkool , gcc-patches@gcc.gnu.org, geoffk@geoffk.org Subject: Re: [altivec] patch for gcc.dg/altivec-5.c Message-ID: <20030107164411.GA31940@redhat.com> References: <20030107052408.GA28589@redhat.com> <200301071623.LAA28676@makai.watson.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <200301071623.LAA28676@makai.watson.ibm.com> User-Agent: Mutt/1.4i > The comment for the patch is wrong. LEGITIMATE_OFFSET_ADDRESS_P > already accepts REG+CONST addresses for Altivec and SPE, but requires that > the displacement be valid. The patch allows any constant when not > enforcing strict addressing. > > That macro probably should allow any constant offset prior to > strict mode to not overly constrain addresses too early. Ah, ok. In that case... Segher, could you update the comment, resubmit, and I'll commit it for you? Thanks David. Aldy From gcc-patches-return-75156-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:13:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24190 invoked by alias); 7 Jan 2003 17:13:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23957 invoked from network); 7 Jan 2003 17:11:14 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 209.249.29.67 with SMTP; 7 Jan 2003 17:11:14 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.11.6/8.11.6) with ESMTP id h07HD7i27034; Tue, 7 Jan 2003 09:13:07 -0800 Message-ID: <3E1B04D7.3000800@bothner.com> Date: Tue, 07 Jan 2003 08:48:23 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Neil Booth CC: Gcc Patch List Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier References: <3E19F315.1070808@bothner.com> <20030106230843.GA30910@daikokuya.co.uk> In-Reply-To: <20030106230843.GA30910@daikokuya.co.uk> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Neil Booth wrote: > Wow! This *must* speed up a bootstrap, and have an effect on memory > consumption (and therefore how often we GC). Please let us know how > much. I ran the following, after configuring with --enable-languages=c: cd /home/bothner/GNU/linux-gcc (cd /home/bothner/GNU/gcc/gcc; patch -R Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1599 invoked by alias); 7 Jan 2003 17:33:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31532 invoked from network); 7 Jan 2003 17:31:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 7 Jan 2003 17:31:18 -0000 Received: from fleche.redhat.com (tq0213.peakpeak.com [207.174.177.213]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA30102; Tue, 7 Jan 2003 10:31:04 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 54A084F8099; Tue, 7 Jan 2003 10:34:51 -0700 (MST) To: Andrew Haley Cc: Gcc Patch List , Java Patch List Subject: Re: Patch: avoid crash with gcj -fno-assume-compiled References: <87lm1xddjd.fsf@fleche.redhat.com> <15898.44357.760630.936775@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm wearing PAMPERS!! Date: 07 Jan 2003 10:34:51 -0700 In-Reply-To: <15898.44357.760630.936775@cuddles.cambridge.redhat.com> Message-ID: <87isx0c18k.fsf@fleche.redhat.com> Lines: 40 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> OK. Last time I looked there were other bugs in that code Andrew> too. Indeed. The appended fixes a crash that occurs if you try to have a compiled subclass of an interpreted superclass. I don't understand why this code is checking assume_compiled(...type_decl). Perhaps that is simply an oversight and the `super' check should replace it (instead of being added on)? Ok for trunk? This helps when trying to compile Eclipse... Tom Index: ChangeLog from Tom Tromey * class.c (make_class_data): Check that super is compiled before building class reference to it. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.143 diff -u -r1.143 class.c --- class.c 7 Jan 2003 17:20:50 -0000 1.143 +++ class.c 7 Jan 2003 17:22:42 -0000 @@ -1556,7 +1556,8 @@ super = CLASSTYPE_SUPER (type); if (super == NULL_TREE) super = null_pointer_node; - else if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl)))) + else if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl))) + && assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (super))))) super = build_class_ref (super); else { From gcc-patches-return-75158-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:37:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4181 invoked by alias); 7 Jan 2003 17:37:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2286 invoked from network); 7 Jan 2003 17:34:41 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 7 Jan 2003 17:34:41 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h07HYRF18580 for ; Tue, 7 Jan 2003 12:34:28 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Vxb4-00006C-00 for ; Tue, 07 Jan 2003 12:33:02 -0500 Date: Tue, 7 Jan 2003 12:33:01 -0500 To: gcc-patches@gcc.gnu.org Subject: (patch) delete old #if 0 code Message-ID: <20030107173301.GA381@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode I've tried to get this approved for about two years. Can someone approve it please. :-) I figured if it's been commented out as 'bogus' since 1994, it probably really *is* bogus. * tree.c: Delete bogus #if 0 code. Index: tree.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/tree.c,v retrieving revision 1.313 diff -u -r1.313 tree.c --- tree.c 3 Jan 2003 20:04:38 -0000 1.313 +++ tree.c 7 Jan 2003 17:32:42 -0000 @@ -406,15 +406,6 @@ return exp; case 'd': /* A decl node */ -#if 0 /* This is bogus. jason 9/21/94 */ - - t1 = break_out_calls (DECL_INITIAL (exp)); - if (t1 != DECL_INITIAL (exp)) - { - exp = copy_node (exp); - DECL_INITIAL (exp) = t1; - } -#endif return exp; case 'b': /* A block node */ From gcc-patches-return-75159-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:38:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5165 invoked by alias); 7 Jan 2003 17:38:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1329 invoked from network); 7 Jan 2003 17:33:33 -0000 Received: from unknown (HELO mms2.broadcom.com) (63.70.210.59) by 209.249.29.67 with SMTP; 7 Jan 2003 17:33:33 -0000 Received: from 63.70.210.1 by mms2.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Tue, 07 Jan 2003 09:30:32 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id JAA21686; Tue, 7 Jan 2003 09:33:09 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h07HXBER029368; Tue, 7 Jan 2003 09:33:11 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id JAA23654; Tue, 7 Jan 2003 09:33:07 -0800 (PST) To: "Richard Sandiford" cc: gcc-patches@gcc.gnu.org, echristo@redhat.com Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. References: From: cgd@broadcom.com Date: 07 Jan 2003 09:33:07 -0800 In-Reply-To: "Richard Sandiford"'s message of "07 Jan 2003 14:35:46 +0000" Message-ID: Lines: 155 MIME-Version: 1.0 X-WSS-ID: 1205D132694141-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit At 07 Jan 2003 14:35:46 +0000, Richard Sandiford wrote: > cgd@broadcom.com writes: > > +/* ISA includes the MIPS32r2 ALU extensions other than rotates > > + (seb, seh, ins, ext). Rotates are handled by ISA_HAS_ROTR_SI. */ > > +#define ISA_HAS_ALU32R2 (!TARGET_MIPS16 \ > > + && (ISA_MIPS32R2 \ > > + )) > > + > > Did you think about adding ISA_HAS_SEB_SEH? I'm not saying it's > a good idea, but it does seem more consistent with the other > ISA_HAS_* macros (e.g. ISA_HAS_NMADD_NMSUB). yes. Actually, first I implemented it more like this, as ISA_HAS_SEx. Eric, on the other hand, i more partial to ISA_HAS_SE. ("Hmm." 8-) That name was intended to be like ISA_HAS_FP4, but eric has indicated he'd like it the other way, so i'm currently testing ISA_HAS_SE. I need to restart it anyway, so i'll change it to SEB_SEH. If it's not going to be more general, that's probably the best name. > > @@ -94,6 +94,8 @@ Boston, MA 02111-1307, USA. */ > > builtin_define ("__mips=4"); \ > > else if (ISA_MIPS32) \ > > builtin_define ("__mips=32"); \ > > + else if (ISA_MIPS32R2) \ > > + builtin_define ("__mips=33"); \ > > else if (ISA_MIPS64) \ > > builtin_define ("__mips=64"); \ > > Blech. ;) indeed. > How about keeping __mips=32 and introducing a separate > define for the ISA revision? I considered that. Actually, my personal preference would be to make people use __mips less in favor of some more verbosely-named define. Such a thing already exists, see mips.h... It's just not used by NetBSD (you quoted the netbsd.h diff). ("Bummer for them." 8-) Ultimately, I broke down and concluded: (1) it's not really 32 and users should have some way to differentiate, and (2) one good way to convince them not to use that define is to put strange values in it. 8-) > (Wonder if there'll ever be > a mips32r32...) Heheheh. (1) the architecture revision field is only 3 bits. That doesn't say much, they could use 0x7 as "look at this other field." But... (2) time delta between mips32 rev. 0.92 (January 20, 2001) and 1.90 (September 1, 2002) = approx 20 months. be conservative, assume half that (10 mos) between major releases, that's still > 300 months. "BGAF." 8-) > > @@ -7362,6 +7369,10 @@ Equivalent to @samp{-march=mips4}. > > @item -mips32 > > @opindex mips32 > > Equivalent to @samp{-march=mips32}. > > + > > +@item -mips32r2 > > +@opindex mips32r2 > > +Equivalent to @samp{-march=mips32r2}. > > > > @item -mips64 > > @opindex mips64 > > Does this option actually work? As far as I can tell, -mips32r2 > == -mips32, since -mips* is interpreted using atoi(). I guess > -mips33 will select 32r2 though. ;) to be honest, didn't try it. Well that's really remarkably lame isn't it. 8-) OK, will fix, thanks very much. > Having an integer mips_isa has worked well so far, but now you're > adding a second mips32 ISA, maybe mips_isa should become an enum > instead (like mips_arch and mips_tune). Yes, I thought about this. Really, though, IMO it should be done as a separate patch since it's a separate change, and I wanted to get this done first to cause myself minimal merge pain. 8-) > E.g. > > enum mips_isa { > ISA_MIPS1, > ..., > ISA_MIPS32, > ISA_MIPS32R2, > ... > }; No, that won't work, those names are already quite well used. (I'd already looked at it, really. 8-) They'd have to be other than that. But yes, that idea. (Or, they could be that, but then all of those existing defines would have to change.) > Then use > mips_parse_cpu to interpret the -mips option. That would seem sensible, but... given the current implementation, mips_isa_string has the value after -mips... i.e., 32r2, 32, 64, 1, 2, 3, etc. I.e., it's not a complete mipsNN string. I suppose there are two ways to go: sprintf into a string then look that up, or check for the explicitly allowed cases using strcmp. I think i'm going to go for the latter. (atoi is, in general, never the right thing... 8-) > That'd get > rid of all this "ISA 33" nastiness. heh. > There'd still need to be a special case for -mips16, of course. > Actually, since we have target flags free, maybe -mips16 > should go into TARGET_SWITCHES... Possibly. Not being a real mips16-head I'm not sure what the right thing is there. 9-). OK, so: * ISA_HAS_SEB_SEH. * fix mips_isa_string handling. chris From gcc-patches-return-75160-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:39:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5635 invoked by alias); 7 Jan 2003 17:39:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5619 invoked from network); 7 Jan 2003 17:39:08 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 7 Jan 2003 17:39:08 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h07HBJB28050 for ; Tue, 7 Jan 2003 12:11:19 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Hcua12865 for ; Tue, 7 Jan 2003 12:38:56 -0500 Received: from redhat.com (vpn50-3.rdu.redhat.com [172.16.50.3]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Hcun18244 for ; Tue, 7 Jan 2003 12:38:56 -0500 Received: by redhat.com (Postfix, from userid 201) id B86D31C110; Tue, 7 Jan 2003 12:39:33 -0500 (EST) Date: Tue, 7 Jan 2003 12:39:33 -0500 From: Christopher Faylor To: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: [RFA] Top-level configure.in needs AC_PREREQ Message-ID: <20030107173933.GA9102@redhat.com> Mail-Followup-To: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.1i I think the minimal autoconf version needed for the new autoconfiscated configure.in is 2.13, correct? If so, I think an AC_PREREQ is called for, if for no other reason than to be consistent with gcc, gdb, binutils. winsup, etc. Ok to check in? cgf 2003-01-07 Christopher Faylor * configure.in: Add AC_PREREQ for consistency. Index: configure.in =================================================================== RCS file: /cvs/uberbaum/configure.in,v retrieving revision 1.207 diff -u -p -r1.207 configure.in --- configure.in 6 Jan 2003 17:37:20 -0000 1.207 +++ configure.in 7 Jan 2003 17:35:06 -0000 @@ -19,6 +19,7 @@ ### WARNING: this file contains embedded tabs. Do not run untabify on this file. AC_INIT(move-if-change) +AC_PREREQ(2.13) AC_CANONICAL_SYSTEM AC_ARG_PROGRAM From gcc-patches-return-75161-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:39:20 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5988 invoked by alias); 7 Jan 2003 17:39:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5977 invoked from network); 7 Jan 2003 17:39:19 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 17:39:19 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07HYL120077; Tue, 7 Jan 2003 12:34:21 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Hd6n25657; Tue, 7 Jan 2003 12:39:07 -0500 Received: from dhcp-172-16-25-153.sfbay.redhat.com (dhcp-172-16-25-153.sfbay.redhat.com [172.16.25.153]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Hd6n16909; Tue, 7 Jan 2003 09:39:06 -0800 Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. From: Eric Christopher To: cgd@broadcom.com Cc: Richard Sandiford , gcc-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 07 Jan 2003 08:57:22 -0800 Message-Id: <1041958642.27191.9.camel@ghostwheel.ges.redhat.com> Mime-Version: 1.0 > OK, so: > > * ISA_HAS_SEB_SEH. > > * fix mips_isa_string handling. > Explicitly checking using strcmp sounds good to me. I love waking up later than you guys. This is great. Thanks. :) -eric -- Yeah, I used to play basketball... From gcc-patches-return-75162-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:47:49 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10970 invoked by alias); 7 Jan 2003 17:47:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10963 invoked from network); 7 Jan 2003 17:47:46 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 7 Jan 2003 17:47:46 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07Hke3200348; Tue, 7 Jan 2003 12:46:40 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07HkTT95854; Tue, 7 Jan 2003 12:46:33 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id MAA31770; Tue, 7 Jan 2003 12:46:29 -0500 Message-Id: <200301071746.MAA31770@makai.watson.ibm.com> To: Aldy Hernandez cc: Segher Boessenkool , gcc-patches@gcc.gnu.org, geoffk@geoffk.org Subject: Re: [altivec] patch for gcc.dg/altivec-5.c In-Reply-To: Message from Aldy Hernandez of "Tue, 07 Jan 2003 08:44:11 PST." <20030107164411.GA31940@redhat.com> Date: Tue, 07 Jan 2003 12:46:29 -0500 From: David Edelsohn >>>>> Aldy Hernandez writes: Aldy> In that case... Segher, could you update the comment, resubmit, and Aldy> I'll commit it for you? I actually would like to discuss this more. The question is whether this change should be applied to all of the macro, instead of just the Altivec case. The Altivec case only allows offsets that are zero. Segher's patch allows any offset when strict addressing is not enforced. A few other ports allow any constant for offsettable addresses prior to strict addressing. If this is the correct change, we should make the change consistently and not just individually for Altivec. David From gcc-patches-return-75163-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 18:14:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21129 invoked by alias); 7 Jan 2003 18:14:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21116 invoked from network); 7 Jan 2003 18:14:49 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 7 Jan 2003 18:14:49 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h07IEcw23121 for ; Tue, 7 Jan 2003 10:14:38 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Tue, 7 Jan 2003 10:14:09 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h07IEas05309; Tue, 7 Jan 2003 10:14:37 -0800 (PST) Date: Tue, 7 Jan 2003 10:14:04 -0800 Subject: Re: [altivec] patch for gcc.dg/altivec-5.c Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen , Aldy Hernandez , Segher Boessenkool , gcc-patches@gcc.gnu.org, geoffk@geoffk.org To: David Edelsohn From: Dale Johannesen In-Reply-To: <200301071623.LAA28676@makai.watson.ibm.com> Message-Id: Content-Transfer-Encoding: 7bit On Tuesday, January 7, 2003, at 08:23 AM, David Edelsohn wrote: >>>>>> Aldy Hernandez writes: > > Aldy> I'm going to punt this off to David or Geoff because I don't > quite > Aldy> agree (but I may be wrong). > > Aldy> AltiVec only accepts [REG+REG], so I'm confused why you would > accept > Aldy> an invalid addressing mode. Perhaps your patch is hiding some > other > Aldy> bug? > > The comment for the patch is wrong. LEGITIMATE_OFFSET_ADDRESS_P > already accepts REG+CONST addresses for Altivec and SPE, but requires > that > the displacement be valid. The patch allows any constant when not > enforcing strict addressing. > > That macro probably should allow any constant offset prior to > strict mode to not overly constrain addresses too early. Hmm, this doesn't seem to be way GO_IF_LEGITIMATE_ADDRESS_P is supposed to work, according to its doc. It's supposed to check for "legitimate" addresses; that's not defined, but I'd take it to refer to the valid instructions on the target. The patch was stated to fix an ICE, but I don't think the proposed patch should be needed for correctness. Recognizing only the valid addressing modes on the target should be a valid way for GO_IF_LEGITIMATE_ADDRESS_P to behave. I tend to agree with Aldy that the patch is hiding some other bug. Whether it's a good idea to accept more modes for improved codegen is another issue. I think that's best answered by experimentation. From gcc-patches-return-75164-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 18:19:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22607 invoked by alias); 7 Jan 2003 18:19:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22585 invoked from network); 7 Jan 2003 18:19:01 -0000 Received: from unknown (HELO e32.co.us.ibm.com) (32.97.110.130) by 209.249.29.67 with SMTP; 7 Jan 2003 18:19:01 -0000 Received: from westrelay03.boulder.ibm.com (westrelay03.boulder.ibm.com [9.17.194.24]) by e32.co.us.ibm.com (8.12.2/8.12.2) with ESMTP id h07IIlDD026936; Tue, 7 Jan 2003 13:18:47 -0500 Received: from dyn9-47-17-68.beaverton.ibm.com (dyn9-47-17-68.beaverton.ibm.com [9.47.17.68]) by westrelay03.boulder.ibm.com (8.12.3/NCO/VER6.4) with ESMTP id h07IHUFK057032; Tue, 7 Jan 2003 11:17:30 -0700 Received: (from janis@localhost) by dyn9-47-17-68.beaverton.ibm.com (8.9.3/8.9.3) id KAA12057; Tue, 7 Jan 2003 10:20:12 -0800 Date: Tue, 7 Jan 2003 10:20:12 -0800 From: Janis Johnson To: "Joseph S. Myers" Cc: Janis Johnson , gcc-patches@gcc.gnu.org Subject: Re: [doc-patch] fix PR 8947 with addition to invoke.texi Message-ID: <20030107102012.A12044@us.ibm.com> References: <20030106153904.A8081@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: ; from jsm28@cam.ac.uk on Tue, Jan 07, 2003 at 10:07:24AM +0000 On Tue, Jan 07, 2003 at 10:07:24AM +0000, Joseph S. Myers wrote: > On Mon, 6 Jan 2003, Janis Johnson wrote: > > > --- invoke.texi 31 Dec 2002 14:59:09 -0000 1.218 > > +++ invoke.texi 6 Jan 2003 23:27:18 -0000 > > @@ -1,12 +1,12 @@ > > @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, > > -@c 2000, 2001, 2002 Free Software Foundation, Inc. > > +@c 2000, 2001, 2002, 2003 Free Software Foundation, Inc. > > Remember when updating copyright notices on subsidiary files in manuals > that the overall notice that gets printed in the manual (in this case, in > gcc.texi) needs updating as well. (Files included in gccint.texi have > also been changed in 2003 without the copyright notice being updated. > For changes to code, --version copyright dates may need updating.) Is this the only other place that needs to be updated for a change to the GCC manual, or are there more? Index: gcc.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/gcc.texi,v retrieving revision 1.57 diff -u -r1.57 gcc.texi --- gcc.texi 30 Dec 2002 21:29:39 -0000 1.57 +++ gcc.texi 7 Jan 2003 18:14:37 -0000 @@ -62,7 +62,7 @@ @copying Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -1999, 2000, 2001, 2002 Free Software Foundation, Inc. +1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or From gcc-patches-return-75165-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 18:22:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23541 invoked by alias); 7 Jan 2003 18:22:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23530 invoked from network); 7 Jan 2003 18:22:12 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 7 Jan 2003 18:22:12 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07ILp3227348; Tue, 7 Jan 2003 13:21:51 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07ILoT249832; Tue, 7 Jan 2003 13:21:50 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id NAA23946; Tue, 7 Jan 2003 13:21:50 -0500 Message-Id: <200301071821.NAA23946@makai.watson.ibm.com> To: Dale Johannesen cc: Aldy Hernandez , Segher Boessenkool , gcc-patches@gcc.gnu.org, geoffk@geoffk.org Subject: Re: [altivec] patch for gcc.dg/altivec-5.c In-Reply-To: Message from Dale Johannesen of "Tue, 07 Jan 2003 10:14:04 PST." Date: Tue, 07 Jan 2003 13:21:50 -0500 From: David Edelsohn GCC may generate an offsettable address which will not be translated into an indexed address until after reload. The current definition of the macro incorrectly will reject the address. See Alpha for instance: #define CONSTANT_ADDRESS_P(X) \ (GET_CODE (X) == CONST_INT \ && (unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000) /* Register plus a small constant offset is valid. */ if (GET_CODE (x) == PLUS) { rtx ofs = XEXP (x, 1); x = XEXP (x, 0); /* Discard non-paradoxical subregs. */ if (GET_CODE (x) == SUBREG && (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) x = SUBREG_REG (x); if (REG_P (x)) { if (! strict && NONSTRICT_REG_OK_FP_BASE_P (x) && GET_CODE (ofs) == CONST_INT) return true; if ((strict ? STRICT_REG_OK_FOR_BASE_P (x) : NONSTRICT_REG_OK_FOR_BASE_P (x)) && CONSTANT_ADDRESS_P (ofs)) return true; } Alpha CONSTANT_ADDRESS_P is the same as PowerPC LEGITIMATE_ADDRESS_INTEGER_P. When not strict, any CONST_INT is accepted. GO_IF_LEGITIMATE_ADDRESS probably should not reject an offsettable address until they can be transformed into valid addresses. David From gcc-patches-return-75166-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 18:34:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28269 invoked by alias); 7 Jan 2003 18:34:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28262 invoked from network); 7 Jan 2003 18:34:33 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 7 Jan 2003 18:34:33 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h07IYLI12783 for ; Tue, 7 Jan 2003 10:34:21 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Tue, 7 Jan 2003 10:33:52 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h07IYKs14991; Tue, 7 Jan 2003 10:34:20 -0800 (PST) Date: Tue, 7 Jan 2003 10:33:48 -0800 Subject: Re: [altivec] patch for gcc.dg/altivec-5.c Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen , Aldy Hernandez , Segher Boessenkool , gcc-patches@gcc.gnu.org, geoffk@geoffk.org To: David Edelsohn From: Dale Johannesen In-Reply-To: <200301071821.NAA23946@makai.watson.ibm.com> Message-Id: <8FA36504-226E-11D7-B860-000393D76DAA@apple.com> Content-Transfer-Encoding: 7bit On Tuesday, January 7, 2003, at 10:21 AM, David Edelsohn wrote: > Alpha CONSTANT_ADDRESS_P is the same as PowerPC > LEGITIMATE_ADDRESS_INTEGER_P. When not strict, any CONST_INT is > accepted. I understand, the question is whether this behavior is (or should be) necessary for correctness, or is an optimization. From the docs I'd say the latter, but alas you can't always believe the docs... From gcc-patches-return-75167-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 19:38:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20524 invoked by alias); 7 Jan 2003 19:38:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20514 invoked from network); 7 Jan 2003 19:38:12 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 7 Jan 2003 19:38:12 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h07JbvK04157; Tue, 7 Jan 2003 11:37:57 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Per Bothner Cc: Gcc Patch List Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier References: <3E19F315.1070808@bothner.com> <20030106230843.GA30910@daikokuya.co.uk> <3E1B04D7.3000800@bothner.com> From: Geoff Keating Date: 07 Jan 2003 11:37:56 -0800 In-Reply-To: <3E1B04D7.3000800@bothner.com> Message-ID: Lines: 42 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Per Bothner writes: > Neil Booth wrote: > > Wow! This *must* speed up a bootstrap, and have an effect on memory > > consumption (and therefore how often we GC). Please let us know how > > much. > > I ran the following, after configuring with --enable-languages=c: > > cd /home/bothner/GNU/linux-gcc > (cd /home/bothner/GNU/gcc/gcc; patch -R make clean > /usr/bin/time make bootstrap > (cd /home/bothner/GNU/gcc/gcc; patch make clean > /usr/bin/time make bootstrap > > -and got this: > ... > 2762.74user 198.83system 53:28.94elapsed 92%CPU (0avgtext+0avgdata > 0maxresident)k > 0inputs+0outputs (1804584major+7371946minor)pagefaults 0swaps > ... > 2754.97user 171.41system 52:40.90elapsed 92%CPU (0avgtext+0avgdata > 0maxresident)k > 0inputs+0outputs (1802632major+6170094minor)pagefaults 0swaps Could you also run a test on some chunk of code that doesn't change? For instance, I used 'file0.cc' in the output of spu --language c++ --files 1 --functions 20 --function-length 10 \ --lib-enums 2000 --enumerators 8 --lib-structs 1000 --fields 12 \ --lib-classes 800 --methods 20 --lib-functions 10000 to test PCH, and it should also be a good testcase for this change. You can get spu from cvs -d :pserver:anoncvs@sources.redhat.com:/cvs/src co src/utils/spu -- - Geoffrey Keating From gcc-patches-return-75168-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 19:40:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21670 invoked by alias); 7 Jan 2003 19:40:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21651 invoked from network); 7 Jan 2003 19:40:22 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 7 Jan 2003 19:40:22 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h07Je8b04161; Tue, 7 Jan 2003 11:40:08 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Eric Botcazou CC: gcc-patches@gcc.gnu.org Subject: Re: 3 pending patches from 2002 References: <14980000.1041902728@warlock.codesourcery.com> <200301071248.14217.ebotcazou@libertysurf.fr> From: Geoff Keating Date: 07 Jan 2003 11:40:07 -0800 In-Reply-To: <200301071248.14217.ebotcazou@libertysurf.fr> Message-ID: Lines: 30 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Eric Botcazou writes: > void foo(int v) > { > if (v) > asm ("dummy1"); > > asm ("dummy2"); > > if (v) > asm ("dummy3"); > } > > /* { dg-final { scan-assembler "L2" } } */ > > > gcc-3.2.2 optimizes away the dummy1 and dummy2 statements, while gcc-3.3 and > gcc-3.4 include the dummy2 statement in the "if (v)" test. So it is sufficient > to test that we have two reachable labels, hence the assembly scan for "L2". > > Is that robust ? If no, how should I write the testcase ? No, it's not robust, why can't you /* { dg-final { scan-assembler "dummy1" } { scan-assembler "dummy2" } } */ or similar? -- - Geoffrey Keating From gcc-patches-return-75169-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 19:41:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22620 invoked by alias); 7 Jan 2003 19:41:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22605 invoked from network); 7 Jan 2003 19:41:23 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 7 Jan 2003 19:41:23 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h07Jf9W04165; Tue, 7 Jan 2003 11:41:09 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Nathanael Nerode CC: gcc-patches@gcc.gnu.org Subject: Re: (patch) delete old #if 0 code References: <20030107173301.GA381@doctormoo> From: Geoff Keating Date: 07 Jan 2003 11:41:09 -0800 In-Reply-To: <20030107173301.GA381@doctormoo> Message-ID: Lines: 12 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: > I've tried to get this approved for about two years. Can someone > approve it please. :-) I figured if it's been commented out as 'bogus' > since 1994, it probably really *is* bogus. > > * tree.c: Delete bogus #if 0 code. Yes, this is OK. -- - Geoffrey Keating From gcc-patches-return-75170-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 19:47:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24955 invoked by alias); 7 Jan 2003 19:47:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23929 invoked from network); 7 Jan 2003 19:45:51 -0000 Received: from unknown (HELO talisman.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 7 Jan 2003 19:45:51 -0000 Received: (from rsandifo@localhost) by talisman.cambridge.redhat.com (8.11.6/8.11.6) id h07JkIt23277; Tue, 7 Jan 2003 19:46:18 GMT X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: cgd@broadcom.com Cc: gcc-patches@gcc.gnu.org, echristo@redhat.com Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. References: From: Richard Sandiford Date: 07 Jan 2003 19:46:17 +0000 In-Reply-To: Message-ID: Lines: 47 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii cgd@broadcom.com writes: > Ultimately, I broke down and concluded: (1) it's not really 32 and > users should have some way to differentiate, and (2) one good way to > convince them not to use that define is to put strange values in it. > 8-) I agree that __mips isn't good for 32r2-aware code because it isn't descriptive enough. That's why setting __mips to 32 makes sense IMO. Any existing mips32 code that checks __mips should work OK for mips32r2 as well. I'm not sure what you mean by "it's not really 32". OK, so it's not the original mips32, but MIPS (and the gcc option names) treat it as a variation of mips32. It seems more intuitive to me to have __mips set to 32 instead of some articial not-really-an-ISA number like 33. > > E.g. > > > > enum mips_isa { > > ISA_MIPS1, > > ..., > > ISA_MIPS32, > > ISA_MIPS32R2, > > ... > > }; > ... > They'd have to be other than that. But yes, that idea. Doh! > That would seem sensible, but... given the current implementation, > mips_isa_string has the value after -mips... i.e., 32r2, 32, 64, 1, > 2, 3, etc. I.e., it's not a complete mipsNN string. Couldn't you use mips_isa_string[-4]? If you don't like that... > I suppose there are two ways to go: sprintf into a string then look > that up, or check for the explicitly allowed cases using strcmp. I > think i'm going to go for the latter. You could use concat() instead of sprintf(): no horrible fixed-length buffers to worry about. Personally I like the idea of "-mips" being a shorthand for "-march=mips". It also avoids having to duplicate bits of mips_cpu_info_table[] in C code. Richard From gcc-patches-return-75171-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 19:58:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32001 invoked by alias); 7 Jan 2003 19:58:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31875 invoked from network); 7 Jan 2003 19:56:56 -0000 Received: from unknown (HELO fillmore.constant.com) (12.247.41.113) by 209.249.29.67 with SMTP; 7 Jan 2003 19:56:56 -0000 Received: (from bkoz@localhost) by fillmore.constant.com (8.11.6/8.11.6) id h07JusE21988; Tue, 7 Jan 2003 13:56:54 -0600 Date: Tue, 7 Jan 2003 13:56:54 -0600 Message-Id: <200301071956.h07JusE21988@fillmore.constant.com> To: gcc-patches@gcc.gnu.org, rth@redhat.com Subject: DW_CFA_undefined, DW_CFA_same_value (should be g++/9076) From: Benjamin Kosnik X-Organization: Red Hat / Chicago This is from GNATS. It's incorrectly listed as a libstdc++ bug. The patch is straightforward, with more details are in the GNATS report. tested x86/linux ok for gcc gcc-3_3-branch gcc-3_2-branch ? -benjamin 2003-01-07 Benjamin Kosnik Sunil Davasam PR libstdc++/9076 * unwind-dw2.c (execute_cfa_program): DW_CFA_undefined, DW_CFA_same_value, read next and ignore. Index: unwind-dw2.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/unwind-dw2.c,v retrieving revision 1.23 diff -c -p -r1.23 unwind-dw2.c *** unwind-dw2.c 16 Dec 2002 18:20:01 -0000 1.23 --- unwind-dw2.c 7 Jan 2003 19:43:41 -0000 *************** *** 1,5 **** /* DWARF2 exception handling and frame unwind runtime interface routines. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GCC. --- 1,5 ---- /* DWARF2 exception handling and frame unwind runtime interface routines. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. *************** execute_cfa_program (const unsigned char *** 784,789 **** --- 784,792 ---- case DW_CFA_undefined: case DW_CFA_same_value: + insn_ptr = read_uleb128 (insn_ptr, ®); + break; + case DW_CFA_nop: break; From gcc-patches-return-75172-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:02:34 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 623 invoked by alias); 7 Jan 2003 20:02:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 610 invoked from network); 7 Jan 2003 20:02:32 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:02:32 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07JvY123946; Tue, 7 Jan 2003 14:57:34 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07K2Jn30058; Tue, 7 Jan 2003 15:02:19 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07K2Jn29513; Tue, 7 Jan 2003 12:02:19 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07K2IG15551; Tue, 7 Jan 2003 12:02:18 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:02:18 -0800 From: Richard Henderson To: Andreas Schwab Cc: gcc-patches@gcc.gnu.org Subject: Re: Update m68k-*-linux* configuration Message-ID: <20030107200218.GA12992@redhat.com> Mail-Followup-To: Richard Henderson , Andreas Schwab , gcc-patches@gcc.gnu.org References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Mon, Nov 25, 2002 at 11:00:11PM +0100, Andreas Schwab wrote: > * config.gcc (m68k-*-linux*): Don't set extra_parts and gnu_ld, > should come from the generic *-*-linux* entry. Ok. r~ From gcc-patches-return-75173-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:04:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1549 invoked by alias); 7 Jan 2003 20:04:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1541 invoked from network); 7 Jan 2003 20:04:08 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:04:08 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07JxA123967; Tue, 7 Jan 2003 14:59:10 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07K3tn30080; Tue, 7 Jan 2003 15:03:56 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07K3sn29668; Tue, 7 Jan 2003 12:03:54 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07K3sE15859; Tue, 7 Jan 2003 12:03:54 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:03:54 -0800 From: Richard Henderson To: Eric Botcazou Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] Fix PR c/8032 Message-ID: <20030107200354.GB12992@redhat.com> Mail-Followup-To: Richard Henderson , Eric Botcazou , gcc-patches@gcc.gnu.org References: <200211261004.41206.ebotcazou@libertysurf.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200211261004.41206.ebotcazou@libertysurf.fr> User-Agent: Mutt/1.4i On Tue, Nov 26, 2002 at 10:19:10AM +0100, Eric Botcazou wrote: > PR c/8032 > * c-typeck.c (process_init_element): For an empty element, > do not advance the pointer to unfilled fields if there are > pending initializers. > > * gcc.c-torture/execute/20021126-1.c: New test. Ok for 3.2, 3.3 and mainline. r~ From gcc-patches-return-75174-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:09:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3605 invoked by alias); 7 Jan 2003 20:09:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3596 invoked from network); 7 Jan 2003 20:09:23 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 7 Jan 2003 20:09:23 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h07K99W04197; Tue, 7 Jan 2003 12:09:09 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Benjamin Kosnik CC: gcc-patches@gcc.gnu.org Subject: Re: DW_CFA_undefined, DW_CFA_same_value (should be g++/9076) References: <200301071956.h07JusE21988@fillmore.constant.com> From: Geoff Keating Date: 07 Jan 2003 12:09:09 -0800 In-Reply-To: <200301071956.h07JusE21988@fillmore.constant.com> Message-ID: Lines: 25 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Benjamin Kosnik writes: > This is from GNATS. It's incorrectly listed as a libstdc++ bug. > The patch is straightforward, with more details are in the GNATS report. > > tested x86/linux > > ok for > gcc > gcc-3_3-branch > gcc-3_2-branch Yes, OK for all these places. > -benjamin > > 2003-01-07 Benjamin Kosnik > Sunil Davasam > > PR libstdc++/9076 > * unwind-dw2.c (execute_cfa_program): DW_CFA_undefined, > DW_CFA_same_value, read next and ignore. -- - Geoffrey Keating From gcc-patches-return-75175-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:15:41 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7040 invoked by alias); 7 Jan 2003 20:15:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7032 invoked from network); 7 Jan 2003 20:15:39 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:15:39 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07KAf124383; Tue, 7 Jan 2003 15:10:41 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07KFQn30564; Tue, 7 Jan 2003 15:15:26 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07KFPn30905; Tue, 7 Jan 2003 12:15:25 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07KFPx15961; Tue, 7 Jan 2003 12:15:25 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:15:25 -0800 From: Richard Henderson To: Dale Johannesen Cc: gcc-patches@gcc.gnu.org Subject: Re: crash: longjmp vs -fprofile-arcs Message-ID: <20030107201525.GC12992@redhat.com> Mail-Followup-To: Richard Henderson , Dale Johannesen , gcc-patches@gcc.gnu.org References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Fri, Dec 06, 2002 at 06:22:26PM -0800, Dale Johannesen wrote: > #include > int foo (jmp_buf buf) { longjmp(buf, 1); } > > now what? cc -fprofile-arcs lj.c > lj.c: In function `foo': > lj.c:2: internal error: Bus error > Please submit a full bug report, blah blah Fixed thus. r~ * cfganal.c (flow_call_edges_add): Don't crash on noreturn call. Index: cfganal.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cfganal.c,v retrieving revision 1.31 diff -c -p -d -r1.31 cfganal.c *** cfganal.c 16 Dec 2002 18:19:06 -0000 1.31 --- cfganal.c 7 Jan 2003 19:59:47 -0000 *************** flow_call_edges_add (blocks) *** 322,331 **** for (e = bb->succ; e; e = e->succ_next) if (e->dest == EXIT_BLOCK_PTR) ! break; ! ! insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e); ! commit_edge_insertions (); } } --- 322,332 ---- for (e = bb->succ; e; e = e->succ_next) if (e->dest == EXIT_BLOCK_PTR) ! { ! insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e); ! commit_edge_insertions (); ! break; ! } } } From gcc-patches-return-75176-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:22:33 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10282 invoked by alias); 7 Jan 2003 20:22:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8842 invoked from network); 7 Jan 2003 20:18:43 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 7 Jan 2003 20:18:43 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h07KIVw18665 for ; Tue, 7 Jan 2003 12:18:31 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Tue, 7 Jan 2003 12:18:03 -0800 Received: from bothner.com (il0102b-dhcp93.apple.com [17.201.26.143]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h07KIVs21051; Tue, 7 Jan 2003 12:18:31 -0800 (PST) Message-ID: <3E1B30C8.9040500@bothner.com> Date: Tue, 07 Jan 2003 11:55:52 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Per Bothner CC: Gcc Patch List Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier References: <3E19F315.1070808@bothner.com> In-Reply-To: <3E19F315.1070808@bothner.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit As a sanity check, I added the line: printf("alloc '%s' ext new kind:%d old kind:%d\n", IDENTIFIER_POINTER(id), value_index, cur_kind); in set_identifier_value when it allocates an extention TREE_VEC, and then recompiled expr.o c-common.o and builtins.o (three random large files), and got reassuring results: expr.c had 2 "conflicts" ("index" and "exp"). c-decl.c had 4 ("link", "exp","dup", and "var_labelno"). builtinc.s had 2 ("link" and "exp"). All except one was where the same identifier had both IDENTIFIER_GLOBAL_VALUE and IDENTIFIER_LOCAL_VALUE non-null. In one case ("var_labelno") both IDENTIFIER_LIMBO_VALUE and IDENTIFIER_LOCAL_VALUE were set. These very low numbers supports the intuition that the overwhelming number of identifiers do not need to allocate an extensions TREE_VEC. So the net effect is a definite and significant space saving. The net time effect is harder to pin down: The new macros require extra instructions (to test the IDENTIFIER_FIELD_KIND), but because of the space savings we do less gc, and locality should be improved. My numbers, plus some results sent me privately by Judd Jenne, suggest a minor but worthwhile improvement. It might be possible to tweak things better, perhaps by re-ordering the tests in IDENTIFIER_FIELD, or adding some annotation a la _builtin_expect (?), but that's not sort of micro-optimization isn't really my field. -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From gcc-patches-return-75177-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:23:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11066 invoked by alias); 7 Jan 2003 20:23:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8810 invoked from network); 7 Jan 2003 20:18:30 -0000 Received: from unknown (HELO mms3.broadcom.com) (63.70.210.38) by 209.249.29.67 with SMTP; 7 Jan 2003 20:18:30 -0000 Received: from 63.70.210.1 by mms3.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Tue, 07 Jan 2003 12:18:19 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id MAA06460; Tue, 7 Jan 2003 12:18:11 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h07KIDER003898; Tue, 7 Jan 2003 12:18:13 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id MAA24497; Tue, 7 Jan 2003 12:18:09 -0800 (PST) To: "Richard Sandiford" cc: gcc-patches@gcc.gnu.org, echristo@redhat.com Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. References: From: cgd@broadcom.com Date: 07 Jan 2003 12:18:09 -0800 In-Reply-To: "Richard Sandiford"'s message of "07 Jan 2003 19:46:17 +0000" Message-ID: Lines: 64 MIME-Version: 1.0 X-WSS-ID: 1205E98141566-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit At 07 Jan 2003 19:46:17 +0000, Richard Sandiford wrote: > I agree that __mips isn't good for 32r2-aware code because it > isn't descriptive enough. That's why setting __mips to 32 > makes sense IMO. Any existing mips32 code that checks __mips > should work OK for mips32r2 as well. So, then my mind goes to ask, why should any existing code that checks _MIPS_ISA be different than code that checks __mips, for MIPS32 vs. MIPS32R2. At least naively, I'd expect that if __mips had the same value for MIPS32 and MIPS32R2, _MIPS_ISA would as well... > I'm not sure what you mean by "it's not really 32". OK, so it's > not the original mips32, but MIPS (and the gcc option names) treat > it as a variation of mips32. "it's not really MIPS32" == "really, it's not MIPS32". 8-) There are different EF_MIPS_ARCH values. You cannot run MIPS32r2 code on a MIPS32 CPU and be guaranteed a trap for the new instructions. (e.g. ROTR / ROTRV, which are don't necessarily cause RI traps in MIPS32 "r1" , but rather have UNPREDICTABLE behaviour.) >From a programmer POV, mips32r2 is a superset of mips32... but then mips32 was similarly a superset of mips2. 8-) > It seems more intuitive to me to > have __mips set to 32 instead of some articial not-really-an-ISA > number like 33. My point of view on this is, while using "32" is appealing, the code isn't being compiled for MIPS32. For some uses, "32" _is not correct_. I'd rather go with more correct than more intuitive... But really, people should just stop using __mips if they want to tell the difference between different versions of the ISAs, IMO. > > That would seem sensible, but... given the current implementation, > > mips_isa_string has the value after -mips... i.e., 32r2, 32, 64, 1, > > 2, 3, etc. I.e., it's not a complete mipsNN string. > > Couldn't you use mips_isa_string[-4]? Uh, I suppose one probably _could_ but that would be making a fairly serious assumption about the implementation of the thing that sets mips_isa_string. 8-) > You could use concat() instead of sprintf(): no horrible fixed-length > buffers to worry about. Personally I like the idea of "-mips" being > a shorthand for "-march=mips". It also avoids having to duplicate > bits of mips_cpu_info_table[] in C code. Indeed. didn't know about concat. (mmm, learning experience.) that's what i'll do. chris From gcc-patches-return-75178-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:26:55 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13130 invoked by alias); 7 Jan 2003 20:26:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10680 invoked from network); 7 Jan 2003 20:23:07 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 7 Jan 2003 20:23:07 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h07KMtw19454 for ; Tue, 7 Jan 2003 12:22:55 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Tue, 7 Jan 2003 12:22:27 -0800 Received: from bothner.com (il0102b-dhcp93.apple.com [17.201.26.143]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h07KMts24097; Tue, 7 Jan 2003 12:22:55 -0800 (PST) Message-ID: <3E1B31CE.8010208@bothner.com> Date: Tue, 07 Jan 2003 12:00:14 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Geoff Keating CC: Gcc Patch List Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier References: <3E19F315.1070808@bothner.com> <20030106230843.GA30910@daikokuya.co.uk> <3E1B04D7.3000800@bothner.com> In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Geoff Keating wrote: > Could you also run a test on some chunk of code that doesn't change? The current patch only effects the C front-end (and ObjC, as I believe it also uses c-tree.h). I have separate patches for C++, but I wanted to get the C patches checked-in first, since the C++ patches require separate approval. But I guess I might as well re-test the C++ patch, and submit that as soon as I've done that, without waiting for approval on the existing patch. -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From gcc-patches-return-75179-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:33:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15039 invoked by alias); 7 Jan 2003 20:33:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15032 invoked from network); 7 Jan 2003 20:33:50 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:33:50 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07KSr124784; Tue, 7 Jan 2003 15:28:53 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07KXcn31016; Tue, 7 Jan 2003 15:33:38 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07KXcn32673; Tue, 7 Jan 2003 12:33:38 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07KXbS16144; Tue, 7 Jan 2003 12:33:37 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:33:36 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Unreviewed patches for 3.2/3.3 and BIB... Message-ID: <20030107203336.GD12992@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> User-Agent: Mutt/1.4i On Wed, Nov 27, 2002 at 01:26:58PM +0100, Jan Hubicka wrote: > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01819.html > (PR target/8213) Ok. > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg00166.html > (PR 7782) Ok. > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01831.html > (SSE fix 33 - PR target/8322 II) Ok. > http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01333.html > (Add conditional addition patterns) Ok. r~ From gcc-patches-return-75180-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:35:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15556 invoked by alias); 7 Jan 2003 20:35:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15546 invoked from network); 7 Jan 2003 20:35:20 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 7 Jan 2003 20:35:20 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h07KZ6Y06951; Tue, 7 Jan 2003 15:35:06 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h07KZ6O2002427; Tue, 7 Jan 2003 18:35:06 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h07KZ5xQ002423; Tue, 7 Jan 2003 18:35:05 -0200 To: Christopher Faylor Cc: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: Re: [RFA] Top-level configure.in needs AC_PREREQ References: <20030107173933.GA9102@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 07 Jan 2003 18:35:05 -0200 In-Reply-To: <20030107173933.GA9102@redhat.com> Message-ID: Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 7, 2003, Christopher Faylor wrote: > 2003-01-07 Christopher Faylor > * configure.in: Add AC_PREREQ for consistency. Ok, thanks. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75181-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:40:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18817 invoked by alias); 7 Jan 2003 20:40:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18802 invoked from network); 7 Jan 2003 20:40:21 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:40:21 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07KZN124971; Tue, 7 Jan 2003 15:35:23 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Ke9n31226; Tue, 7 Jan 2003 15:40:09 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Ke9n00862; Tue, 7 Jan 2003 12:40:09 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07Ke8Z16199; Tue, 7 Jan 2003 12:40:08 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:40:08 -0800 From: Richard Henderson To: Sylvain Pion Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] x86 : LDMXCSR/STMXCSR are SSE, not MMX Message-ID: <20030107204008.GE12992@redhat.com> Mail-Followup-To: Richard Henderson , Sylvain Pion , gcc-patches@gcc.gnu.org References: <20021127150524.A14606@mpii01005.mpi-sb.mpg.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021127150524.A14606@mpii01005.mpi-sb.mpg.de> User-Agent: Mutt/1.4i On Wed, Nov 27, 2002 at 03:05:24PM +0100, Sylvain Pion wrote: > * config/i386/i386.c (ix86_init_mmx_sse_builtins): > __builtin_ia32_ldmxcsr and __builtin_ia32_stmxcsr are SSE, not MXX. > * config/i386/i386.md (ldmxcsr, stmxcsr): SSE, not MMX. Applied 3.3 and mainline. r~ From gcc-patches-return-75182-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:41:01 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19467 invoked by alias); 7 Jan 2003 20:41:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19453 invoked from network); 7 Jan 2003 20:41:01 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:41:01 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07Ka3124998; Tue, 7 Jan 2003 15:36:03 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kemn31267; Tue, 7 Jan 2003 15:40:49 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kemn00982; Tue, 7 Jan 2003 12:40:48 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07Kemc16206; Tue, 7 Jan 2003 12:40:48 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:40:48 -0800 From: Richard Henderson To: David Edelsohn Cc: vmakarov@redhat.com, gcc-patches@gcc.gnu.org Subject: Re: [PATCH] can_issue_more vs USE and CLOBBER Message-ID: <20030107204048.GF12992@redhat.com> Mail-Followup-To: Richard Henderson , David Edelsohn , vmakarov@redhat.com, gcc-patches@gcc.gnu.org References: <200211271954.OAA29034@makai.watson.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200211271954.OAA29034@makai.watson.ibm.com> User-Agent: Mutt/1.4i On Wed, Nov 27, 2002 at 02:54:23PM -0500, David Edelsohn wrote: > * haifa-sched.c (schedule_block): Update can_issue_more only > if not USE or CLOBBER. Ok. r~ From gcc-patches-return-75183-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:42:00 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20372 invoked by alias); 7 Jan 2003 20:42:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20338 invoked from network); 7 Jan 2003 20:41:59 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 7 Jan 2003 20:41:59 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h07KE9B13736 for ; Tue, 7 Jan 2003 15:14:09 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kfla03247 for ; Tue, 7 Jan 2003 15:41:47 -0500 Received: from redhat.com (vpn50-3.rdu.redhat.com [172.16.50.3]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kfln30857; Tue, 7 Jan 2003 15:41:47 -0500 Received: by redhat.com (Postfix, from userid 201) id 282D71C110; Tue, 7 Jan 2003 15:42:25 -0500 (EST) Date: Tue, 7 Jan 2003 15:42:25 -0500 From: Christopher Faylor To: Alexandre Oliva Cc: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: Re: [RFA] Top-level configure.in needs AC_PREREQ Message-ID: <20030107204225.GB27588@redhat.com> Mail-Followup-To: Alexandre Oliva , binutils@sources.redhat.com, gcc-patches@gcc.gnu.org References: <20030107173933.GA9102@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.1i On Tue, Jan 07, 2003 at 06:35:05PM -0200, Alexandre Oliva wrote: >On Jan 7, 2003, Christopher Faylor wrote: >> 2003-01-07 Christopher Faylor > >> * configure.in: Add AC_PREREQ for consistency. > >Ok, thanks. Ok, it's applied. Thanks Alex, cgf From gcc-patches-return-75184-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:42:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21105 invoked by alias); 7 Jan 2003 20:42:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17433 invoked from network); 7 Jan 2003 20:38:50 -0000 Received: from unknown (HELO ns2.uk.superh.com) (193.128.105.170) by 209.249.29.67 with SMTP; 7 Jan 2003 20:38:50 -0000 Received: from sh-uk-ex01.uk.w2k.superh.com (sh-uk-ex01 [192.168.16.17]) by ns2.uk.superh.com (8.11.6+Sun/8.11.6) with ESMTP id h07KMxq27707 for ; Tue, 7 Jan 2003 20:23:02 GMT Received: from superh.com ([192.168.16.50]) by sh-uk-ex01.uk.w2k.superh.com with Microsoft SMTPSVC(5.0.2195.5329); Tue, 7 Jan 2003 20:38:13 +0000 Message-ID: <3E1B3AC3.FD801AB7@superh.com> Date: Tue, 07 Jan 2003 20:38:27 +0000 From: Joern Rennecke Organization: SuperH UK Ltd. X-Accept-Language: en MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: RFA: constraint strings (Was: RFD: constraint letter suffixes) Content-Type: multipart/mixed; boundary="------------5E1289990FF03EC8B8AECE49" X-OriginalArrivalTime: 07 Jan 2003 20:38:13.0953 (UTC) FILETIME=[B34B5310:01C2B68C] This is a multi-part message in MIME format. --------------5E1289990FF03EC8B8AECE49 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit -- -------------------------- SuperH (UK) Ltd. 2410 Aztec West / Almondsbury / BRISTOL / BS32 4QX T:+44 1454 465658 --------------5E1289990FF03EC8B8AECE49 Content-Type: text/plain; charset=us-ascii; name="constraint-diff-030107-cmt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="constraint-diff-030107-cmt" Note: recog.c:constrain_operands and reload.c:find_reloads now both have a loop of the form do switch (c = *p, len = CONSTRAINT_LEN (c, p), c) { /* do stuff... */ } while (p += len, c); Usually the three assignments would go into a block at the top level of the loop, except there is no such block now, and creating it means re-indenting several hundred lines of relatively conservative code in each loop. I am open to do this re-indentation if you think it is a lesser evil then these embedded assignemnts, but I thought at least for the review it makes it easier to see what is going on without these massive re-indentations. There are some smaller and medium-sized re-indentations in this patch though, the largest being in record_reg_classes, where again there was a naked switch statement of some 150 lines in a while loop. Regression tested on sh64-elf. i686-pc-linux-gnu bootstrap in progress. Tue Jan 7 20:07:26 2003 J"orn Rennecke * defaults.h (EXTRA_MEMORY_CONSTRAINT): Add STR argument. (EXTRA_ADDRESS_CONSTRAINT): Likewise. (CONSTRAINT_LEN): Provide default definition. (CONST_OK_FOR_CONSTRAINT_P): Likewise. (CONST_DOUBLE_OK_FOR_CONSTRAINT_P): Likewise. (EXTRA_CONSTRAINT_STR): Likewise. (REG_CLASS_FROM_CONSTRAINT): Define. * genoutput.c (check_constraint_len, constraint_len): New functions. (validate_insn_alternatives): Check CONSTRAINT_LEN for each constraint / modifier. (gen_insn): Call check_constraint_len. * local-alloc.c (block_alloc): Update to use new macros / pass second argument to EXTRA_{MEMORY,ADDRESS}_CONSTRAINT. * ra-build.c (handle_asm_insn): Likewise. * recog.c (asm_operand_ok, preprocess_constraints): Likewise. (constrain_operands, peep2_find_free_register): Likewise. * regclass.c (record_operand_costs, record_reg_classes): Likewise. * regmove.c (find_matches): Likewise. * reload.c (push_secondary_reload, find_reloads): Likewise. (alternative_allows_memconst): Likewise. * reload1.c (maybe_fix_stack_asms): Likewise. (reload_cse_simplify_operands): Likewise. * stmt.c (parse_output_constraint, parse_input_constraint): Likewise. * doc/tm.texi (CONSTRAINT_LEN, REG_CLASS_FROM_CONSTRAINT): Document. (CONST_OK_FOR_CONSTRAINT_P): Likewise. (CONST_DOUBLE_OK_FOR_CONSTRAINT_P, EXTRA_CONSTRAINT_STR): Likewise. (EXTRA_MEMORY_CONSTRAINT, EXTRA_ADDRESS_CONSTRAINT): Add STR argument. * config/s390/s390.h (EXTRA_MEMORY_CONSTRAINT): Likewise. Index: defaults.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/defaults.h,v retrieving revision 1.98 diff -p -u -r1.98 defaults.h --- defaults.h 16 Dec 2002 18:19:20 -0000 1.98 +++ defaults.h 7 Jan 2003 18:51:41 -0000 @@ -604,13 +604,38 @@ You Lose! You must define PREFERRED_DEB /* Determine whether extra constraint letter should be handled via address reload (like 'o'). */ #ifndef EXTRA_MEMORY_CONSTRAINT -#define EXTRA_MEMORY_CONSTRAINT(C) 0 +#define EXTRA_MEMORY_CONSTRAINT(C,STR) 0 #endif /* Determine whether extra constraint letter should be handled as an address (like 'p'). */ #ifndef EXTRA_ADDRESS_CONSTRAINT -#define EXTRA_ADDRESS_CONSTRAINT(C) 0 +#define EXTRA_ADDRESS_CONSTRAINT(C,STR) 0 +#endif + +/* When a port defines CONSTRAINT_LEN, it should use DEFAULT_CONSTRAINT_LEN + for all the characters that it does not want to change, so things like the + 'length' of a digit in a matching constraint is an implementation detail, + and not part of the interface. */ +#define DEFAULT_CONSTRAINT_LEN(C,STR) 1 + +#ifndef CONSTRAINT_LEN +#define CONSTRAINT_LEN(C,STR) DEFAULT_CONSTRAINT_LEN (C, STR) +#endif + +#if defined (CONST_OK_FOR_LETTER_P) && ! defined (CONST_OK_FOR_CONSTRAINT_P) +#define CONST_OK_FOR_CONSTRAINT_P(VAL,C,STR) CONST_OK_FOR_LETTER_P (VAL, C) +#endif + +#if defined (CONST_DOUBLE_OK_FOR_LETTER_P) && ! defined (CONST_DOUBLE_OK_FOR_CONSTRAINT_P) +#define CONST_DOUBLE_OK_FOR_CONSTRAINT_P(OP,C,STR) \ + CONST_DOUBLE_OK_FOR_LETTER_P (OP, C) +#endif + +#define REG_CLASS_FROM_CONSTRAINT(C,STR) REG_CLASS_FROM_LETTER (C) + +#if defined (EXTRA_CONSTRAINT) && ! defined (EXTRA_CONSTRAINT_STR) +#define EXTRA_CONSTRAINT_STR(OP, C,STR) EXTRA_CONSTRAINT (OP, C) #endif #endif /* ! GCC_DEFAULTS_H */ Index: genoutput.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/genoutput.c,v retrieving revision 1.71 diff -p -u -r1.71 genoutput.c --- genoutput.c 16 Dec 2002 18:19:35 -0000 1.71 +++ genoutput.c 7 Jan 2003 18:51:41 -0000 @@ -189,6 +189,8 @@ static void gen_insn PARAMS ((rtx, int)) static void gen_peephole PARAMS ((rtx, int)); static void gen_expand PARAMS ((rtx, int)); static void gen_split PARAMS ((rtx, int)); +static void check_constraint_len PARAMS ((void)); +static int constraint_len PARAMS ((const char *, int)); const char * get_insn_name (index) @@ -749,7 +751,51 @@ validate_insn_alternatives (d) for (start = 0; start < d->n_operands; start++) if (d->operand[start].n_alternatives > 0) { - if (n == 0) + int len, i; + const char *p; + char c; + int which_alternative = 0; + int alternative_count_unsure = 0; + + for (p = d->operand[start].constraint; (c = *p); p += len) + { + len = CONSTRAINT_LEN (c, p); + + if (len < 1 || (len > 1 && strchr (",#*+=&%!0123456789", c))) + { + message_with_line (d->lineno, + "invalid length %d for char '%c' in alternative %d of operand %d", + len, c, which_alternative, start); + len = 1; + have_error = 1; + } + + if (c == ',') + { + which_alternative++; + continue; + } + + for (i = 1; i < len; i++) + if (p[i] == '\0') + { + message_with_line (d->lineno, + "NUL in alternative %d of operand %d", + which_alternative, start); + alternative_count_unsure = 1; + break; + } + else if (strchr (",#*", p[i])) + { + message_with_line (d->lineno, + "'%c' in alternative %d of operand %d", + p[i], which_alternative, start); + alternative_count_unsure = 1; + } + } + if (alternative_count_unsure) + have_error = 1; + else if (n == 0) n = d->operand[start].n_alternatives; else if (n != d->operand[start].n_alternatives) { @@ -816,6 +862,7 @@ gen_insn (insn, lineno) d->n_operands = max_opno + 1; d->n_dups = num_dups; + check_constraint_len (); validate_insn_operands (d); validate_insn_alternatives (d); place_operands (d); @@ -1042,4 +1089,42 @@ strip_whitespace (s) *p = '\0'; return q; +} + +/* Verify that DEFAULT_CONSTRAINT_LEN is used properly and not + tampered with. This isn't bullet-proof, but it should catch + most genuine mistakes. */ +static void +check_constraint_len () +{ + const char *p; + int d; + + for (p = ",#*+=&%!1234567890"; *p; p++) + for (d = -9; d < 9; d++) + if (constraint_len (p, d) != d) + abort (); +} + +static int +constraint_len (p, genoutput_default_constraint_len) + const char *p; + int genoutput_default_constraint_len; +{ + /* Check that we still match defaults.h . First we do a generation-time + check that fails if the value is not the expected one... */ + if (DEFAULT_CONSTRAINT_LEN (*p, p) != 1) + abort (); + /* And now a comile-time check that should give a diagnostic if the + definition doesn't exactly match. */ +#define DEFAULT_CONSTRAINT_LEN(C,STR) 1 + /* Now re-define DEFAULT_CONSTRAINT_LEN so that we can verify it is + being used. */ +#undef DEFAULT_CONSTRAINT_LEN +#define DEFAULT_CONSTRAINT_LEN(C,STR) \ + ((C) != *p || STR != p ? -1 : genoutput_default_constraint_len) + return CONSTRAINT_LEN (*p, p); + /* And set it back. */ +#undef DEFAULT_CONSTRAINT_LEN +#define DEFAULT_CONSTRAINT_LEN(C,STR) 1 } Index: local-alloc.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/local-alloc.c,v retrieving revision 1.113 diff -p -u -r1.113 local-alloc.c --- local-alloc.c 16 Dec 2002 18:19:42 -0000 1.113 +++ local-alloc.c 7 Jan 2003 18:51:42 -0000 @@ -1338,7 +1338,8 @@ block_alloc (b) There may be more than one register, but we only try one of them. */ if (recog_data.constraints[i][0] == 'p' - || EXTRA_ADDRESS_CONSTRAINT (recog_data.constraints[i][0])) + || EXTRA_ADDRESS_CONSTRAINT (recog_data.constraints[i][0], + recog_data.constraints[i])) while (GET_CODE (r1) == PLUS || GET_CODE (r1) == MULT) r1 = XEXP (r1, 0); @@ -2424,50 +2425,56 @@ requires_inout (p) int found_zero = 0; int reg_allowed = 0; int num_matching_alts = 0; + int len; - while ((c = *p++)) - switch (c) - { - case '=': case '+': case '?': - case '#': case '&': case '!': - case '*': case '%': - case 'm': case '<': case '>': case 'V': case 'o': - case 'E': case 'F': case 'G': case 'H': - case 's': case 'i': case 'n': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'X': - /* These don't say anything we care about. */ - break; + for ( ; c = *p; p += len) + { + len = CONSTRAINT_LEN (c, p); + switch (c) + { + case '=': case '+': case '?': + case '#': case '&': case '!': + case '*': case '%': + case 'm': case '<': case '>': case 'V': case 'o': + case 'E': case 'F': case 'G': case 'H': + case 's': case 'i': case 'n': + case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': + case 'X': + /* These don't say anything we care about. */ + break; - case ',': - if (found_zero && ! reg_allowed) - num_matching_alts++; + case ',': + if (found_zero && ! reg_allowed) + num_matching_alts++; - found_zero = reg_allowed = 0; - break; + found_zero = reg_allowed = 0; + break; - case '0': - found_zero = 1; - break; + case '0': + found_zero = 1; + break; - case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - /* Skip the balance of the matching constraint. */ - while (ISDIGIT (*p)) - p++; - break; + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + /* Skip the balance of the matching constraint. */ + do + p++; + while (ISDIGIT (*p)); + len = 0; + break; - default: - if (REG_CLASS_FROM_LETTER (c) == NO_REGS - && !EXTRA_ADDRESS_CONSTRAINT (c)) + default: + if (REG_CLASS_FROM_CONSTRAINT (c, p) == NO_REGS + && !EXTRA_ADDRESS_CONSTRAINT (c, p)) + break; + /* FALLTHRU */ + case 'p': + case 'g': case 'r': + reg_allowed = 1; break; - /* FALLTHRU */ - case 'p': - case 'g': case 'r': - reg_allowed = 1; - break; - } + } + } if (found_zero && ! reg_allowed) num_matching_alts++; Index: ra-build.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra-build.c,v retrieving revision 1.10 diff -p -u -r1.10 ra-build.c --- ra-build.c 16 Dec 2002 18:19:47 -0000 1.10 +++ ra-build.c 7 Jan 2003 18:51:42 -0000 @@ -2933,13 +2933,13 @@ handle_asm_insn (df, insn) CLEAR_HARD_REG_SET (allowed); while (1) { - char c = *p++; + char c = *p; if (c == '\0' || c == ',' || c == '#') { /* End of one alternative - mark the regs in the current - class, and reset the class. - */ + class, and reset the class. */ + p++; IOR_HARD_REG_SET (allowed, reg_class_contents[cls]); if (cls != NO_REGS) nothing_allowed = 0; @@ -2977,8 +2977,10 @@ handle_asm_insn (df, insn) default: cls = (int) reg_class_subunion[cls][(int) - REG_CLASS_FROM_LETTER (c)]; + REG_CLASS_FROM_CONSTRAINT (c, + p)]; } + p += CONSTRAINT_LEN (c, p); } /* Now make conflicts between this web, and all hardregs, which Index: recog.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/recog.c,v retrieving revision 1.169 diff -p -u -r1.169 recog.c --- recog.c 16 Dec 2002 18:19:49 -0000 1.169 +++ recog.c 7 Jan 2003 18:51:42 -0000 @@ -1681,18 +1681,21 @@ asm_operand_ok (op, constraint) while (*constraint) { - char c = *constraint++; + char c = *constraint; + int len; switch (c) { + case ',': + constraint++; + continue; case '=': case '+': case '*': case '%': - case '?': case '!': case '#': case '&': - case ',': + case '?': break; case '0': case '1': case '2': case '3': case '4': @@ -1701,25 +1704,27 @@ asm_operand_ok (op, constraint) proper matching constraint, but we can't actually fail the check if they didn't. Indicate that results are inconclusive. */ - while (ISDIGIT (*constraint)) + do constraint++; - result = -1; - break; + while (ISDIGIT (*constraint)); + if (! result) + result = -1; + continue; case 'p': if (address_operand (op, VOIDmode)) - return 1; + result = 1; break; case 'm': case 'V': /* non-offsettable */ if (memory_operand (op, VOIDmode)) - return 1; + result = 1; break; case 'o': /* offsettable */ if (offsettable_nonstrict_memref_p (op)) - return 1; + result = 1; break; case '<': @@ -1734,7 +1739,7 @@ asm_operand_ok (op, constraint) && (1 || GET_CODE (XEXP (op, 0)) == PRE_DEC || GET_CODE (XEXP (op, 0)) == POST_DEC)) - return 1; + result = 1; break; case '>': @@ -1742,7 +1747,7 @@ asm_operand_ok (op, constraint) && (1 || GET_CODE (XEXP (op, 0)) == PRE_INC || GET_CODE (XEXP (op, 0)) == POST_INC)) - return 1; + result = 1; break; case 'E': @@ -1750,18 +1755,18 @@ asm_operand_ok (op, constraint) if (GET_CODE (op) == CONST_DOUBLE || (GET_CODE (op) == CONST_VECTOR && GET_MODE_CLASS (GET_MODE (op)) == MODE_VECTOR_FLOAT)) - return 1; + result = 1; break; case 'G': if (GET_CODE (op) == CONST_DOUBLE - && CONST_DOUBLE_OK_FOR_LETTER_P (op, 'G')) - return 1; + && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, 'G', constraint)) + result = 1; break; case 'H': if (GET_CODE (op) == CONST_DOUBLE - && CONST_DOUBLE_OK_FOR_LETTER_P (op, 'H')) - return 1; + && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, 'H', constraint)) + result = 1; break; case 's': @@ -1777,94 +1782,100 @@ asm_operand_ok (op, constraint) && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) #endif ) - return 1; + result = 1; break; case 'n': if (GET_CODE (op) == CONST_INT || (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == VOIDmode)) - return 1; + result = 1; break; case 'I': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'I')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'I', constraint)) + result = 1; break; case 'J': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'J')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'J', constraint)) + result = 1; break; case 'K': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'K')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'K', constraint)) + result = 1; break; case 'L': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'L')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'L', constraint)) + result = 1; break; case 'M': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'M')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'M', constraint)) + result = 1; break; case 'N': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'N')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'N', constraint)) + result = 1; break; case 'O': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'O')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'O', constraint)) + result = 1; break; case 'P': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), 'P')) - return 1; + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), 'P', constraint)) + result = 1; break; case 'X': - return 1; + result = 1; case 'g': if (general_operand (op, VOIDmode)) - return 1; + result = 1; break; default: /* For all other letters, we first check for a register class, otherwise it is an EXTRA_CONSTRAINT. */ - if (REG_CLASS_FROM_LETTER (c) != NO_REGS) + if (REG_CLASS_FROM_CONSTRAINT (c, constraint) != NO_REGS) { case 'r': if (GET_MODE (op) == BLKmode) break; if (register_operand (op, VOIDmode)) - return 1; + result = 1; } -#ifdef EXTRA_CONSTRAINT - if (EXTRA_CONSTRAINT (op, c)) - return 1; - if (EXTRA_MEMORY_CONSTRAINT (c)) +#ifdef EXTRA_CONSTRAINT_STR + if (EXTRA_CONSTRAINT_STR (op, c, constraint)) + result = 1; + if (EXTRA_MEMORY_CONSTRAINT (c, constraint)) { /* Every memory operand can be reloaded to fit. */ if (memory_operand (op, VOIDmode)) - return 1; + result = 1; } - if (EXTRA_ADDRESS_CONSTRAINT (c)) + if (EXTRA_ADDRESS_CONSTRAINT (c, constraint)) { /* Every address operand can be reloaded to fit. */ if (address_operand (op, VOIDmode)) - return 1; + result = 1; } #endif break; } + len = CONSTRAINT_LEN (c, constraint); + do + constraint++; + while (--len && *constraint); + if (len) + return 0; } return result; @@ -2233,13 +2244,16 @@ preprocess_constraints () for (;;) { - char c = *p++; + char c = *p; if (c == '#') do - c = *p++; + c = *++p; while (c != ',' && c != '\0'); if (c == ',' || c == '\0') - break; + { + p++; + break; + } switch (c) { @@ -2265,11 +2279,11 @@ preprocess_constraints () case '5': case '6': case '7': case '8': case '9': { char *end; - op_alt[j].matches = strtoul (p - 1, &end, 10); + op_alt[j].matches = strtoul (p, &end, 10); recog_op_alt[op_alt[j].matches][j].matched = i; p = end; } - break; + continue; case 'm': op_alt[j].memory_ok = 1; @@ -2301,22 +2315,28 @@ preprocess_constraints () break; default: - if (EXTRA_MEMORY_CONSTRAINT (c)) + if (EXTRA_MEMORY_CONSTRAINT (c, p)) { op_alt[j].memory_ok = 1; break; } - if (EXTRA_ADDRESS_CONSTRAINT (c)) + if (EXTRA_ADDRESS_CONSTRAINT (c, p)) { op_alt[j].is_address = 1; - op_alt[j].class = reg_class_subunion[(int) op_alt[j].class] - [(int) MODE_BASE_REG_CLASS (VOIDmode)]; + op_alt[j].class + = (reg_class_subunion + [(int) op_alt[j].class] + [(int) MODE_BASE_REG_CLASS (VOIDmode)]); break; } - op_alt[j].class = reg_class_subunion[(int) op_alt[j].class][(int) REG_CLASS_FROM_LETTER ((unsigned char) c)]; + op_alt[j].class + = (reg_class_subunion + [(int) op_alt[j].class] + [(int) REG_CLASS_FROM_CONSTRAINT ((unsigned char) c, p)]); break; } + p += CONSTRAINT_LEN (c, p); } } } @@ -2331,7 +2351,7 @@ preprocess_constraints () alternative of constraints was matched: 0 for the first alternative, 1 for the next, etc. - In addition, when two operands are match + In addition, when two operands are required to match and it happens that the output operand is (reg) while the input operand is --(reg) or ++(reg) (a pre-inc or pre-dec), make the output operand look like the input. @@ -2390,6 +2410,7 @@ constrain_operands (strict) int offset = 0; int win = 0; int val; + int len; earlyclobber[opno] = 0; @@ -2414,9 +2435,16 @@ constrain_operands (strict) if (*p == 0 || *p == ',') win = 1; - while (*p && (c = *p++) != ',') - switch (c) + do + switch (c = *p, len = CONSTRAINT_LEN (c, p), c) { + case '\0': + len = 0; + break; + case ',': + c = '\0'; + break; + case '?': case '!': case '*': case '%': case '=': case '+': break; @@ -2424,8 +2452,10 @@ constrain_operands (strict) case '#': /* Ignore rest of this alternative as far as constraint checking is concerned. */ - while (*p && *p != ',') + do p++; + while (*p && *p != ','); + len = 0; break; case '&': @@ -2447,7 +2477,7 @@ constrain_operands (strict) char *end; int match; - match = strtoul (p - 1, &end, 10); + match = strtoul (p, &end, 10); p = end; if (strict < 0) @@ -2482,6 +2512,7 @@ constrain_operands (strict) funny_match[funny_match_index++].other = match; } } + len = 0; break; case 'p': @@ -2551,7 +2582,7 @@ constrain_operands (strict) case 'G': case 'H': if (GET_CODE (op) == CONST_DOUBLE - && CONST_DOUBLE_OK_FOR_LETTER_P (op, c)) + && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, c, p)) win = 1; break; @@ -2581,7 +2612,7 @@ constrain_operands (strict) case 'O': case 'P': if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), c)) + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), c, p)) win = 1; break; @@ -2612,7 +2643,8 @@ constrain_operands (strict) { enum reg_class class; - class = (c == 'r' ? GENERAL_REGS : REG_CLASS_FROM_LETTER (c)); + class = (c == 'r' + ? GENERAL_REGS : REG_CLASS_FROM_CONSTRAINT (c, p)); if (class != NO_REGS) { if (strict < 0 @@ -2624,11 +2656,11 @@ constrain_operands (strict) && reg_fits_class_p (op, class, offset, mode))) win = 1; } -#ifdef EXTRA_CONSTRAINT - else if (EXTRA_CONSTRAINT (op, c)) +#ifdef EXTRA_CONSTRAINT_STR + else if (EXTRA_CONSTRAINT_STR (op, c, p)) win = 1; - if (EXTRA_MEMORY_CONSTRAINT (c)) + if (EXTRA_MEMORY_CONSTRAINT (c, p)) { /* Every memory operand can be reloaded to fit. */ if (strict < 0 && GET_CODE (op) == MEM) @@ -2643,7 +2675,7 @@ constrain_operands (strict) && REGNO (op) >= FIRST_PSEUDO_REGISTER) win = 1; } - if (EXTRA_ADDRESS_CONSTRAINT (c)) + if (EXTRA_ADDRESS_CONSTRAINT (c, p)) { /* Every address operand can be reloaded to fit. */ if (strict < 0) @@ -2653,6 +2685,7 @@ constrain_operands (strict) break; } } + while (p += len, c); constraints[opno] = p; /* If this operand did not win somehow, @@ -3009,7 +3042,7 @@ peep2_find_free_register (from, to, clas } class = (class_str[0] == 'r' ? GENERAL_REGS - : REG_CLASS_FROM_LETTER (class_str[0])); + : REG_CLASS_FROM_CONSTRAINT (class_str[0], class_str)); for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) { Index: regclass.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/regclass.c,v retrieving revision 1.161 diff -p -u -r1.161 regclass.c --- regclass.c 16 Dec 2002 18:19:50 -0000 1.161 +++ regclass.c 7 Jan 2003 18:51:43 -0000 @@ -977,7 +977,7 @@ record_operand_costs (insn, op_costs, re record_address_regs (XEXP (recog_data.operand[i], 0), MODE_BASE_REG_CLASS (modes[i]), frequency * 2); else if (constraints[i][0] == 'p' - || EXTRA_ADDRESS_CONSTRAINT (constraints[i][0])) + || EXTRA_ADDRESS_CONSTRAINT (constraints[i][0], constraints[i])) record_address_regs (recog_data.operand[i], MODE_BASE_REG_CLASS (modes[i]), frequency * 2); } @@ -1548,154 +1548,161 @@ record_reg_classes (n_alts, n_ops, ops, any of the constraints. Collect the valid register classes and see if this operand accepts memory. */ - while (*p && (c = *p++) != ',') - switch (c) - { - case '*': - /* Ignore the next letter for this pass. */ - p++; - break; - - case '?': - alt_cost += 2; - case '!': case '#': case '&': - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - break; + while ((c = *p)) + { + switch (c) + { + case ',': + break; + case '*': + /* Ignore the next letter for this pass. */ + c = *++p; + break; - case 'p': - allows_addr = 1; - win = address_operand (op, GET_MODE (op)); - /* We know this operand is an address, so we want it to be - allocated to a register that can be the base of an - address, ie BASE_REG_CLASS. */ - classes[i] - = reg_class_subunion[(int) classes[i]] - [(int) MODE_BASE_REG_CLASS (VOIDmode)]; - break; + case '?': + alt_cost += 2; + case '!': case '#': case '&': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + break; - case 'm': case 'o': case 'V': - /* It doesn't seem worth distinguishing between offsettable - and non-offsettable addresses here. */ - allows_mem[i] = 1; - if (GET_CODE (op) == MEM) - win = 1; - break; + case 'p': + allows_addr = 1; + win = address_operand (op, GET_MODE (op)); + /* We know this operand is an address, so we want it to be + allocated to a register that can be the base of an + address, ie BASE_REG_CLASS. */ + classes[i] + = reg_class_subunion[(int) classes[i]] + [(int) MODE_BASE_REG_CLASS (VOIDmode)]; + break; - case '<': - if (GET_CODE (op) == MEM - && (GET_CODE (XEXP (op, 0)) == PRE_DEC - || GET_CODE (XEXP (op, 0)) == POST_DEC)) - win = 1; - break; + case 'm': case 'o': case 'V': + /* It doesn't seem worth distinguishing between offsettable + and non-offsettable addresses here. */ + allows_mem[i] = 1; + if (GET_CODE (op) == MEM) + win = 1; + break; - case '>': - if (GET_CODE (op) == MEM - && (GET_CODE (XEXP (op, 0)) == PRE_INC - || GET_CODE (XEXP (op, 0)) == POST_INC)) - win = 1; - break; + case '<': + if (GET_CODE (op) == MEM + && (GET_CODE (XEXP (op, 0)) == PRE_DEC + || GET_CODE (XEXP (op, 0)) == POST_DEC)) + win = 1; + break; - case 'E': - case 'F': - if (GET_CODE (op) == CONST_DOUBLE - || (GET_CODE (op) == CONST_VECTOR - && (GET_MODE_CLASS (GET_MODE (op)) - == MODE_VECTOR_FLOAT))) - win = 1; - break; + case '>': + if (GET_CODE (op) == MEM + && (GET_CODE (XEXP (op, 0)) == PRE_INC + || GET_CODE (XEXP (op, 0)) == POST_INC)) + win = 1; + break; - case 'G': - case 'H': - if (GET_CODE (op) == CONST_DOUBLE - && CONST_DOUBLE_OK_FOR_LETTER_P (op, c)) - win = 1; - break; + case 'E': + case 'F': + if (GET_CODE (op) == CONST_DOUBLE + || (GET_CODE (op) == CONST_VECTOR + && (GET_MODE_CLASS (GET_MODE (op)) + == MODE_VECTOR_FLOAT))) + win = 1; + break; - case 's': - if (GET_CODE (op) == CONST_INT - || (GET_CODE (op) == CONST_DOUBLE - && GET_MODE (op) == VOIDmode)) + case 'G': + case 'H': + if (GET_CODE (op) == CONST_DOUBLE + && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (op, c, p)) + win = 1; break; - case 'i': - if (CONSTANT_P (op) + + case 's': + if (GET_CODE (op) == CONST_INT + || (GET_CODE (op) == CONST_DOUBLE + && GET_MODE (op) == VOIDmode)) + break; + case 'i': + if (CONSTANT_P (op) #ifdef LEGITIMATE_PIC_OPERAND_P - && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) + && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) #endif - ) - win = 1; - break; + ) + win = 1; + break; - case 'n': - if (GET_CODE (op) == CONST_INT - || (GET_CODE (op) == CONST_DOUBLE - && GET_MODE (op) == VOIDmode)) - win = 1; - break; + case 'n': + if (GET_CODE (op) == CONST_INT + || (GET_CODE (op) == CONST_DOUBLE + && GET_MODE (op) == VOIDmode)) + win = 1; + break; - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - if (GET_CODE (op) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (op), c)) - win = 1; - break; + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + if (GET_CODE (op) == CONST_INT + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (op), c, p)) + win = 1; + break; - case 'X': - win = 1; - break; + case 'X': + win = 1; + break; - case 'g': - if (GET_CODE (op) == MEM - || (CONSTANT_P (op) + case 'g': + if (GET_CODE (op) == MEM + || (CONSTANT_P (op) #ifdef LEGITIMATE_PIC_OPERAND_P - && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) + && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) #endif - )) - win = 1; - allows_mem[i] = 1; - case 'r': - classes[i] - = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS]; - break; - - default: - if (REG_CLASS_FROM_LETTER (c) != NO_REGS) + )) + win = 1; + allows_mem[i] = 1; + case 'r': classes[i] - = reg_class_subunion[(int) classes[i]] - [(int) REG_CLASS_FROM_LETTER (c)]; -#ifdef EXTRA_CONSTRAINT - else if (EXTRA_CONSTRAINT (op, c)) - win = 1; + = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS]; + break; - if (EXTRA_MEMORY_CONSTRAINT (c)) - { - /* Every MEM can be reloaded to fit. */ - allows_mem[i] = 1; - if (GET_CODE (op) == MEM) - win = 1; - } - if (EXTRA_ADDRESS_CONSTRAINT (op)) - { - /* Every address can be reloaded to fit. */ - allows_addr = 1; - if (address_operand (op, GET_MODE (op))) - win = 1; - /* We know this operand is an address, so we want it to be - allocated to a register that can be the base of an - address, ie BASE_REG_CLASS. */ + default: + if (REG_CLASS_FROM_CONSTRAINT (c, p) != NO_REGS) classes[i] = reg_class_subunion[(int) classes[i]] - [(int) MODE_BASE_REG_CLASS (VOIDmode)]; - } + [(int) REG_CLASS_FROM_CONSTRAINT (c, p)]; +#ifdef EXTRA_CONSTRAINT_STR + else if (EXTRA_CONSTRAINT_STR (op, c, p)) + win = 1; + + if (EXTRA_MEMORY_CONSTRAINT (c, p)) + { + /* Every MEM can be reloaded to fit. */ + allows_mem[i] = 1; + if (GET_CODE (op) == MEM) + win = 1; + } + if (EXTRA_ADDRESS_CONSTRAINT (c, p)) + { + /* Every address can be reloaded to fit. */ + allows_addr = 1; + if (address_operand (op, GET_MODE (op))) + win = 1; + /* We know this operand is an address, so we want it to + be allocated to a register that can be the base of an + address, ie BASE_REG_CLASS. */ + classes[i] + = reg_class_subunion[(int) classes[i]] + [(int) MODE_BASE_REG_CLASS (VOIDmode)]; + } #endif + break; + } + p += CONSTRAINT_LEN (c, p); + if (c == ',') break; - } + } constraints[i] = p; Index: regmove.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/regmove.c,v retrieving revision 1.135 diff -p -u -r1.135 regmove.c --- regmove.c 16 Dec 2002 18:19:50 -0000 1.135 +++ regmove.c 7 Jan 2003 18:51:43 -0000 @@ -1570,47 +1570,50 @@ find_matches (insn, matchp) if (*p == ',') i++; - while ((c = *p++) != '\0' && c != ',') - switch (c) - { - case '=': - break; - case '+': - break; - case '&': - matchp->early_clobber[op_no] = 1; - break; - case '%': - matchp->commutative[op_no] = op_no + 1; - matchp->commutative[op_no + 1] = op_no; - break; - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': + while ((c = *p) != '\0' && c != ',') + { + switch (c) { - char *end; - unsigned long match_ul = strtoul (p - 1, &end, 10); - int match = match_ul; + case '=': + break; + case '+': + break; + case '&': + matchp->early_clobber[op_no] = 1; + break; + case '%': + matchp->commutative[op_no] = op_no + 1; + matchp->commutative[op_no + 1] = op_no; + break; - p = end; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + char *end; + unsigned long match_ul = strtoul (p, &end, 10); + int match = match_ul; - if (match < op_no && likely_spilled[match]) - break; - matchp->with[op_no] = match; - any_matches = 1; - if (matchp->commutative[op_no] >= 0) - matchp->with[matchp->commutative[op_no]] = match; - } - break; + p = end; + + if (match < op_no && likely_spilled[match]) + continue; + matchp->with[op_no] = match; + any_matches = 1; + if (matchp->commutative[op_no] >= 0) + matchp->with[matchp->commutative[op_no]] = match; + } + continue; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'h': case 'j': case 'k': case 'l': case 'p': case 'q': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'W': case 'Y': case 'Z': - if (CLASS_LIKELY_SPILLED_P (REG_CLASS_FROM_LETTER ((unsigned char) c))) + if (CLASS_LIKELY_SPILLED_P (REG_CLASS_FROM_CONSTRAINT ((unsigned char) c, p) )) likely_spilled[op_no] = 1; break; } + p += CONSTRAINT_LEN (c, p); + } } return any_matches; } Index: reload.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/reload.c,v retrieving revision 1.200 diff -p -u -r1.200 reload.c --- reload.c 16 Dec 2002 18:19:50 -0000 1.200 +++ reload.c 7 Jan 2003 18:51:44 -0000 @@ -381,11 +381,13 @@ push_secondary_reload (in_p, x, opnum, o insn_class = ALL_REGS; else { - char insn_letter - = insn_data[(int) icode].operand[!in_p].constraint[in_p]; + const char *insn_constraint + = &insn_data[(int) icode].operand[!in_p].constraint[in_p]; + char insn_letter = *insn_constraint; insn_class = (insn_letter == 'r' ? GENERAL_REGS - : REG_CLASS_FROM_LETTER ((unsigned char) insn_letter)); + : REG_CLASS_FROM_CONSTRAINT ((unsigned char) insn_letter, + insn_constraint)); if (insn_class == NO_REGS) abort (); @@ -403,11 +405,14 @@ push_secondary_reload (in_p, x, opnum, o mode = insn_data[(int) icode].operand[2].mode; else { - char t_letter = insn_data[(int) icode].operand[2].constraint[2]; + const char *t_constraint + = &insn_data[(int) icode].operand[2].constraint[2]; + char t_letter = *t_constraint; class = insn_class; t_mode = insn_data[(int) icode].operand[2].mode; t_class = (t_letter == 'r' ? GENERAL_REGS - : REG_CLASS_FROM_LETTER ((unsigned char) t_letter)); + : REG_CLASS_FROM_CONSTRAINT ((unsigned char) t_letter, + t_constraint)); t_icode = icode; icode = CODE_FOR_nothing; } @@ -2587,8 +2592,9 @@ find_reloads (insn, replace, ind_levels, /* Scan this operand's constraint to see if it is an output operand, an in-out operand, is commutative, or should match another. */ - while ((c = *p++)) + while ((c = *p)) { + p += CONSTRAINT_LEN (c, p); if (c == '=') modified[i] = RELOAD_WRITE; else if (c == '+') @@ -2664,7 +2670,7 @@ find_reloads (insn, replace, ind_levels, /* Ignore things like match_operator operands. */ ; else if (constraints[i][0] == 'p' - || EXTRA_ADDRESS_CONSTRAINT (constraints[i][0])) + || EXTRA_ADDRESS_CONSTRAINT (constraints[i][0], constraints[i])) { find_reloads_address (recog_data.operand_mode[i], (rtx*) 0, recog_data.operand[i], @@ -2829,6 +2835,8 @@ find_reloads (insn, replace, ind_levels, for (i = 0; i < noperands; i++) { char *p = constraints[i]; + char *end; + int len; int win = 0; int did_match = 0; /* 0 => this operand can be reloaded somehow for this alternative. */ @@ -2836,6 +2844,7 @@ find_reloads (insn, replace, ind_levels, /* 0 => this operand can be reloaded if the alternative allows regs. */ int winreg = 0; int c; + int m; rtx operand = recog_data.operand[i]; int offset = 0; /* Nonzero means this is a MEM that must be reloaded into a reg @@ -2964,9 +2973,16 @@ find_reloads (insn, replace, ind_levels, or set WINREG if this operand could fit after reloads provided the constraint allows some registers. */ - while (*p && (c = *p++) != ',') - switch (c) + do + switch ((c = *p, len = CONSTRAINT_LEN (c, p)), c) { + case '\0': + len = 0; + break; + case ',': + c = '\0'; + break; + case '=': case '+': case '*': break; @@ -2987,15 +3003,19 @@ find_reloads (insn, replace, ind_levels, case '#': /* Ignore rest of this alternative as far as reloading is concerned. */ - while (*p && *p != ',') + do p++; + while (*p && *p != ','); + len = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - c = strtoul (p - 1, &p, 10); + m = strtoul (p, &end, 10); + p = end; + len = 0; - this_alternative_matches[i] = c; + this_alternative_matches[i] = m; /* We are supposed to match a previous operand. If we do, we win if that one did. If we do not, count both of the operands as losers. @@ -3003,7 +3023,7 @@ find_reloads (insn, replace, ind_levels, only a single reload insn will be needed to make the two operands win. As a result, this alternative may be rejected when it is actually desirable.) */ - if ((swapped && (c != commutative || i != commutative + 1)) + if ((swapped && (m != commutative || i != commutative + 1)) /* If we are matching as if two operands were swapped, also pretend that operands_match had been computed with swapped. @@ -3011,22 +3031,22 @@ find_reloads (insn, replace, ind_levels, don't exchange them, because operands_match is valid only on one side of its diagonal. */ ? (operands_match - [(c == commutative || c == commutative + 1) - ? 2 * commutative + 1 - c : c] + [(m == commutative || m == commutative + 1) + ? 2 * commutative + 1 - m : m] [(i == commutative || i == commutative + 1) ? 2 * commutative + 1 - i : i]) - : operands_match[c][i]) + : operands_match[m][i]) { /* If we are matching a non-offsettable address where an offsettable address was expected, then we must reject this combination, because we can't reload it. */ - if (this_alternative_offmemok[c] - && GET_CODE (recog_data.operand[c]) == MEM - && this_alternative[c] == (int) NO_REGS - && ! this_alternative_win[c]) + if (this_alternative_offmemok[m] + && GET_CODE (recog_data.operand[m]) == MEM + && this_alternative[m] == (int) NO_REGS + && ! this_alternative_win[m]) bad = 1; - did_match = this_alternative_win[c]; + did_match = this_alternative_win[m]; } else { @@ -3034,21 +3054,21 @@ find_reloads (insn, replace, ind_levels, rtx value; /* Retroactively mark the operand we had to match as a loser, if it wasn't already. */ - if (this_alternative_win[c]) + if (this_alternative_win[m]) losers++; - this_alternative_win[c] = 0; - if (this_alternative[c] == (int) NO_REGS) + this_alternative_win[m] = 0; + if (this_alternative[m] == (int) NO_REGS) bad = 1; /* But count the pair only once in the total badness of this alternative, if the pair can be a dummy reload. */ value = find_dummy_reload (recog_data.operand[i], - recog_data.operand[c], + recog_data.operand[m], recog_data.operand_loc[i], - recog_data.operand_loc[c], - operand_mode[i], operand_mode[c], - this_alternative[c], -1, - this_alternative_earlyclobber[c]); + recog_data.operand_loc[m], + operand_mode[i], operand_mode[m], + this_alternative[m], -1, + this_alternative_earlyclobber[m]); if (value != 0) losers--; @@ -3056,7 +3076,7 @@ find_reloads (insn, replace, ind_levels, /* This can be fixed with reloads if the operand we are supposed to match can be fixed with reloads. */ badop = 0; - this_alternative[i] = this_alternative[c]; + this_alternative[i] = this_alternative[m]; /* If we have to reload this operand and some previous operand also had to match the same thing as this @@ -3175,7 +3195,7 @@ find_reloads (insn, replace, ind_levels, case 'G': case 'H': if (GET_CODE (operand) == CONST_DOUBLE - && CONST_DOUBLE_OK_FOR_LETTER_P (operand, c)) + && CONST_DOUBLE_OK_FOR_CONSTRAINT_P (operand, c, p)) win = 1; break; @@ -3209,7 +3229,7 @@ find_reloads (insn, replace, ind_levels, case 'O': case 'P': if (GET_CODE (operand) == CONST_INT - && CONST_OK_FOR_LETTER_P (INTVAL (operand), c)) + && CONST_OK_FOR_CONSTRAINT_P (INTVAL (operand), c, p)) win = 1; break; @@ -3242,14 +3262,14 @@ find_reloads (insn, replace, ind_levels, goto reg; default: - if (REG_CLASS_FROM_LETTER (c) == NO_REGS) + if (REG_CLASS_FROM_CONSTRAINT (c, p) == NO_REGS) { -#ifdef EXTRA_CONSTRAINT - if (EXTRA_MEMORY_CONSTRAINT (c)) +#ifdef EXTRA_CONSTRAINT_STR + if (EXTRA_MEMORY_CONSTRAINT (c, p)) { if (force_reload) break; - if (EXTRA_CONSTRAINT (operand, c)) + if (EXTRA_CONSTRAINT_STR (operand, c, p)) win = 1; /* If the address was already reloaded, we win as well. */ @@ -3262,7 +3282,7 @@ find_reloads (insn, replace, ind_levels, && REGNO (operand) >= FIRST_PSEUDO_REGISTER && reg_renumber[REGNO (operand)] < 0 && ((reg_equiv_mem[REGNO (operand)] != 0 - && EXTRA_CONSTRAINT (reg_equiv_mem[REGNO (operand)], c)) + && EXTRA_CONSTRAINT_STR (reg_equiv_mem[REGNO (operand)], c, p)) || (reg_equiv_address[REGNO (operand)] != 0))) win = 1; @@ -3276,9 +3296,9 @@ find_reloads (insn, replace, ind_levels, offmemok = 1; break; } - if (EXTRA_ADDRESS_CONSTRAINT (c)) + if (EXTRA_ADDRESS_CONSTRAINT (c, p)) { - if (EXTRA_CONSTRAINT (operand, c)) + if (EXTRA_CONSTRAINT_STR (operand, c, p)) win = 1; /* If we didn't already win, we can reload @@ -3292,14 +3312,16 @@ find_reloads (insn, replace, ind_levels, break; } - if (EXTRA_CONSTRAINT (operand, c)) + if (EXTRA_CONSTRAINT_STR (operand, c, p)) win = 1; #endif break; } this_alternative[i] - = (int) reg_class_subunion[this_alternative[i]][(int) REG_CLASS_FROM_LETTER (c)]; + = (int) (reg_class_subunion + [this_alternative[i]] + [(int) REG_CLASS_FROM_CONSTRAINT (c, p)]); reg: if (GET_MODE (operand) == BLKmode) break; @@ -3310,6 +3332,7 @@ find_reloads (insn, replace, ind_levels, win = 1; break; } + while ((p += len), c); constraints[i] = p; @@ -4358,8 +4381,9 @@ alternative_allows_memconst (constraint, } /* Scan the requested alternative for 'm' or 'o'. If one of them is present, this alternative accepts memory constants. */ - while ((c = *constraint++) && c != ',' && c != '#') - if (c == 'm' || c == 'o' || EXTRA_MEMORY_CONSTRAINT (c)) + for (; (c = *constraint) && c != ',' && c != '#'; + constraint += CONSTRAINT_LEN (c, constraint)) + if (c == 'm' || c == 'o' || EXTRA_MEMORY_CONSTRAINT (c, constraint)) return 1; return 0; } Index: reload1.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/reload1.c,v retrieving revision 1.368 diff -p -u -r1.368 reload1.c --- reload1.c 19 Dec 2002 05:18:05 -0000 1.368 +++ reload1.c 7 Jan 2003 18:51:44 -0000 @@ -1355,7 +1355,7 @@ maybe_fix_stack_asms () for (;;) { - char c = *p++; + char c = *p; if (c == '\0' || c == ',' || c == '#') { @@ -1363,6 +1363,7 @@ maybe_fix_stack_asms () class, and reset the class. */ IOR_HARD_REG_SET (allowed, reg_class_contents[cls]); cls = NO_REGS; + p++; if (c == '#') do { c = *p++; @@ -1393,13 +1394,14 @@ maybe_fix_stack_asms () break; default: - if (EXTRA_ADDRESS_CONSTRAINT (c)) + if (EXTRA_ADDRESS_CONSTRAINT (c, p)) cls = (int) reg_class_subunion[cls] [(int) MODE_BASE_REG_CLASS (VOIDmode)]; else cls = (int) reg_class_subunion[cls] - [(int) REG_CLASS_FROM_LETTER (c)]; + [(int) REG_CLASS_FROM_CONSTRAINT (c, p)]; } + p += CONSTRAINT_LEN (c, p); } } /* Those of the registers which are clobbered, but allowed by the @@ -8413,7 +8415,7 @@ reload_cse_simplify_operands (insn, test p = constraints[i]; for (;;) { - char c = *p++; + char c = *p; switch (c) { @@ -8437,7 +8439,9 @@ reload_cse_simplify_operands (insn, test default: class - = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER ((unsigned char) c)]; + = (reg_class_subunion + [(int) class] + [(int) REG_CLASS_FROM_CONSTRAINT ((unsigned char) c, p)]); break; case ',': case '\0': @@ -8457,6 +8461,7 @@ reload_cse_simplify_operands (insn, test j++; break; } + p += CONSTRAINT_LEN (c, p); if (c == '\0') break; Index: stmt.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/stmt.c,v retrieving revision 1.279 diff -p -u -r1.279 stmt.c --- stmt.c 19 Dec 2002 17:06:45 -0000 1.279 +++ stmt.c 7 Jan 2003 18:51:46 -0000 @@ -1189,7 +1189,7 @@ parse_output_constraint (constraint_p, o } /* Loop through the constraint string. */ - for (p = constraint + 1; *p; ++p) + for (p = constraint + 1; *p; p += CONSTRAINT_LEN (*p, p)) switch (*p) { case '+': @@ -1241,12 +1241,12 @@ parse_output_constraint (constraint_p, o default: if (!ISALPHA (*p)) break; - if (REG_CLASS_FROM_LETTER (*p) != NO_REGS) + if (REG_CLASS_FROM_CONSTRAINT (*p, p) != NO_REGS) *allows_reg = true; -#ifdef EXTRA_CONSTRAINT - else if (EXTRA_ADDRESS_CONSTRAINT (*p)) +#ifdef EXTRA_CONSTRAINT_STR + else if (EXTRA_ADDRESS_CONSTRAINT (*p, p)) *allows_reg = true; - else if (EXTRA_MEMORY_CONSTRAINT (*p)) + else if (EXTRA_MEMORY_CONSTRAINT (*p, p)) *allows_mem = true; else { @@ -1289,7 +1289,7 @@ parse_input_constraint (constraint_p, in /* Make sure constraint has neither `=', `+', nor '&'. */ - for (j = 0; j < c_len; j++) + for (j = 0; j < c_len; j += CONSTRAINT_LEN (constraint[j], constraint+j)) switch (constraint[j]) { case '+': case '=': case '&': @@ -1348,10 +1348,16 @@ parse_input_constraint (constraint_p, in *constraint_p = constraint; c_len = strlen (constraint); j = 0; + /* ??? At the end of the loop, we will skip the first part of + the matched constraint. This assumes not only that the + other constraint is an output constraint, but also that + the '=' or '+' come first. */ break; } else j = end - constraint; + /* Anticipate increment at end of loop. */ + j--; } /* Fall through. */ @@ -1370,12 +1376,13 @@ parse_input_constraint (constraint_p, in error ("invalid punctuation `%c' in constraint", constraint[j]); return false; } - if (REG_CLASS_FROM_LETTER (constraint[j]) != NO_REGS) + if (REG_CLASS_FROM_CONSTRAINT (constraint[j], constraint + j) + != NO_REGS) *allows_reg = true; -#ifdef EXTRA_CONSTRAINT - else if (EXTRA_ADDRESS_CONSTRAINT (constraint[j])) +#ifdef EXTRA_CONSTRAINT_STR + else if (EXTRA_ADDRESS_CONSTRAINT (constraint[j], constraint + j)) *allows_reg = true; - else if (EXTRA_MEMORY_CONSTRAINT (constraint[j])) + else if (EXTRA_MEMORY_CONSTRAINT (constraint[j], constraint + j)) *allows_mem = true; else { Index: doc/tm.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v retrieving revision 1.184 diff -p -u -r1.184 tm.texi --- doc/tm.texi 17 Dec 2002 16:47:45 -0000 1.184 +++ doc/tm.texi 7 Jan 2003 18:51:50 -0000 @@ -1908,7 +1908,8 @@ If the usage of an entire class of regis flags, you may indicate this to GCC by using this macro to modify @code{fixed_regs} and @code{call_used_regs} to 1 for each of the registers in the classes which should not be used by GCC@. Also define -the macro @code{REG_CLASS_FROM_LETTER} to return @code{NO_REGS} if it +the macro @code{REG_CLASS_FROM_LETTER} / @code{REG_CLASS_FROM_CONSTRAINT} +to return @code{NO_REGS} if it is called with a letter for a class that shouldn't be used. (However, if this class is not included in @code{GENERAL_REGS} and all @@ -2328,6 +2329,21 @@ index register must belong. An index re address where its value is either multiplied by a scale factor or added to another register (as well as added to a displacement). +@findex CONSTRAINT_LEN +@item CONSTRAINT_LEN (@var{char}, @var{str}) +For the constraint at the start of @var{str}, which starts with the letter +@var{c}, return the length. This allows you to have register class / +constant / extra constraints that are longer than a single letter; +you don't need to define this macro if you can do with single-letter +constraints only. The definition of this macro should use +DEFAULT_CONSTRAINT_LEN for all the characters that you don't want +to handle specially. +There are some sanity checks in genoutput.c that check the constraint lengths +for the md file, so you can also use this macro to help you while you are +transitioning from a byzantine single-letter-constraint scheme: when you +return a negative length for a constraint you want to re-use, genoutput +will complain about every instance where it is used in the md file. + @findex REG_CLASS_FROM_LETTER @item REG_CLASS_FROM_LETTER (@var{char}) A C expression which defines the machine-dependent operand constraint @@ -2337,6 +2353,12 @@ the value should be @code{NO_REGS}. The corresponding to class @code{GENERAL_REGS}, will not be passed to this macro; you do not need to handle it. +@findex REG_CLASS_FROM_CONSTRAINT +@item REG_CLASS_FROM_CONSTRAINT (@var{char}, @var{str}) +Like @code{REG_CLASS_FROM_LETTER}, but you also get the constraint string +passed in @var{str}, so that you can use suffixes to distinguish between +different variants. + @findex REGNO_OK_FOR_BASE_P @item REGNO_OK_FOR_BASE_P (@var{num}) A C expression which is nonzero if register number @var{num} is @@ -2606,6 +2628,12 @@ the appropriate range and return 1 if so not one of those letters, the value should be 0 regardless of @var{value}. +@findex CONST_OK_FOR_CONSTRAINT_P +@item CONST_OK_FOR_CONSTRAINT_P (@var{value}, @var{c}, @var{str}) +Like @code{CONST_OK_FOR_LETTER_P}, but you also get the constraint +string passed in @var{str}, so that you can use suffixes to distinguish +between different variants. + @findex CONST_DOUBLE_OK_FOR_LETTER_P @item CONST_DOUBLE_OK_FOR_LETTER_P (@var{value}, @var{c}) A C expression that defines the machine-dependent operand constraint @@ -2622,12 +2650,19 @@ letters, the value should be 0 regardles or both kinds of values. It can use @code{GET_MODE} to distinguish between these kinds. +@findex CONST_DOUBLE_OK_FOR_CONSTRAINT_P +@item CONST_DOUBLE_OK_FOR_CONSTRAINT_P (@var{value}, @var{c}, @var{str}) +Like @code{CONST_DOUBLE_OK_FOR_LETTER_P}, but you also get the constraint +string passed in @var{str}, so that you can use suffixes to distinguish +between different variants. + @findex EXTRA_CONSTRAINT @item EXTRA_CONSTRAINT (@var{value}, @var{c}) A C expression that defines the optional machine-dependent constraint letters that can be used to segregate specific types of operands, usually memory references, for the target machine. Any letter that is not -elsewhere defined and not matched by @code{REG_CLASS_FROM_LETTER} +elsewhere defined and not matched by @code{REG_CLASS_FROM_LETTER} / +@code{REG_CLASS_FROM_CONSTRAINT} may be used. Normally this macro will not be defined. If it is required for a particular target machine, it should return 1 @@ -2643,14 +2678,21 @@ a @samp{Q} constraint on the input and @ alternative specifies @samp{m} on the input and a register class that does not include r0 on the output. +@findex EXTRA_CONSTRAINT_STR +@item EXTRA_CONSTRAINT_STR (@var{value}, @var{c}, @var{str}) +Like @code{EXTRA_CONSTRAINT}, but you also get the constraint string passed +in @var{str}, so that you can use suffixes to distinguish between different +variants. + @findex EXTRA_MEMORY_CONSTRAINT -@item EXTRA_MEMORY_CONSTRAINT (@var{c}) +@item EXTRA_MEMORY_CONSTRAINT (@var{c}, @var{str}) A C expression that defines the optional machine-dependent constraint letters, amongst those accepted by @code{EXTRA_CONSTRAINT}, that should be treated like memory constraints by the reload pass. It should return 1 if the operand type represented by the constraint -letter @var{c} comprises a subset of all memory references including +at the start of @var{str}, the first letter of which is the letter @var{c}, + comprises a subset of all memory references including all those whose address is simply a base register. This allows the reload pass to reload an operand, if it does not directly correspond to the operand type of @var{c}, by copying its address into a base register. @@ -2666,16 +2708,18 @@ into a base register if required. This a @samp{o} constraint can handle any memory operand. @findex EXTRA_ADDRESS_CONSTRAINT -@item EXTRA_ADDRESS_CONSTRAINT (@var{c}) +@item EXTRA_ADDRESS_CONSTRAINT (@var{c}, @var{str}) A C expression that defines the optional machine-dependent constraint -letters, amongst those accepted by @code{EXTRA_CONSTRAINT}, that should +letters, amongst those accepted by @code{EXTRA_CONSTRAINT} / +@code{EXTRA_CONSTRAINT_STR}, that should be treated like address constraints by the reload pass. It should return 1 if the operand type represented by the constraint -letter @var{c} comprises a subset of all memory addresses including +at the startr of @{str}, which starts with the letter @var{c}, comprises +a subset of all memory addresses including all those that consist of just a base register. This allows the reload pass to reload an operand, if it does not directly correspond to the operand -type of @var{c}, by copying it into a base register. +type of @var{str}, by copying it into a base register. Any constraint marked as @code{EXTRA_ADDRESS_CONSTRAINT} can only be used with the @code{address_operand} predicate. It is treated Index: config/s390/s390.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.h,v retrieving revision 1.55 diff -p -u -r1.55 s390.h --- config/s390/s390.h 20 Dec 2002 13:02:42 -0000 1.55 +++ config/s390/s390.h 7 Jan 2003 20:10:05 -0000 @@ -473,7 +473,7 @@ extern const enum reg_class regclass_map ((C) == 'Q' ? q_constraint (OP) : \ (C) == 'S' ? larl_operand (OP, GET_MODE (OP)) : 0) -#define EXTRA_MEMORY_CONSTRAINT(C) ((C) == 'Q') +#define EXTRA_MEMORY_CONSTRAINT(C,STR) ((C) == 'Q') /* Stack layout and calling conventions. */ --------------5E1289990FF03EC8B8AECE49-- From gcc-patches-return-75185-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:42:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21299 invoked by alias); 7 Jan 2003 20:42:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18908 invoked from network); 7 Jan 2003 20:40:24 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 7 Jan 2003 20:40:24 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id 48F6C4DE31; Tue, 7 Jan 2003 21:40:14 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Tue, 7 Jan 2003 21:40:14 +0100 Date: Tue, 7 Jan 2003 21:40:14 +0100 From: Jan Hubicka To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Unreviewed patches for 3.2/3.3 and BIB... Message-ID: <20030107204014.GC10268@kam.mff.cuni.cz> References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107203336.GD12992@redhat.com> User-Agent: Mutt/1.3.28i > On Wed, Nov 27, 2002 at 01:26:58PM +0100, Jan Hubicka wrote: > > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01819.html > > (PR target/8213) > > Ok. > > > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg00166.html > > (PR 7782) > > Ok. > > > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01831.html > > (SSE fix 33 - PR target/8322 II) > > Ok. > > > http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01333.html > > (Add conditional addition patterns) > > Ok. Thanks a lot! I did have code to use this in i386.c. Did I sent this one? Honza > > > r~ From gcc-patches-return-75186-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:44:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22936 invoked by alias); 7 Jan 2003 20:44:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20851 invoked from network); 7 Jan 2003 20:42:26 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 7 Jan 2003 20:42:26 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id 8FE8C4EB0A; Tue, 7 Jan 2003 21:42:16 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Tue, 7 Jan 2003 21:42:16 +0100 Date: Tue, 7 Jan 2003 21:42:16 +0100 From: Jan Hubicka To: Jan Hubicka Cc: Richard Henderson , gcc-patches@gcc.gnu.org Subject: Conditional addition for i386 Message-ID: <20030107204216.GD10268@kam.mff.cuni.cz> References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107204014.GC10268@kam.mff.cuni.cz> User-Agent: Mutt/1.3.28i > > On Wed, Nov 27, 2002 at 01:26:58PM +0100, Jan Hubicka wrote: > > > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01819.html > > > (PR target/8213) > > > > Ok. > > > > > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg00166.html > > > (PR 7782) > > > > Ok. > > > > > http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01831.html > > > (SSE fix 33 - PR target/8322 II) > > > > Ok. > > > > > http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01333.html > > > (Add conditional addition patterns) > > > > Ok. > Thanks a lot! > I did have code to use this in i386.c. Did I sent this one? Probably I didn't but found it on the disc :) Hi, this patch adds conditional increment/decrement support for i386. The speed of the attached testcase is improved about 4 times. /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-O2 -march=athlon" } */ /* { dg-final { scan-assembler "sbb" } } */ /* Conditional increment is best done using sbb $-1, val. */ int t[]={0,0,0,0,1,1,1,1,1,1}; q() { int sum=0; int i; for (i=0;i<10;i++) if (t[i]) sum++; if (sum != 6) abort (); } main() { int i; for (i=0;i<10000000;i++) q(); } Honza Fri Nov 22 01:36:03 CET 2002 Jan Hubicka * i386.md (adddi3_carry_rex64, subdi3_carry_rex64): Name pattern. (addhi3_carry, addqi3_carry, subhi3_carry, subqi3_carry): New patterns. *** i386.md.old Thu Nov 21 23:10:32 2002 --- i386.md Fri Nov 22 01:04:57 2002 *************** *** 5035,5041 **** split_di (operands+1, 1, operands+1, operands+4); split_di (operands+2, 1, operands+2, operands+5);") ! (define_insn "*adddi3_carry_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") (plus:DI (plus:DI (ltu:DI (reg:CC 17) (const_int 0)) (match_operand:DI 1 "nonimmediate_operand" "%0,0")) --- 5035,5041 ---- split_di (operands+1, 1, operands+1, operands+4); split_di (operands+2, 1, operands+2, operands+5);") ! (define_insn "adddi3_carry_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") (plus:DI (plus:DI (ltu:DI (reg:CC 17) (const_int 0)) (match_operand:DI 1 "nonimmediate_operand" "%0,0")) *************** *** 5060,5066 **** [(set_attr "type" "alu") (set_attr "mode" "DI")]) ! (define_insn "*addsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) (match_operand:SI 1 "nonimmediate_operand" "%0,0")) --- 5060,5092 ---- [(set_attr "type" "alu") (set_attr "mode" "DI")]) ! (define_insn "addqi3_carry" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=rm,r") ! (plus:QI (plus:QI (ltu:QI (reg:CC 17) (const_int 0)) ! (match_operand:QI 1 "nonimmediate_operand" "%0,0")) ! (match_operand:QI 2 "general_operand" "ri,rm"))) ! (clobber (reg:CC 17))] ! "ix86_binary_operator_ok (PLUS, QImode, operands)" ! "adc{b}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "pent_pair" "pu") ! (set_attr "mode" "QI") ! (set_attr "ppro_uops" "few")]) ! ! (define_insn "addhi3_carry" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r") ! (plus:HI (plus:HI (ltu:HI (reg:CC 17) (const_int 0)) ! (match_operand:HI 1 "nonimmediate_operand" "%0,0")) ! (match_operand:HI 2 "general_operand" "ri,rm"))) ! (clobber (reg:CC 17))] ! "ix86_binary_operator_ok (PLUS, HImode, operands)" ! "adc{w}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "pent_pair" "pu") ! (set_attr "mode" "HI") ! (set_attr "ppro_uops" "few")]) ! ! (define_insn "addsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) (match_operand:SI 1 "nonimmediate_operand" "%0,0")) *************** *** 6737,6742 **** --- 6763,6793 ---- [(set_attr "type" "alu") (set_attr "mode" "DI")]) + (define_insn "subqi3_carry" + [(set (match_operand:QI 0 "nonimmediate_operand" "=rm,r") + (minus:QI (match_operand:QI 1 "nonimmediate_operand" "0,0") + (plus:QI (ltu:QI (reg:CC 17) (const_int 0)) + (match_operand:QI 2 "general_operand" "ri,rm")))) + (clobber (reg:CC 17))] + "ix86_binary_operator_ok (MINUS, QImode, operands)" + "sbb{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "ppro_uops" "few") + (set_attr "mode" "QI")]) + + (define_insn "subhi3_carry" + [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r") + (minus:HI (match_operand:HI 1 "nonimmediate_operand" "0,0") + (plus:HI (ltu:HI (reg:CC 17) (const_int 0)) + (match_operand:HI 2 "general_operand" "ri,rm")))) + (clobber (reg:CC 17))] + "ix86_binary_operator_ok (MINUS, HImode, operands)" + "sbb{w}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "ppro_uops" "few") + (set_attr "mode" "HI")]) (define_insn "subsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") *** i386.c.old Thu Nov 21 23:10:28 2002 --- i386.c Fri Nov 22 01:19:02 2002 *************** ix86_expand_fp_movcc (operands) *** 9820,9825 **** --- 9890,9958 ---- return 1; } + /* Expand conditional increment or decrement using adb/sbb instructions. + The default case using setcc followed by the conditional move can be + done by generic code. */ + int + ix86_expand_int_addcc (operands) + rtx operands[]; + { + enum rtx_code code = GET_CODE (operands[1]); + rtx compare_op; + rtx val = const0_rtx; + + if (operands[3] != const1_rtx + && operands[3] != constm1_rtx) + return 0; + if (!ix86_expand_carry_flag_compare (code, ix86_compare_op0, + ix86_compare_op1, &compare_op)) + return 0; + if (GET_CODE (compare_op) != LTU) + val = constm1_rtx; + if ((GET_CODE (compare_op) == LTU) == (operands[1] == const1_rtx)) + { + switch (GET_MODE (operands[0])) + { + case QImode: + emit_insn (gen_subqi3_carry (operands[0], operands[2], val)); + break; + case HImode: + emit_insn (gen_subhi3_carry (operands[0], operands[2], val)); + break; + case SImode: + emit_insn (gen_subsi3_carry (operands[0], operands[2], val)); + break; + case DImode: + emit_insn (gen_subdi3_carry_rex64 (operands[0], operands[2], val)); + break; + default: + abort (); + } + } + else + { + switch (GET_MODE (operands[0])) + { + case QImode: + emit_insn (gen_addqi3_carry (operands[0], operands[2], val)); + break; + case HImode: + emit_insn (gen_addhi3_carry (operands[0], operands[2], val)); + break; + case SImode: + emit_insn (gen_addsi3_carry (operands[0], operands[2], val)); + break; + case DImode: + emit_insn (gen_adddi3_carry_rex64 (operands[0], operands[2], val)); + break; + default: + abort (); + } + } + return 1; /* DONE */ + } + + /* Split operands 0 and 1 into SImode parts. Similar to split_di, but works for floating pointer parameters and nonoffsetable memories. For pushes, it returns just stack offsets; the values will be saved *** i386-protos.h.old Fri Nov 22 01:06:09 2002 --- i386-protos.h Fri Nov 22 01:06:19 2002 *************** extern void ix86_expand_branch PARAMS (( *** 138,143 **** --- 138,144 ---- extern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx)); extern int ix86_expand_int_movcc PARAMS ((rtx[])); extern int ix86_expand_fp_movcc PARAMS ((rtx[])); + extern int ix86_expand_int_addcc PARAMS ((rtx[])); extern void ix86_expand_call PARAMS ((rtx, rtx, rtx, rtx, rtx, int)); extern void x86_initialize_trampoline PARAMS ((rtx, rtx, rtx)); extern rtx ix86_zero_extend_to_Pmode PARAMS ((rtx)); From gcc-patches-return-75187-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:53:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25901 invoked by alias); 7 Jan 2003 20:53:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25893 invoked from network); 7 Jan 2003 20:53:16 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 20:53:16 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07KmI125186; Tue, 7 Jan 2003 15:48:18 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kr4n31526; Tue, 7 Jan 2003 15:53:04 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kr3n02189; Tue, 7 Jan 2003 12:53:03 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07Kr3522575; Tue, 7 Jan 2003 12:53:03 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 12:53:03 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Conditional addition for i386 Message-ID: <20030107205303.GH12992@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> <20030107204216.GD10268@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107204216.GD10268@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 09:42:16PM +0100, Jan Hubicka wrote: > + /* Expand conditional increment or decrement using adb/sbb instructions. > + The default case using setcc followed by the conditional move can be > + done by generic code. */ > + int > + ix86_expand_int_addcc (operands) This can't be the whole patch, since you've got nothing to invoke this function. r~ From gcc-patches-return-75188-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:55:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29977 invoked by alias); 7 Jan 2003 20:55:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29970 invoked from network); 7 Jan 2003 20:55:06 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 7 Jan 2003 20:55:06 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07Ksnc03792; Tue, 7 Jan 2003 15:54:49 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07KseT121146; Tue, 7 Jan 2003 15:54:41 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id PAA31562; Tue, 7 Jan 2003 15:54:39 -0500 Message-Id: <200301072054.PAA31562@makai.watson.ibm.com> To: Richard Henderson , vmakarov@redhat.com, gcc-patches@gcc.gnu.org Subject: Re: [PATCH] can_issue_more vs USE and CLOBBER In-Reply-To: Message from Richard Henderson of "Tue, 07 Jan 2003 12:40:48 PST." <20030107204048.GF12992@redhat.com> Date: Tue, 07 Jan 2003 15:54:39 -0500 From: David Edelsohn >>>>> Richard Henderson writes: Richard> On Wed, Nov 27, 2002 at 02:54:23PM -0500, David Edelsohn wrote: >> * haifa-sched.c (schedule_block): Update can_issue_more only >> if not USE or CLOBBER. Richard> Ok. I have been mulling over my patch and decided that individual ports might want the flexibility to make decisions based on USE and CLOBBER. I think it probably is better to allow each individual port to skip those pseudo-insns if it defines the hook instead of pre-emptively stripping them. It means that each port needs to remember to include an equivalent test. Maybe I will add a note to the documentation of the hook. Thanks, David From gcc-patches-return-75189-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 20:55:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 30161 invoked by alias); 7 Jan 2003 20:55:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26319 invoked from network); 7 Jan 2003 20:53:51 -0000 Received: from unknown (HELO talisman.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 7 Jan 2003 20:53:51 -0000 Received: (from rsandifo@localhost) by talisman.cambridge.redhat.com (8.11.6/8.11.6) id h07KsLN27348; Tue, 7 Jan 2003 20:54:21 GMT X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: cgd@broadcom.com Cc: gcc-patches@gcc.gnu.org, echristo@redhat.com Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. References: From: Richard Sandiford Date: 07 Jan 2003 20:54:21 +0000 In-Reply-To: Message-ID: Lines: 38 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii cgd@broadcom.com writes: > At 07 Jan 2003 19:46:17 +0000, Richard Sandiford wrote: > > I agree that __mips isn't good for 32r2-aware code because it > > isn't descriptive enough. That's why setting __mips to 32 > > makes sense IMO. Any existing mips32 code that checks __mips > > should work OK for mips32r2 as well. > > So, then my mind goes to ask, why should any existing code that checks > _MIPS_ISA be different than code that checks __mips, for MIPS32 > vs. MIPS32R2. > > At least naively, I'd expect that if __mips had the same value for > MIPS32 and MIPS32R2, _MIPS_ISA would as well... On the one hand, yes, and I guess that goes back to the idea of having a separate revision macro. On the other hand, _MIPS_ISA has been set up as an enum while __mips has always been the numerical ISA level. Adding a new _MIPS_ISA value doesn't seem as bad as inventing a magic number for __mips. > From a programmer POV, mips32r2 is a superset of mips32... but then > mips32 was similarly a superset of mips2. 8-) Right. But looking at the terminology, "mips2" and "mips32" are obviously different numerical ISA levels. "mips32r2" and "mips32" both look to me like different versions of the same numerical ISA level. I don't think all __mips==32 targets have to have exactly the same ISA: they just need to be a superset of the original. Just like __mips==4 when compiling code for the vr5400 ISA. Having separate ISA level & revision macros (or relying on _MIPS_ISA if you prefer that) gives users just as much information as __mips=33 and seems to be more consistent with the naming convention. Richard From gcc-patches-return-75190-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:00:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32444 invoked by alias); 7 Jan 2003 21:00:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31198 invoked from network); 7 Jan 2003 20:57:49 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 7 Jan 2003 20:57:49 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id A246B4DE31; Tue, 7 Jan 2003 21:57:39 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Tue, 7 Jan 2003 21:57:39 +0100 Date: Tue, 7 Jan 2003 21:57:39 +0100 From: Jan Hubicka To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Conditional addition for i386 Message-ID: <20030107205739.GF10268@kam.mff.cuni.cz> References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> <20030107204216.GD10268@kam.mff.cuni.cz> <20030107205303.GH12992@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107205303.GH12992@redhat.com> User-Agent: Mutt/1.3.28i > On Tue, Jan 07, 2003 at 09:42:16PM +0100, Jan Hubicka wrote: > > + /* Expand conditional increment or decrement using adb/sbb instructions. > > + The default case using setcc followed by the conditional move can be > > + done by generic code. */ > > + int > > + ix86_expand_int_addcc (operands) > > This can't be the whole patch, since you've got nothing to > invoke this function. Hmm, there definitly was addcc expander calling the function. I guess i've killed it while I was splitting the patch into independent pieces. Should I send updated patch? Honza > > > r~ From gcc-patches-return-75191-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:00:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32508 invoked by alias); 7 Jan 2003 21:00:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32459 invoked from network); 7 Jan 2003 21:00:23 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:00:23 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07KtP125319; Tue, 7 Jan 2003 15:55:25 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07L0Bn31681; Tue, 7 Jan 2003 16:00:11 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07L0An02846; Tue, 7 Jan 2003 13:00:10 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07L0AX23580; Tue, 7 Jan 2003 13:00:10 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:00:10 -0800 From: Richard Henderson To: "Sanjiv Kumar Gupta, Noida" Cc: gcc-patches@gcc.gnu.org Subject: Re: avoiding multiple passes on RTL in init_alias_analysis Message-ID: <20030107210010.GI12992@redhat.com> Mail-Followup-To: Richard Henderson , "Sanjiv Kumar Gupta, Noida" , gcc-patches@gcc.gnu.org References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Thu, Nov 28, 2002 at 04:06:44PM +0530, Sanjiv Kumar Gupta, Noida wrote: > I would suggest to change the condition > if (new_reg_base_value && new_reg_base_value[regno]) > to > if (new_reg_base_value && new_reg_base_value[regno] > && REG_N_SETS (regno) == 1) Done. r~ From gcc-patches-return-75192-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:03:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3107 invoked by alias); 7 Jan 2003 21:03:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3076 invoked from network); 7 Jan 2003 21:03:39 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:03:39 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07Kwf125386; Tue, 7 Jan 2003 15:58:41 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07L3Rn31745; Tue, 7 Jan 2003 16:03:27 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07L3Qn03191; Tue, 7 Jan 2003 13:03:26 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07L3QC23623; Tue, 7 Jan 2003 13:03:26 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:03:26 -0800 From: Richard Henderson To: Andreas Schwab Cc: gcc-patches@gcc.gnu.org Subject: Re: gcc_AC_INITFINI_ARRAY Message-ID: <20030107210326.GJ12992@redhat.com> Mail-Followup-To: Richard Henderson , Andreas Schwab , gcc-patches@gcc.gnu.org References: <200212010212.gB12CNnC029636@whitebox.local> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200212010212.gB12CNnC029636@whitebox.local> User-Agent: Mutt/1.4i On Sun, Dec 01, 2002 at 03:12:23AM +0100, Andreas Schwab wrote: > * configure.in: Restore CFLAGS before gcc_AC_INITFINI_ARRAY. > Move --enable-initfini-array check ... > * aclocal.m4 (gcc_AC_INITFINI_ARRAY): ... here. Define > HAVE_INITFINI_ARRAY also when --enable-initfini-array is given. > Don't AC_SUBST gcc_cv_initfinit_array. Use AC_TRY_RUN. > * configure: Rebuild. Applied. r~ From gcc-patches-return-75193-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:05:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4084 invoked by alias); 7 Jan 2003 21:05:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4050 invoked from network); 7 Jan 2003 21:05:16 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:05:16 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07L0I125410; Tue, 7 Jan 2003 16:00:18 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07L54n31778; Tue, 7 Jan 2003 16:05:04 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07L53n03330; Tue, 7 Jan 2003 13:05:03 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07L53n23630; Tue, 7 Jan 2003 13:05:03 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:05:03 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: [3.4-BIB] i386 condtiional moves cleanup I Message-ID: <20030107210503.GK12992@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021201163708.GO31553@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021201163708.GO31553@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Sun, Dec 01, 2002 at 05:37:08PM +0100, Jan Hubicka wrote: > * i386.c (x86_expand_carry_flag_compare): Make static. > (x86_expand_cmove_constants): Break out from ... > (ix86_expand_movcc): ... here; cleanup how comparisons are generated. Ok. r~ From gcc-patches-return-75194-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:07:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5990 invoked by alias); 7 Jan 2003 21:07:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5972 invoked from network); 7 Jan 2003 21:07:22 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:07:22 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07L2O125507; Tue, 7 Jan 2003 16:02:24 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07L79n31862; Tue, 7 Jan 2003 16:07:10 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07L79n03611; Tue, 7 Jan 2003 13:07:09 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07L79s23637; Tue, 7 Jan 2003 13:07:09 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:07:09 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Conditional addition for i386 Message-ID: <20030107210709.GL12992@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> <20030107204216.GD10268@kam.mff.cuni.cz> <20030107205303.GH12992@redhat.com> <20030107205739.GF10268@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107205739.GF10268@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 09:57:39PM +0100, Jan Hubicka wrote: > Hmm, there definitly was addcc expander calling the function. I guess > i've killed it while I was splitting the patch into independent pieces. > Should I send updated patch? Please. r~ From gcc-patches-return-75195-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:09:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7975 invoked by alias); 7 Jan 2003 21:09:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7960 invoked from network); 7 Jan 2003 21:09:37 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:09:37 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07L4b127853; Tue, 7 Jan 2003 16:04:37 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07L9Nn01159; Tue, 7 Jan 2003 16:09:23 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07L9Mn06502; Tue, 7 Jan 2003 13:09:22 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07L9Mf23644; Tue, 7 Jan 2003 13:09:22 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:09:22 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org, aj@suse.de Subject: Re: Fix latent bug in cprop Message-ID: <20030107210922.GM12992@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org, aj@suse.de References: <20021202212216.GK2782@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021202212216.GK2782@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Mon, Dec 02, 2002 at 10:22:16PM +0100, Jan Hubicka wrote: > * cselib.c (cselib_current_insn_in_libcall): New static variable. > (new_elt_loc_list, cselib_process_insn, cselib_init): Keep track on whether > we are inside libcall. > * cselib.h (elt_loc_list): Add in_libcall. > * gcse.c (do_local_cprop): Do not copy propagate using insns > in libcalls. Ok. r~ From gcc-patches-return-75196-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:13:00 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10463 invoked by alias); 7 Jan 2003 21:12:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10449 invoked from network); 7 Jan 2003 21:12:59 -0000 Received: from unknown (HELO smtp.comcast.net) (24.153.64.2) by 209.249.29.67 with SMTP; 7 Jan 2003 21:12:59 -0000 Received: from kelley (pcp02688653pcs.roylok01.mi.comcast.net [68.61.96.119]) by mtaout06.icomcast.net (iPlanet Messaging Server 5.2 HotFix 1.07 (built Nov 25 2002)) with ESMTP id <0H8D00ETF45HWZ@mtaout06.icomcast.net> for gcc-patches@gcc.gnu.org; Tue, 07 Jan 2003 16:10:34 -0500 (EST) Date: Tue, 07 Jan 2003 16:10:49 -0500 From: Kelley Cook Subject: [x86] Change "-mcpu" to "-mtune" To: "gcc-patches@gcc.gnu.org" Message-id: <0H8D00ETM45JWZ@mtaout06.icomcast.net> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 7BIT Priority: Normal As discussed on the gcc list numerous times, this replaces "-mcpu" with "-mtune" in the x86 backend. Using "-mcpu" now gives the warning: `-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead. while internally replacing the "mcpu" with "mtune". No regressions after the obvious testsuite modifications were done. Bootstrapped "--enable-languages=c" on i686-pc-cygwin. With or without this patch, G77 and libcstdv3 are not currently working under cygwin. One small hunk was manually rmoved from the diff, which corresponded to the unreviewed patch at http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01632.html Kelley Cook 2003-01-07 Kelley Cook * config/i386/i386.c: Replace "mcpu" with "mtune". * config/i386/i386.h (TARGET_OPTIONS): Likewise. (CC1_CPU_SPEC): Likewise. New warning for "-mcpu". * doc/invoke.texi (i386 and x86-64 Options): Replace "mcpu" with "mtune". Note that "mcpu" is a deprecated synonym for "mtune". 2003-01-07 Kelley Cook * g++.old-deja/g++.other/store-expr1.C: Replace "mcpu" with "mtune". * g++.old-deja/g++.other/store-expr2.C: Likewise. * gcc.c-torture/execute/20010129-1.x: Likewise. * gcc.dg/20011107-1.c: Likewise. * gcc.dg/20020108-1.c: Likewise. * gcc.dg/20020122-3.c: Likewise. * gcc.dg/20020206-1.c: Likewise. * gcc.dg/20020310-1.c: Likewise. * gcc.dg/20020426-2.c: Likewise. * gcc.dg/20020517-1.c: Likewise. * gcc.dg/991230-1.c: Likewise. * gcc.dg/i386-unroll-1.c: Likewise. * gcc.misc-tests/i386-prefetch.exp: Likewise. Index: config/i386/i386.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/i386/i386.c,v retrieving revision 1.502 diff -c -p -r1.502 i386.c *** config/i386/i386.c 28 Dec 2002 13:57:58 -0000 1.502 --- config/i386/i386.c 7 Jan 2003 20:36:23 -0000 *************** enum processor_type ix86_cpu; *** 739,745 **** enum processor_type ix86_arch; /* Strings to hold which cpu and instruction set architecture to use. */ ! const char *ix86_cpu_string; /* for -mcpu= */ const char *ix86_arch_string; /* for -march= */ const char *ix86_fpmath_string; /* for -mfpmath= */ --- 739,745 ---- enum processor_type ix86_arch; /* Strings to hold which cpu and instruction set architecture to use. */ ! const char *ix86_cpu_string; /* for -mtune= */ const char *ix86_arch_string; /* for -march= */ const char *ix86_fpmath_string; /* for -mfpmath= */ *************** override_options () *** 1199,1205 **** if (processor_alias_table[i].flags & PTA_PREFETCH_SSE) x86_prefetch_sse = true; if (i == pta_size) ! error ("bad value (%s) for -mcpu= switch", ix86_cpu_string); if (optimize_size) ix86_cost = &size_cost; --- 1199,1205 ---- if (processor_alias_table[i].flags & PTA_PREFETCH_SSE) x86_prefetch_sse = true; if (i == pta_size) ! error ("bad value (%s) for -mtune= switch", ix86_cpu_string); if (optimize_size) ix86_cost = &size_cost; Index: config/i386/i386.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/i386/i386.h,v retrieving revision 1.313 diff -c -p -r1.313 i386.h *** config/i386/i386.h 26 Dec 2002 18:45:03 -0000 1.313 --- config/i386/i386.h 7 Jan 2003 20:36:43 -0000 *************** extern int x86_prefetch_sse; *** 430,436 **** option if the fixed part matches. The actual option name is made by appending `-m' to the specified name. */ #define TARGET_OPTIONS \ ! { { "cpu=", &ix86_cpu_string, \ N_("Schedule code for given CPU")}, \ { "fpmath=", &ix86_fpmath_string, \ N_("Generate floating point mathematics using given instruction set")},\ --- 430,436 ---- option if the fixed part matches. The actual option name is made by appending `-m' to the specified name. */ #define TARGET_OPTIONS \ ! { { "tune=", &ix86_cpu_string, \ N_("Schedule code for given CPU")}, \ { "fpmath=", &ix86_fpmath_string, \ N_("Generate floating point mathematics using given instruction set")},\ *************** extern int x86_prefetch_sse; *** 485,499 **** #ifndef CC1_CPU_SPEC #define CC1_CPU_SPEC "\ ! %{!mcpu*: \ ! %{m386:-mcpu=i386 \ ! %n`-m386' is deprecated. Use `-march=i386' or `-mcpu=i386' instead.\n} \ ! %{m486:-mcpu=i486 \ ! %n`-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.\n} \ ! %{mpentium:-mcpu=pentium \ ! %n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.\n} \ ! %{mpentiumpro:-mcpu=pentiumpro \ ! %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.\n}} \ %{mintel-syntax:-masm=intel \ %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \ %{mno-intel-syntax:-masm=att \ --- 485,502 ---- #ifndef CC1_CPU_SPEC #define CC1_CPU_SPEC "\ ! %{!mtune*: \ ! %{m386:mtune=i386 \ ! %n`-m386' is deprecated. Use `-march=i386' or `-mtune=i386' instead.\n} \ ! %{m486:-mtune=i486 \ ! %n`-m486' is deprecated. Use `-march=i486' or `-mtune=i486' instead.\n} \ ! %{mpentium:-mtune=pentium \ ! %n`-mpentium' is deprecated. Use `-march=pentium' or `-mtune=pentium' instead.\n} \ ! %{mpentiumpro:-mtune=pentiumpro \ ! %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mtune=pentiumpro' instead.\n} \ ! %{mcpu=*:-mtune=%* \ ! %n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.\n}} \ ! % --- 2,8 ---- was not sign-extended for QImode. */ /* { dg-do run } */ /* { dg-options "-O2" } */ ! /* { dg-options "-O2 -mtune=i686" { target i?86-*-* } } */ #include Index: testsuite/gcc.dg/991230-1.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/testsuite/gcc.dg/991230-1.c,v retrieving revision 1.2 diff -c -p -r1.2 991230-1.c *** testsuite/gcc.dg/991230-1.c 23 May 2000 19:30:44 -0000 1.2 --- testsuite/gcc.dg/991230-1.c 7 Jan 2003 20:38:45 -0000 *************** *** 1,5 **** /* { dg-do run { target i?86-*-* } } */ ! /* { dg-options "-O -ffast-math -mcpu=i486" } */ /* Test that floating point greater-than tests are compiled correctly with -ffast-math. */ --- 1,5 ---- /* { dg-do run { target i?86-*-* } } */ ! /* { dg-options "-O -ffast-math -mtune=i486" } */ /* Test that floating point greater-than tests are compiled correctly with -ffast-math. */ Index: testsuite/gcc.dg/i386-unroll-1.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/testsuite/gcc.dg/i386-unroll-1.c,v retrieving revision 1.1 diff -c -p -r1.1 i386-unroll-1.c *** testsuite/gcc.dg/i386-unroll-1.c 21 Nov 2002 22:08:15 -0000 1.1 --- testsuite/gcc.dg/i386-unroll-1.c 7 Jan 2003 20:38:46 -0000 *************** *** 1,6 **** /* PR optimization/8599 */ /* { dg-do run { target i?86-*-* } } */ ! /* { dg-options "-mcpu=k6 -O2 -funroll-loops" } */ extern void exit (int); --- 1,6 ---- /* PR optimization/8599 */ /* { dg-do run { target i?86-*-* } } */ ! /* { dg-options "-mtune=k6 -O2 -funroll-loops" } */ extern void exit (int); Index: testsuite/gcc.misc-tests/i386-prefetch.exp =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp,v retrieving revision 1.2 diff -c -p -r1.2 i386-prefetch.exp *** testsuite/gcc.misc-tests/i386-prefetch.exp 17 Jan 2002 22:37:04 -0000 1.2 --- testsuite/gcc.misc-tests/i386-prefetch.exp 7 Jan 2003 20:38:46 -0000 *************** *** 24,37 **** # Do not generate prefetch instructions for the following options. set PREFETCH_NONE [list \ ! { -mcpu=i386 } \ ! { -mcpu=i486 } \ ! { -mcpu=i586 } \ ! { -mcpu=i686 } \ ! { -mcpu=pentium2 } \ ! { -mcpu=k6 } \ ! { -mcpu=k6-2 } \ ! { -mcpu=k6-3 } \ { -march=i386 } \ { -march=i486 } \ { -march=i586 } \ --- 24,37 ---- # Do not generate prefetch instructions for the following options. set PREFETCH_NONE [list \ ! { -mtune=i386 } \ ! { -mtune=i486 } \ ! { -mtune=i586 } \ ! { -mtune=i686 } \ ! { -mtune=pentium2 } \ ! { -mtune=k6 } \ ! { -mtune=k6-2 } \ ! { -mtune=k6-3 } \ { -march=i386 } \ { -march=i486 } \ { -march=i586 } \ *************** set PREFETCH_NONE [list \ *** 40,53 **** { -march=k6 } ] # For options in PREFETCH_SSE, generate SSE prefetch instructions for ! # __builtin_prefetch. This includes -mcpu for targets that treat prefetch # instructions as nops. set PREFETCH_SSE [list \ ! { -mcpu=pentium3 } \ ! { -mcpu=pentium4 } \ ! { -mcpu=athlon } \ ! { -mcpu=athlon-4 } \ { -march=pentium3 } \ { -march=pentium4 } ] --- 40,53 ---- { -march=k6 } ] # For options in PREFETCH_SSE, generate SSE prefetch instructions for ! # __builtin_prefetch. This includes -mtune for targets that treat prefetch # instructions as nops. set PREFETCH_SSE [list \ ! { -mtune=pentium3 } \ ! { -mtune=pentium4 } \ ! { -mtune=athlon } \ ! { -mtune=athlon-4 } \ { -march=pentium3 } \ { -march=pentium4 } ] From gcc-patches-return-75197-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:23:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16098 invoked by alias); 7 Jan 2003 21:23:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16084 invoked from network); 7 Jan 2003 21:23:07 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 7 Jan 2003 21:23:07 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07LMtc13502 for ; Tue, 7 Jan 2003 16:22:55 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h07LMsT319692 for ; Tue, 7 Jan 2003 16:22:54 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id QAA29998 for ; Tue, 7 Jan 2003 16:22:54 -0500 Message-Id: <200301072122.QAA29998@makai.watson.ibm.com> To: gcc-patches@gcc.gnu.org Subject: [PATCH] TARGET_SCHED_VARIABLE_ISSUE clarification Date: Tue, 07 Jan 2003 16:22:54 -0500 From: David Edelsohn * doc/tm.texi (TARGET_SCHED_VARIABLE_ISSUE): CLOBBER and USE do not normally affect to issue rate. Index: tm.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v retrieving revision 1.186 diff -c -p -r1.186 tm.texi *** tm.texi 1 Jan 2003 12:27:02 -0000 1.186 --- tm.texi 7 Jan 2003 21:18:03 -0000 *************** to return the value of the macro @code{M *** 5523,5535 **** @deftypefn {Target Hook} int TARGET_SCHED_VARIABLE_ISSUE (FILE *@var{file}, int @var{verbose}, rtx @var{insn}, int @var{more}) This hook is executed by the scheduler after it has scheduled an insn from the ready list. It should return the number of insns which can ! still be issued in the current cycle. Normally this is ! @samp{@w{@var{more} - 1}}. You should define this hook if some insns ! take more machine resources than others, so that fewer insns can follow ! them in the same cycle. @var{file} is either a null pointer, or a stdio ! stream to write any debug output to. @var{verbose} is the verbose level ! provided by @option{-fsched-verbose-@var{n}}. @var{insn} is the ! instruction that was scheduled. @end deftypefn @deftypefn {Target Hook} int TARGET_SCHED_ADJUST_COST (rtx @var{insn}, rtx @var{link}, rtx @var{dep_insn}, int @var{cost}) --- 5523,5537 ---- @deftypefn {Target Hook} int TARGET_SCHED_VARIABLE_ISSUE (FILE *@var{file}, int @var{verbose}, rtx @var{insn}, int @var{more}) This hook is executed by the scheduler after it has scheduled an insn from the ready list. It should return the number of insns which can ! still be issued in the current cycle. The default is ! @samp{@w{@var{more} - 1}} for insns other than @code{CLOBBER} and ! @code{USE}, which normally are not counted against the issue rate. ! You should define this hook if some insns take more machine resources ! than others, so that fewer insns can follow them in the same cycle. ! @var{file} is either a null pointer, or a stdio stream to write any ! debug output to. @var{verbose} is the verbose level provided by ! @option{-fsched-verbose-@var{n}}. @var{insn} is the instruction that ! was scheduled. @end deftypefn @deftypefn {Target Hook} int TARGET_SCHED_ADJUST_COST (rtx @var{insn}, rtx @var{link}, rtx @var{dep_insn}, int @var{cost}) From gcc-patches-return-75198-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:23:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16277 invoked by alias); 7 Jan 2003 21:23:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14362 invoked from network); 7 Jan 2003 21:20:44 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 7 Jan 2003 21:20:44 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id 247574DE31; Tue, 7 Jan 2003 22:20:34 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Tue, 7 Jan 2003 22:20:34 +0100 Date: Tue, 7 Jan 2003 22:20:34 +0100 From: Jan Hubicka To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Conditional addition for i386 Message-ID: <20030107212034.GH10268@kam.mff.cuni.cz> References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> <20030107204216.GD10268@kam.mff.cuni.cz> <20030107205303.GH12992@redhat.com> <20030107205739.GF10268@kam.mff.cuni.cz> <20030107210709.GL12992@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107210709.GL12992@redhat.com> User-Agent: Mutt/1.3.28i > On Tue, Jan 07, 2003 at 09:57:39PM +0100, Jan Hubicka wrote: > > Hmm, there definitly was addcc expander calling the function. I guess > > i've killed it while I was splitting the patch into independent pieces. > > Should I send updated patch? > > Please. OK, bootstrap in progress. OK now? :) Works in the testcase. /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-O2 -march=athlon" } */ /* { dg-final { scan-assembler "sbb" } } */ /* Conditional increment is best done using sbb $-1, val. */ int t[]={0,0,0,0,1,1,1,1,1,1}; q() { int sum=0; int i; for (i=0;i<10;i++) if (t[i]) sum++; if (sum != 6) abort (); } main() { int i; for (i=0;i<10000000;i++) q(); } Honza Fri Nov 22 01:36:03 CET 2002 Jan Hubicka * i386.md (adddi3_carry_rex64, subdi3_carry_rex64): Name pattern. (addhi3_carry, addqi3_carry, subhi3_carry, subqi3_carry): New patterns. (add??cc): New expanders. * i386.c (expand_int_addcc): New function. * i386-protos.h (expand_int_addcc): Declare. Index: i386-protos.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386-protos.h,v retrieving revision 1.88 diff -c -3 -p -r1.88 i386-protos.h *** i386-protos.h 19 Dec 2002 22:00:32 -0000 1.88 --- i386-protos.h 7 Jan 2003 21:18:21 -0000 *************** extern void ix86_expand_branch PARAMS (( *** 141,146 **** --- 141,147 ---- extern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx)); extern int ix86_expand_int_movcc PARAMS ((rtx[])); extern int ix86_expand_fp_movcc PARAMS ((rtx[])); + extern int ix86_expand_int_addcc PARAMS ((rtx[])); extern void ix86_expand_call PARAMS ((rtx, rtx, rtx, rtx, rtx, int)); extern void x86_initialize_trampoline PARAMS ((rtx, rtx, rtx)); extern rtx ix86_zero_extend_to_Pmode PARAMS ((rtx)); Index: i386.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v retrieving revision 1.504 diff -c -3 -p -r1.504 i386.c *** i386.c 7 Jan 2003 21:09:20 -0000 1.504 --- i386.c 7 Jan 2003 21:18:28 -0000 *************** ix86_expand_fp_movcc (operands) *** 9981,9986 **** --- 9981,10049 ---- return 1; } + /* Expand conditional increment or decrement using adb/sbb instructions. + The default case using setcc followed by the conditional move can be + done by generic code. */ + int + ix86_expand_int_addcc (operands) + rtx operands[]; + { + enum rtx_code code = GET_CODE (operands[1]); + rtx compare_op; + rtx val = const0_rtx; + + if (operands[3] != const1_rtx + && operands[3] != constm1_rtx) + return 0; + if (!ix86_expand_carry_flag_compare (code, ix86_compare_op0, + ix86_compare_op1, &compare_op)) + return 0; + if (GET_CODE (compare_op) != LTU) + val = constm1_rtx; + if ((GET_CODE (compare_op) == LTU) == (operands[1] == const1_rtx)) + { + switch (GET_MODE (operands[0])) + { + case QImode: + emit_insn (gen_subqi3_carry (operands[0], operands[2], val)); + break; + case HImode: + emit_insn (gen_subhi3_carry (operands[0], operands[2], val)); + break; + case SImode: + emit_insn (gen_subsi3_carry (operands[0], operands[2], val)); + break; + case DImode: + emit_insn (gen_subdi3_carry_rex64 (operands[0], operands[2], val)); + break; + default: + abort (); + } + } + else + { + switch (GET_MODE (operands[0])) + { + case QImode: + emit_insn (gen_addqi3_carry (operands[0], operands[2], val)); + break; + case HImode: + emit_insn (gen_addhi3_carry (operands[0], operands[2], val)); + break; + case SImode: + emit_insn (gen_addsi3_carry (operands[0], operands[2], val)); + break; + case DImode: + emit_insn (gen_adddi3_carry_rex64 (operands[0], operands[2], val)); + break; + default: + abort (); + } + } + return 1; /* DONE */ + } + + /* Split operands 0 and 1 into SImode parts. Similar to split_di, but works for floating pointer parameters and nonoffsetable memories. For pushes, it returns just stack offsets; the values will be saved Index: i386.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.md,v retrieving revision 1.408 diff -c -3 -p -r1.408 i386.md *** i386.md 26 Dec 2002 18:45:03 -0000 1.408 --- i386.md 7 Jan 2003 21:18:38 -0000 *************** *** 4950,4956 **** split_di (operands+1, 1, operands+1, operands+4); split_di (operands+2, 1, operands+2, operands+5);") ! (define_insn "*adddi3_carry_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") (plus:DI (plus:DI (ltu:DI (reg:CC 17) (const_int 0)) (match_operand:DI 1 "nonimmediate_operand" "%0,0")) --- 4950,4956 ---- split_di (operands+1, 1, operands+1, operands+4); split_di (operands+2, 1, operands+2, operands+5);") ! (define_insn "adddi3_carry_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") (plus:DI (plus:DI (ltu:DI (reg:CC 17) (const_int 0)) (match_operand:DI 1 "nonimmediate_operand" "%0,0")) *************** *** 4975,4981 **** [(set_attr "type" "alu") (set_attr "mode" "DI")]) ! (define_insn "*addsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) (match_operand:SI 1 "nonimmediate_operand" "%0,0")) --- 4975,5007 ---- [(set_attr "type" "alu") (set_attr "mode" "DI")]) ! (define_insn "addqi3_carry" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=rm,r") ! (plus:QI (plus:QI (ltu:QI (reg:CC 17) (const_int 0)) ! (match_operand:QI 1 "nonimmediate_operand" "%0,0")) ! (match_operand:QI 2 "general_operand" "ri,rm"))) ! (clobber (reg:CC 17))] ! "ix86_binary_operator_ok (PLUS, QImode, operands)" ! "adc{b}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "pent_pair" "pu") ! (set_attr "mode" "QI") ! (set_attr "ppro_uops" "few")]) ! ! (define_insn "addhi3_carry" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r") ! (plus:HI (plus:HI (ltu:HI (reg:CC 17) (const_int 0)) ! (match_operand:HI 1 "nonimmediate_operand" "%0,0")) ! (match_operand:HI 2 "general_operand" "ri,rm"))) ! (clobber (reg:CC 17))] ! "ix86_binary_operator_ok (PLUS, HImode, operands)" ! "adc{w}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "pent_pair" "pu") ! (set_attr "mode" "HI") ! (set_attr "ppro_uops" "few")]) ! ! (define_insn "addsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) (match_operand:SI 1 "nonimmediate_operand" "%0,0")) *************** *** 6652,6657 **** --- 6678,6708 ---- [(set_attr "type" "alu") (set_attr "mode" "DI")]) + (define_insn "subqi3_carry" + [(set (match_operand:QI 0 "nonimmediate_operand" "=rm,r") + (minus:QI (match_operand:QI 1 "nonimmediate_operand" "0,0") + (plus:QI (ltu:QI (reg:CC 17) (const_int 0)) + (match_operand:QI 2 "general_operand" "ri,rm")))) + (clobber (reg:CC 17))] + "ix86_binary_operator_ok (MINUS, QImode, operands)" + "sbb{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "ppro_uops" "few") + (set_attr "mode" "QI")]) + + (define_insn "subhi3_carry" + [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r") + (minus:HI (match_operand:HI 1 "nonimmediate_operand" "0,0") + (plus:HI (ltu:HI (reg:CC 17) (const_int 0)) + (match_operand:HI 2 "general_operand" "ri,rm")))) + (clobber (reg:CC 17))] + "ix86_binary_operator_ok (MINUS, HImode, operands)" + "sbb{w}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "ppro_uops" "few") + (set_attr "mode" "HI")]) (define_insn "subsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") *************** *** 16457,16462 **** --- 16508,16546 ---- (match_dup 2)) (match_dup 1) (match_dup 2)))]) + + ;; Conditional addition patterns + (define_expand "addqicc" + [(match_operand:QI 0 "register_operand" "") + (match_operand 1 "comparison_operator" "") + (match_operand:QI 2 "register_operand" "") + (match_operand:QI 3 "const_int_operand" "")] + "" + "if (!ix86_expand_int_addcc (operands)) FAIL; DONE;") + + (define_expand "addhicc" + [(match_operand:HI 0 "register_operand" "") + (match_operand 1 "comparison_operator" "") + (match_operand:HI 2 "register_operand" "") + (match_operand:HI 3 "const_int_operand" "")] + "" + "if (!ix86_expand_int_addcc (operands)) FAIL; DONE;") + + (define_expand "addsicc" + [(match_operand:SI 0 "register_operand" "") + (match_operand 1 "comparison_operator" "") + (match_operand:SI 2 "register_operand" "") + (match_operand:SI 3 "const_int_operand" "")] + "" + "if (!ix86_expand_int_addcc (operands)) FAIL; DONE;") + + (define_expand "adddicc" + [(match_operand:DI 0 "register_operand" "") + (match_operand 1 "comparison_operator" "") + (match_operand:DI 2 "register_operand" "") + (match_operand:DI 3 "const_int_operand" "")] + "TARGET_64BIT" + "if (!ix86_expand_int_addcc (operands)) FAIL; DONE;") ;; We can't represent the LT test directly. Do this by swapping the operands. From gcc-patches-return-75199-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:25:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18051 invoked by alias); 7 Jan 2003 21:25:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15746 invoked from network); 7 Jan 2003 21:22:47 -0000 Received: from unknown (HELO insatnet.nu) (195.24.168.149) by 209.249.29.67 with SMTP; 7 Jan 2003 21:22:47 -0000 Received: from insatnet.nu [213.134.100.126] by insatnet.nu with ESMTP (SMTPD32-7.13) id A51937500E0; Tue, 07 Jan 2003 22:22:33 +0100 Date: Tue, 7 Jan 2003 22:22:33 +0100 From: Michael Johnson To: binutils@sources.redhat.com Cc: Alexandre Oliva , gcc-patches@gcc.gnu.org Subject: HELP me unsubscribe Message-ID: <20030107212233.GA764@insatnet.nu> Mail-Followup-To: binutils@sources.redhat.com, Alexandre Oliva , gcc-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i Please help me to unsubscribe, *anyone* br /michael From gcc-patches-return-75200-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:39:06 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28047 invoked by alias); 7 Jan 2003 21:39:05 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28037 invoked from network); 7 Jan 2003 21:39:04 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:39:04 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07LY5100354; Tue, 7 Jan 2003 16:34:05 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lckn05232; Tue, 7 Jan 2003 16:38:46 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lcjn13415; Tue, 7 Jan 2003 13:38:45 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07Lcje23670; Tue, 7 Jan 2003 13:38:45 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:38:45 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Fix ifcvt on memory operands Message-ID: <20030107213845.GN12992@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021204193501.GE5173@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021204193501.GE5173@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Wed, Dec 04, 2002 at 08:35:01PM +0100, Jan Hubicka wrote: > + if (!nonoverlapping_memrefs_p (x, (rtx)data)) I don't think you should be using nonoverlapping_memrefs_p directly. Use anti_dependence (x, data) || output_dependence (x, data) Or better yet change write_depenence_p to let you do both at once. > + memory_modified = 1; = true; > + rtx insn; > + if (start == end) > + return 0; Whitespace before if. > case MEM: > ! if (RTX_UNCHANGING_P (x)) > ! return 0; > ! if (modified_between_p (XEXP (x, 0), start, end)) > return 1; > + for (insn = NEXT_INSN (start); insn != end; insn = NEXT_INSN (insn)) > + if (memory_modified_in_insn_p (x, insn)) > + return 1; > + return 0; Why are you checking the address? You'll need to change the function comment that says that alias info isn't used. ;-) r~ From gcc-patches-return-75201-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:52:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4092 invoked by alias); 7 Jan 2003 21:52:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4084 invoked from network); 7 Jan 2003 21:52:03 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:52:03 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07Ll5101918; Tue, 7 Jan 2003 16:47:05 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lpon06580; Tue, 7 Jan 2003 16:51:51 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lpon15912; Tue, 7 Jan 2003 13:51:50 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07Lpnj23688; Tue, 7 Jan 2003 13:51:49 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:51:49 -0800 From: Richard Henderson To: Douglas B Rupp Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH]: Add attribute support for MS bitfields [3rd try] Message-ID: <20030107215149.GO12992@redhat.com> Mail-Followup-To: Richard Henderson , Douglas B Rupp , gcc-patches@gcc.gnu.org References: <015c01c2a936$d43d4af0$0500a8c0@Jinx> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <015c01c2a936$d43d4af0$0500a8c0@Jinx> User-Agent: Mutt/1.4i On Sat, Dec 21, 2002 at 01:20:35PM -0800, Douglas B Rupp wrote: > * config/i386/i386.c (ix86_attribute_table): Add new attributes > ms_struct and gcc_struct. > (ix86_handle_struct_attribute): New function. > (ix86_ms_bitfield_layout_p): Update to take new attributes > into account. > * doc/extend.texi: Document new attributes. > * testsuite/gcc.dg/bf-ms-attrib.c: New test. Ok. r~ From gcc-patches-return-75202-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:55:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9568 invoked by alias); 7 Jan 2003 21:55:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9517 invoked from network); 7 Jan 2003 21:55:08 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:55:08 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lo7102278; Tue, 7 Jan 2003 16:50:07 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lsqn06859; Tue, 7 Jan 2003 16:54:52 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Lsqn16532; Tue, 7 Jan 2003 13:54:52 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07Lsqu23696; Tue, 7 Jan 2003 13:54:52 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:54:52 -0800 From: Richard Henderson To: "Kaveh R. Ghazi" Cc: aoliva@redhat.com, gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) Message-ID: <20030107215452.GP12992@redhat.com> Mail-Followup-To: Richard Henderson , "Kaveh R. Ghazi" , aoliva@redhat.com, gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <200212241907.OAA04148@caip.rutgers.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200212241907.OAA04148@caip.rutgers.edu> User-Agent: Mutt/1.4i On Tue, Dec 24, 2002 at 02:07:19PM -0500, Kaveh R. Ghazi wrote: > > test_denorm_min(); > > I think the value tested here is mistakenly indistinguishable from > zero. Correct. The double-double format doesn't support denormals in an LIA-1 conformant way. r~ From gcc-patches-return-75203-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:55:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10024 invoked by alias); 7 Jan 2003 21:55:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9998 invoked from network); 7 Jan 2003 21:55:31 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 21:55:31 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07LoV102318; Tue, 7 Jan 2003 16:50:31 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07LtFn06913; Tue, 7 Jan 2003 16:55:15 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07LtFn16614; Tue, 7 Jan 2003 13:55:15 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07LtF223703; Tue, 7 Jan 2003 13:55:15 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 13:55:15 -0800 From: Richard Henderson To: Alexandre Oliva Cc: "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) Message-ID: <20030107215515.GQ12992@redhat.com> Mail-Followup-To: Richard Henderson , Alexandre Oliva , "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Mon, Dec 23, 2002 at 02:12:55PM -0200, Alexandre Oliva wrote: > > ? gcc/config/mips/_tilib.c Why don't these routines come from libgcc2.c? r~ From gcc-patches-return-75204-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 21:58:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12190 invoked by alias); 7 Jan 2003 21:58:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10122 invoked from network); 7 Jan 2003 21:55:34 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 7 Jan 2003 21:55:34 -0000 Received: from camelot.ms.mff.cuni.cz (kampanus.ms.mff.cuni.cz [195.113.18.107]) by nikam.ms.mff.cuni.cz (Postfix) with SMTP id 200A74DE31; Tue, 7 Jan 2003 22:55:24 +0100 (CET) Received: by camelot.ms.mff.cuni.cz (sSMTP sendmail emulation); Tue, 7 Jan 2003 22:55:24 +0100 Date: Tue, 7 Jan 2003 22:55:24 +0100 From: Jan Hubicka To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Fix ifcvt on memory operands Message-ID: <20030107215524.GI10268@kam.mff.cuni.cz> References: <20021204193501.GE5173@kam.mff.cuni.cz> <20030107213845.GN12992@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107213845.GN12992@redhat.com> User-Agent: Mutt/1.3.28i > On Wed, Dec 04, 2002 at 08:35:01PM +0100, Jan Hubicka wrote: > > + if (!nonoverlapping_memrefs_p (x, (rtx)data)) > > I don't think you should be using nonoverlapping_memrefs_p > directly. Use > > anti_dependence (x, data) || output_dependence (x, data) > > Or better yet change write_depenence_p to let you do both > at once. > > > + memory_modified = 1; > > = true; > > > + rtx insn; > > + if (start == end) > > + return 0; > > Whitespace before if. > > > case MEM: > > ! if (RTX_UNCHANGING_P (x)) > > ! return 0; > > ! if (modified_between_p (XEXP (x, 0), start, end)) > > return 1; > > + for (insn = NEXT_INSN (start); insn != end; insn = NEXT_INSN (insn)) > > + if (memory_modified_in_insn_p (x, insn)) > > + return 1; > > + return 0; > > Why are you checking the address? Because when the address change, the value of expression does as well. > > You'll need to change the function comment that says that > alias info isn't used. ;-) /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-O2 -march=athlon" } */ /* { dg-final { scan-assembler "cmov" } } */ /* Verify that if conversion happends for memory references. */ int ARCHnodes; int *nodekind; float *nodekindf; t() { int i; /* Redefine nodekind to be 1 for all surface nodes */ for (i = 0; i < ARCHnodes; i++) { nodekind[i] = (int) nodekindf[i]; if (nodekind[i] == 3) nodekind[i] = 1; } } Tue Jan 7 22:54:09 CET 2003 Jan Hubicka * alias.c (memory_modified_1): New static function. (memory_modified): New static varaible. (memory_modified_in_insn_p): New global function. * rtl.h (memory_modified_in_insn_p): Declare. * rtlanal.c (modified_between_p, modified_in_p): Be smart about memory references. Index: alias.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/alias.c,v retrieving revision 1.183 diff -c -3 -p -r1.183 alias.c *** alias.c 24 Dec 2002 15:49:24 -0000 1.183 --- alias.c 7 Jan 2003 21:51:12 -0000 *************** static int nonlocal_referenced_p_1 *** 118,123 **** --- 118,124 ---- static int nonlocal_referenced_p PARAMS ((rtx)); static int nonlocal_set_p_1 PARAMS ((rtx *, void *)); static int nonlocal_set_p PARAMS ((rtx)); + static void memory_modified_1 PARAMS ((rtx, rtx, void *)); /* Set up all info needed to perform alias analysis on memory references. */ *************** init_alias_once () *** 2699,2704 **** --- 2700,2734 ---- #endif alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0); + } + + /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed + to be memory reference. */ + static bool memory_modified; + static void + memory_modified_1 (x, pat, data) + rtx x, pat ATTRIBUTE_UNUSED; + void *data; + { + if (GET_CODE (x) == MEM) + { + if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data)) + memory_modified = true; + } + } + + + /* Return true when INSN possibly modify memory contents of MEM + (ie address can be modified). */ + bool + memory_modified_in_insn_p (mem, insn) + rtx mem, insn; + { + if (!INSN_P (insn)) + return false; + memory_modified = false; + note_stores (PATTERN (insn), memory_modified_1, mem); + return memory_modified; } /* Initialize the aliasing machinery. Initialize the REG_KNOWN_VALUE Index: rtlanal.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/rtlanal.c,v retrieving revision 1.142 diff -c -3 -p -r1.142 rtlanal.c *** rtlanal.c 24 Dec 2002 08:30:30 -0000 1.142 --- rtlanal.c 7 Jan 2003 21:51:23 -0000 *************** regs_set_between_p (x, start, end) *** 1037,1043 **** /* Similar to reg_set_between_p, but check all registers in X. Return 0 only if none of them are modified between START and END. Return 1 if ! X contains a MEM; this routine does not perform any memory aliasing. */ int modified_between_p (x, start, end) --- 1037,1043 ---- /* Similar to reg_set_between_p, but check all registers in X. Return 0 only if none of them are modified between START and END. Return 1 if ! X contains a MEM; this routine does usememory aliasing. */ int modified_between_p (x, start, end) *************** modified_between_p (x, start, end) *** 1047,1052 **** --- 1047,1056 ---- enum rtx_code code = GET_CODE (x); const char *fmt; int i, j; + rtx insn; + + if (start == end) + return 0; switch (code) { *************** modified_between_p (x, start, end) *** 1063,1072 **** return 1; case MEM: ! /* If the memory is not constant, assume it is modified. If it is ! constant, we still have to check the address. */ ! if (! RTX_UNCHANGING_P (x)) return 1; break; case REG: --- 1067,1080 ---- return 1; case MEM: ! if (RTX_UNCHANGING_P (x)) ! return 0; ! if (modified_between_p (XEXP (x, 0), start, end)) return 1; + for (insn = NEXT_INSN (start); insn != end; insn = NEXT_INSN (insn)) + if (memory_modified_in_insn_p (x, insn)) + return 1; + return 0; break; case REG: *************** modified_between_p (x, start, end) *** 1093,1099 **** /* Similar to reg_set_p, but check all registers in X. Return 0 only if none of them are modified in INSN. Return 1 if X contains a MEM; this routine ! does not perform any memory aliasing. */ int modified_in_p (x, insn) --- 1101,1107 ---- /* Similar to reg_set_p, but check all registers in X. Return 0 only if none of them are modified in INSN. Return 1 if X contains a MEM; this routine ! does use memory aliasing. */ int modified_in_p (x, insn) *************** modified_in_p (x, insn) *** 1119,1128 **** return 1; case MEM: ! /* If the memory is not constant, assume it is modified. If it is ! constant, we still have to check the address. */ ! if (! RTX_UNCHANGING_P (x)) return 1; break; case REG: --- 1127,1139 ---- return 1; case MEM: ! if (RTX_UNCHANGING_P (x)) ! return 0; ! if (modified_in_p (XEXP (x, 0), insn)) return 1; + if (memory_modified_in_insn_p (x, insn)) + return 1; + return 0; break; case REG: From gcc-patches-return-75205-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 22:07:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20403 invoked by alias); 7 Jan 2003 22:07:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20389 invoked from network); 7 Jan 2003 22:07:30 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 7 Jan 2003 22:07:30 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h07M7Jw12615 for ; Tue, 7 Jan 2003 14:07:19 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Tue, 7 Jan 2003 14:07:19 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h07M7Jf22877; Tue, 7 Jan 2003 14:07:19 -0800 (PST) Date: Tue, 7 Jan 2003 14:06:46 -0800 Subject: Patch: doc nit Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen To: gcc-patches@gcc.gnu.org From: Dale Johannesen Content-Transfer-Encoding: 7bit Message-Id: <501DD71C-228C-11D7-B860-000393D76DAA@apple.com> When the 2nd arg of subreg was changed from words to bytes, the example below wasn't changed. Index: rtl.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/rtl.texi,v retrieving revision 1.45 diff -u -d -b -w -r1.45 rtl.texi --- rtl.texi 17 Dec 2002 16:47:45 -0000 1.45 +++ rtl.texi 7 Jan 2003 22:06:13 -0000 @@ -1476,7 +1476,7 @@ hard register when less registers can hold the value than would be expected from its size. For example, some 32-bit machines have floating-point registers that can hold an entire @code{DFmode} value. -If register 10 were such a register @code{(subreg:SI (reg:DF 10) 1)} +If register 10 were such a register @code{(subreg:SI (reg:DF 10) 4)} would be invalid because there is no way to convert that reference to a single machine register. The reload pass prevents @code{subreg} expressions such as these from being formed. From gcc-patches-return-75206-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 22:15:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25560 invoked by alias); 7 Jan 2003 22:15:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23976 invoked from network); 7 Jan 2003 22:12:30 -0000 Received: from unknown (HELO smtp6.wanadoo.nl) (194.134.35.177) by 209.249.29.67 with SMTP; 7 Jan 2003 22:12:30 -0000 Received: from steven.lr-s.tudelft.nl (3eea16aa.cable.wanadoo.nl [62.234.22.170]) by smtp6.wanadoo.nl (Postfix) with ESMTP id 9DAA171CB4; Tue, 7 Jan 2003 23:12:14 +0100 (CET) Subject: [tree-ssa G95] make check-g95 From: Steven Bosscher To: gcc-patches@gcc.gnu.org Cc: dnovillo@redhat.com, Paul Brook , Arnaud Desitter Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 07 Jan 2003 23:12:59 +0100 Message-Id: <1041977591.907.107.camel@steven> Mime-Version: 1.0 Hi Diego, Paul, This is the final piece we need for a G95 DejaGNU test framework. From now on, we can just drop our test cases in the (right) test suite directories, et voila! Diego, can you please apply this copy/paste patch on the tree-ssa branch? 2003-01-07 Steven Bosscher * Makefile.in: (check-g95): New test target. (check-f95): alias for check-g95. Index: Makefile.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/Makefile.in,v retrieving revision 1.903.2.60 diff -c -r1.903.2.60 Makefile.in *** Makefile.in 3 Jan 2003 01:57:16 -0000 1.903.2.60 --- Makefile.in 7 Jan 2003 22:05:15 -0000 *************** *** 3268,3273 **** --- 3268,3274 ---- check-c++ : check-g++ check-f77 : check-g77 + check-f95 : check-g95 check-java : check: $(CHECK_TARGETS) *************** *** 3321,3326 **** --- 3322,3337 ---- TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD}` ; \ export TCL_LIBRARY ; fi ; \ $(RUNTEST) --tool g77 $(RUNTESTFLAGS)) + + check-g95: $(TESTSUITEDIR)/site.exp + -(rootme=`${PWD}`; export rootme; \ + srcdir=`cd ${srcdir}; ${PWD}` ; export srcdir ; \ + cd $(TESTSUITEDIR); \ + EXPECT=${EXPECT} ; export EXPECT ; \ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD}` ; \ + export TCL_LIBRARY ; fi ; \ + $(RUNTEST) --tool g95 $(RUNTESTFLAGS)) check-objc: $(TESTSUITEDIR)/site.exp -(rootme=`${PWD}`; export rootme; \ From gcc-patches-return-75207-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 22:16:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26597 invoked by alias); 7 Jan 2003 22:16:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26553 invoked from network); 7 Jan 2003 22:16:05 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 22:16:05 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07MB5105394; Tue, 7 Jan 2003 17:11:05 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07MFnn09342; Tue, 7 Jan 2003 17:15:49 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07MFnn21490; Tue, 7 Jan 2003 14:15:49 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07MFnD23723; Tue, 7 Jan 2003 14:15:49 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 14:15:49 -0800 From: Richard Henderson To: Alexandre Oliva Cc: "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) Message-ID: <20030107221549.GR12992@redhat.com> Mail-Followup-To: Richard Henderson , Alexandre Oliva , "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <200212241434.JAA22361@caip.rutgers.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i This should have been split into several smaller patches. On Fri, Dec 27, 2002 at 11:47:15AM -0200, Alexandre Oliva wrote: > * Makefile.in (FPBIT_FUNCS): Added _sf_to_tf. > (DBBIT_FUNCS): Added _df_to_tf. > (TPBIT_FUNCS): New. > (libgcc.mk): Pass TPBIT and TPBIT_FUNCS down. > (LIBGCC_DEPS): Added TPBIT. > * mklibgcc.in: Support TPBIT and TPBIT_FUNCS. Ok. > * fp-bit.h: Define macros for TFmode floating-point constants > in IEEE and IBM-extended TFmode types. Declare functions > according to L_ macros. > (TMODES): Define if __LDBL_MANT_DIG__ has one of > the newly-supported widths. > (TFtype, TItype, UTItype): Define if TMODES is defined. > (MAX_UDI_INT, MAX_DI_INT, BITS_PER_DI): Likewise. > (F_T_BITOFF, D_T_BITOFF): Define. > (IMPLICIT_1, IMPLICIT_2): Cast constants to types that are > guaranteed to be wide enough. > * config/fp-bit.c: Check for L_ macros for tf functions. > (__thenan_tf): New. > (nan): Adjust. > (pack_d, unpack_d): Support IEEE 854 and IBM-extended TFmode > types. > (_fpmul_parts): Support TFmode. Compute exponent adjustment > from FRAC_NBITS, FRAC_BITS and NGARDS. > (usi_to_float): Cast constants to be shifted to fractype > instead of assuming long long is wide enough. > (sf_to_tf, df_to_tf, __make_tp, tf_to_df, tf_to_sf): New. Ok, I guess. I'd kinda prefer that we use different names for the routines than __addtf etc for the IBM format. This would allow the IBM double-double format and the IEEE quad format routines to co-exist on one platform, which would allow non-Irix to use a more sensible format unambiguously. I won't insist on this though. > * print-rtl.c (print_rtx): Don't print MEM details in > GENERATOR_FILEs. Ok. > * rtl.c (get_mode_alignment): Moved to... > * stor-layout.c: ... here. Ok. > * calls.c (emit_library_call_value_1): Handle return values > in a PARALLEL. Ok. Yet another clue that these routines should be removed, and replaced with the generic call functions. > * expr.c (emit_group_store): Initialize dst with CONST0_RTX > for the appropriate mode. Ok. > * optabs.c (expand_binop) : Return xtarget if we haven't > been able to move the result to target. Ok, I guess. How does this come up? > * real.h (struct real_format): Add denorm_p, remove has_denorm. > * real.c: Adjust all formats and references to has_denorm. > * c-common.c (builtin_define_float_constants): Use denorm_p to > define DENORM_MIN. This one's sticky. Strictly speaking, the double-double format isn't LIA-1 compliant (too few denormal bits), and so libstdc++ ought to be setting denorm_min to zero. On the other hand, I can see that this value might still be useful for some people. Run it by the libstdc++ language lawyers. r~ From gcc-patches-return-75208-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 22:51:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8258 invoked by alias); 7 Jan 2003 22:51:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8251 invoked from network); 7 Jan 2003 22:51:13 -0000 Received: from unknown (HELO mail.libertysurf.net) (213.36.80.91) by 209.249.29.67 with SMTP; 7 Jan 2003 22:51:13 -0000 Received: from localhost.localdomain (212.83.141.115) by mail.libertysurf.net (6.5.026) id 3DFA280800322D4D; Tue, 7 Jan 2003 23:51:00 +0100 Content-Type: text/plain; charset="iso-8859-1" From: Eric Botcazou To: Geoff Keating Subject: Re: 3 pending patches from 2002 Date: Tue, 7 Jan 2003 23:52:33 +0100 User-Agent: KMail/1.4.1 Cc: gcc-patches@gcc.gnu.org References: <14980000.1041902728@warlock.codesourcery.com> <200301071248.14217.ebotcazou@libertysurf.fr> In-Reply-To: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200301072346.35164.ebotcazou@libertysurf.fr> > No, it's not robust, why can't you > > /* { dg-final { scan-assembler "dummy1" } { scan-assembler "dummy2" } }= */ > > or similar? Because I think the presence of the three dummy statements in the asm cod= e is=20 not a sufficient test. The mainline currently generates the following cod= e: foo: =09pushl=09%ebp =09movl=09%esp, %ebp =09movl=098(%ebp), %eax =09testl=09%eax, %eax =09je=09.L1 #APP =09dummy1 =09dummy2 =09dummy3 #NO_APP =2EL1: =09popl=09%ebp =09ret --=20 Eric Botcazou From gcc-patches-return-75209-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 23:35:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1070 invoked by alias); 7 Jan 2003 23:35:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1062 invoked from network); 7 Jan 2003 23:35:34 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 7 Jan 2003 23:35:34 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18W3Fi-0008NY-00; Tue, 07 Jan 2003 23:35:22 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18W3Fi-0003aD-00; Tue, 07 Jan 2003 23:35:22 +0000 Date: Tue, 7 Jan 2003 23:35:19 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Janis Johnson cc: Subject: Re: [doc-patch] fix PR 8947 with addition to invoke.texi In-Reply-To: <20030107102012.A12044@us.ibm.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Tue, 7 Jan 2003, Janis Johnson wrote: > Is this the only other place that needs to be updated for a change to > the GCC manual, or are there more? The last modification date for the whole manual (in gcc.texi, or in gccint.texi for the internals manual), though it's not worth keeping updating it for every minor change except on a release branch close to a release. The whole-manual copyright and licence notices are now unified inside @copying once for each manual (but the manpages have their own, which you already properly updated in this patch). -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75210-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 23:49:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5657 invoked by alias); 7 Jan 2003 23:49:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5645 invoked from network); 7 Jan 2003 23:49:14 -0000 Received: from unknown (HELO rose.csi.cam.ac.uk) (131.111.8.13) by 209.249.29.67 with SMTP; 7 Jan 2003 23:49:14 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by rose.csi.cam.ac.uk with esmtp (Exim 4.10) id 18W3Sw-0000Th-00; Tue, 07 Jan 2003 23:49:02 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18W3Sw-0003ol-00; Tue, 07 Jan 2003 23:49:02 +0000 Date: Tue, 7 Jan 2003 23:48:58 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Steven Bosscher cc: , , Paul Brook , Arnaud Desitter Subject: Re: [tree-ssa G95] make check-g95 In-Reply-To: <1041977591.907.107.camel@steven> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 7 Jan 2003, Steven Bosscher wrote: > Hi Diego, Paul, > > This is the final piece we need for a G95 DejaGNU test framework. From > now on, we can just drop our test cases in the (right) test suite > directories, et voila! Thanks for drawing my attention to this additional place needing changing for new languages I missed when writing the checklist in sourcebuild.texi. The system for language testsuites should be regularised: instead of rules in Makefile.in for each language, there should be rules in Make-lang.in, and the rule should be called .check as with other language Make-lang.in hooks. The list of these hooks is in configure.in (which also has special logic for check_languages, which could be removed), and they are documented in sourcebuild.texi. (Compatibility names, e.g. check-c++ aliases, could stay in Make-lang.in alongside the regular names. The QMTest rules should properly also move to language subdirectories, but I don't know much about how they work.) Changing things this way would make testsuites for new languages genuinely just drop in. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75211-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 23:50:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6485 invoked by alias); 7 Jan 2003 23:50:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6470 invoked from network); 7 Jan 2003 23:50:07 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 7 Jan 2003 23:50:07 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07Nj9115002; Tue, 7 Jan 2003 18:45:09 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h07Nntn17352; Tue, 7 Jan 2003 18:49:55 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h07Nnsn04050; Tue, 7 Jan 2003 15:49:54 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h07NnsG23782; Tue, 7 Jan 2003 15:49:54 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 15:49:54 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Conditional addition for i386 Message-ID: <20030107234954.GA23772@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> <20030107204216.GD10268@kam.mff.cuni.cz> <20030107205303.GH12992@redhat.com> <20030107205739.GF10268@kam.mff.cuni.cz> <20030107210709.GL12992@redhat.com> <20030107212034.GH10268@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107212034.GH10268@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 10:20:34PM +0100, Jan Hubicka wrote: > * i386.md (adddi3_carry_rex64, subdi3_carry_rex64): Name pattern. > (addhi3_carry, addqi3_carry, subhi3_carry, subqi3_carry): New patterns. > (add??cc): New expanders. > * i386.c (expand_int_addcc): New function. > * i386-protos.h (expand_int_addcc): Declare. Ok. r~ From gcc-patches-return-75212-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 00:03:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15584 invoked by alias); 8 Jan 2003 00:03:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15576 invoked from network); 8 Jan 2003 00:03:15 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 00:03:15 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h07NwG115954; Tue, 7 Jan 2003 18:58:16 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08032n18195; Tue, 7 Jan 2003 19:03:03 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08032n06052; Tue, 7 Jan 2003 16:03:02 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08032t26650; Tue, 7 Jan 2003 16:03:02 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Tue, 7 Jan 2003 16:03:01 -0800 From: Richard Henderson To: Jan Hubicka Cc: Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Fix ifcvt on memory operands Message-ID: <20030108000301.GA26644@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021204193501.GE5173@kam.mff.cuni.cz> <20030107213845.GN12992@redhat.com> <20030107215524.GI10268@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107215524.GI10268@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 10:55:24PM +0100, Jan Hubicka wrote: > * alias.c (memory_modified_1): New static function. > (memory_modified): New static varaible. > (memory_modified_in_insn_p): New global function. > * rtl.h (memory_modified_in_insn_p): Declare. > * rtlanal.c (modified_between_p, modified_in_p): Be smart about memory > references. Ok. r~ From gcc-patches-return-75213-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 00:09:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19193 invoked by alias); 8 Jan 2003 00:09:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16442 invoked from network); 8 Jan 2003 00:06:54 -0000 Received: from unknown (HELO smtp6.wanadoo.nl) (194.134.35.177) by 209.249.29.67 with SMTP; 8 Jan 2003 00:06:54 -0000 Received: from steven.lr-s.tudelft.nl (3eea16aa.cable.wanadoo.nl [62.234.22.170]) by smtp6.wanadoo.nl (Postfix) with ESMTP id D123D707AF; Wed, 8 Jan 2003 01:06:40 +0100 (CET) Subject: Re: [tree-ssa G95] make check-g95 From: Steven Bosscher To: "Joseph S. Myers" Cc: gcc-patches@gcc.gnu.org, dnovillo@redhat.com, Paul Brook In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 08 Jan 2003 01:07:35 +0100 Message-Id: <1041984456.907.130.camel@steven> Mime-Version: 1.0 Op wo 08-01-2003, om 00:48 schreef Joseph S. Myers: > On 7 Jan 2003, Steven Bosscher wrote: > > > Hi Diego, Paul, > > > > This is the final piece we need for a G95 DejaGNU test framework. From > > now on, we can just drop our test cases in the (right) test suite > > directories, et voila! > > Thanks for drawing my attention to this additional place needing changing > for new languages I missed when writing the checklist in sourcebuild.texi. > The system for language testsuites should be regularised: instead of rules > in Makefile.in for each language, there should be rules in Make-lang.in, > and the rule should be called .check as with other language > Make-lang.in hooks. The list of these hooks is in configure.in (which > also has special logic for check_languages, which could be removed), and > they are documented in sourcebuild.texi. (Compatibility names, e.g. > check-c++ aliases, could stay in Make-lang.in alongside the regular names. > The QMTest rules should properly also move to language subdirectories, but > I don't know much about how they work.) > > Changing things this way would make testsuites for new languages genuinely > just drop in. It would be even better if we would not have to change anything. Did you notice that all the check-* targets execute exactly the same code? The only thing that is different is the name and the --tool parameter. The parameter is the language name, with the exception of "consistency" So maybe we can just generate the check- targets for all configured languages, and for a list of extra check-* targets. The only problems - deciding where that list would have to be defined. - languages that have no test suite - QMtest The first is easy, and the second, I think, is a non-issue; Who writes a a serious front end without a test suite. The third, I know nothing about. Greetz Steven From gcc-patches-return-75214-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 00:22:28 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26651 invoked by alias); 8 Jan 2003 00:22:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26644 invoked from network); 8 Jan 2003 00:22:27 -0000 Received: from unknown (HELO gold.csi.cam.ac.uk) (131.111.8.12) by 209.249.29.67 with SMTP; 8 Jan 2003 00:22:27 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by gold.csi.cam.ac.uk with esmtp (Exim 4.10) id 18W3z5-0008K2-00; Wed, 08 Jan 2003 00:22:15 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18W3z5-0004cb-00; Wed, 08 Jan 2003 00:22:15 +0000 Date: Wed, 8 Jan 2003 00:22:12 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Steven Bosscher cc: , , Paul Brook Subject: Re: [tree-ssa G95] make check-g95 In-Reply-To: <1041984456.907.130.camel@steven> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 8 Jan 2003, Steven Bosscher wrote: > It would be even better if we would not have to change anything. > > Did you notice that all the check-* targets execute exactly the same > code? There are lots of targets in the language subdirectories that also are very similar to each other. Perhaps a good future project would clean up the common code with autogen or similar. > The only thing that is different is the name and the --tool parameter. > The parameter is the language name, with the exception of "consistency" Obviously special cases such as the C testsuite and "consistency" would still appear in the main Makefile.in or be special cased in generation. [Something should also be done about the special rules for parallel testing of multilibs, which also should not be hardcoded in Makefile.in.] > So maybe we can just generate the check- targets for all configured > languages, and for a list of extra check-* targets. > > The only problems > - deciding where that list would have to be defined. > - languages that have no test suite > - QMtest > > The first is easy, and the second, I think, is a non-issue; Who writes a > a serious front end without a test suite. The third, I know nothing > about. Ada has testsuites, but a lot of work is needed to get them into GCC. Java has testsuites, but testing anything with Java needs the library so they go in the library directory. Using the existing language hooks mechanism does trivially allow for such cases (a dummy .check rule is used). If multiple languages will need different testsuite rules (whether through QMTest or otherwise) that's simpler with the hooks. config-lang.in is how a language would communicate to configure any information configure needs about its testsuite to generate rules. In any case, whatever solution for the G95 testsuite is convenient now on tree-ssa, for mainline I'd like a better solution removing the language rules from Makefile.in. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75215-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 00:51:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4634 invoked by alias); 8 Jan 2003 00:51:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4116 invoked from network); 8 Jan 2003 00:48:38 -0000 Received: from unknown (HELO overta.ru) (217.23.68.3) by 209.249.29.67 with SMTP; 8 Jan 2003 00:48:38 -0000 Received: from [217.23.69.122] (HELO localhost.localdomain) by overta.ru (CommuniGate Pro SMTP 4.0) with ESMTP id 4599277; Wed, 08 Jan 2003 03:48:05 +0300 From: Denis Chertykov To: gcc-patches@gcc.gnu.org Cc: denisc@overta.ru, Michael Matz Subject: [new-regalloc-branch] stack slot coalescing, web class spilling Date: Wed, 08 Jan 2003 03:48:06 +0300 Message-ID: Bootstrapped c,c++,f77 on i686. Java failed to compile libraries because library sources damaged or java parser error. 2003-01-07 Denis Chertykov * ra.h (debug_web_insns): Prototype added. (debug_web_conflicts): Likewise. (actual_spill): Prototype changed. (web_preferred_class): Prototype removed. (web_class): Prototype changed. (count_long_blocks): Prototype added. (detect_web_parts_to_rebuild): Likewise (web_class_spill_ref): Likewise. (subst_to_stack_p): Likewise. * ra.c (reg_class_of_web): Removed. (one_pass): Support spill in web_class and substitution of webs colored by an_unusable_color to stack slots. (reg_alloc): Move setting of while_newra to start of function. Handling of reg_class_of_web removed. Calling of delete_trivially_dead_insns commented because insns deleted by it isn't marked for rescanning in next pass. Dump original function - the function after pre-reload and before register allocation. * ra-colorize.c (count_long_blocks): Declared as extern. (combine): Merge usable_regs of combined webs before conflicts merging. (colorize_one_web): Add new spill candidate. Some structural changes in calculation of spill candidates. (assign_colors): Call colorize_one_web with the HARD argument setted to 2. (try_recolor_web): Allocate small arrays in stack. (ra_colorize_free_all): Free web defs/uses/useless_conflicts. It was a memory allocation bug. * ra-build.c: Include obstack.h and pre-reload.h. (livethrough_conflicts_bb): Small change to avoid warning. Initialize `info' out of declaration. (select_regclass): Call web_class for each web. Handle a spilling possible in the web_class. (make_webs): Handle a spilling possible in the web_class. Call conflicts_early_clobbered to record conflicts between defs with '&' constraint and all uses in one insn. (build_i_graph): Handle a spilling possible in the web_class. Commented out call to handle_asm_insn. (conflicts_early_clobbered): New function. record conflicts between defs with '&' constraint and all uses in one insn. (web_class): Significantly changed to calculate usable_regs and regclass only for one web. Call the web_class_spill_ref for spilling ref out of web if single reg_class can't be selected. * ra-rewrite.c: Include obstack.h and pre-reload.h. (detect_web_parts_to_rebuild): Declared as extern. (insn2move): New variable for quick mapping INSN_UID to structure of a move. (spill_coalescing): Merge together the usable_regs of coalesced webs. (allocate_spill_web): Garbage of my experiments. (insert_stores): Check all uses in insns generated by spill phase in previous passes for accurate detection of insns with death. Change all code which tries incorporate spill slot registers to non move insns. (emit_loads): Change all code which tries to incorporate spill slot registers to non move insns. Use ra_validate_change for strict constraints checking. (mark_insn_refs_for_checking): New function. Mark all webs mentioned in insn for checking in the next allocator pass. (detect_web_parts_to_rebuild): Call mark_insn_refs_for_checking for each insn marked in the last_changed_insns. (subst_to_stack_p): New function. Check all colored webs to detect ones colored by an_unusable_color. (actual_spill): Argument spill_p added for tuning calls to assign_stack_slots. (assign_stack_slots): New function. Allocate and assign stack slots to all webs colored by an_unusable_color. (init_find_move): New function. Setup insn2move array. (find_move): New function. Find move for ref. (coalesce_spill_slot): New function. Coalesce small webs with stack spilled slots. (assign_stack_slots_1): New function. Replace spill slot web to stack slot in all insns. (web_class_spill_ref): New function. Spill ref out of web if single reg_class can't be found. * pre-reload.h (ra_ref): Correct mistyped field. (ra_check_constraints): New function. (ra_validate_change): Likewise. (ra_apply_change_group): Likewise. (ra_cancel_changes): Likewise. (df2ra): Declared as extern. * pre-reload.c (alternative_info): New structure. (scan_alternative): New function. Scan one alternative and fill alternative info. (collect_insn_info): Changed to call scan_alternative. (ra_check_constraints): New function. Recognize insn and check constraints validity very strictly. (ra_validate_change): New functions. Set of functions similar to validate_change. Simplified and use ra_check_constraints for insn validity. (ra_apply_change_group): Likewise. (ra_cancel_changes): Likewise. Index: ra-build.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra-build.c,v retrieving revision 1.1.2.6 diff -c -3 -p -r1.1.2.6 ra-build.c *** ra-build.c 20 Nov 2002 22:43:08 -0000 1.1.2.6 --- ra-build.c 7 Jan 2003 23:46:53 -0000 *************** *** 1,5 **** /* Graph coloring register allocator ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin --- 1,5 ---- /* Graph coloring register allocator ! Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin *************** *** 31,36 **** --- 31,38 ---- #include "df.h" #include "output.h" #include "ggc.h" + #include "obstack.h" + #include "pre-reload.h" #include "ra.h" /* This file is part of the graph coloring register alloctor. *************** static void free_bb_info PARAMS ((void)) *** 118,124 **** static void build_web_parts_and_conflicts PARAMS ((struct df *)); static void select_regclass PARAMS ((void)); static void detect_spanned_deaths PARAMS ((unsigned int *spanned_deaths)); ! /* A sbitmap of DF_REF_IDs of uses, which are live over an abnormal edge. */ --- 120,127 ---- static void build_web_parts_and_conflicts PARAMS ((struct df *)); static void select_regclass PARAMS ((void)); static void detect_spanned_deaths PARAMS ((unsigned int *spanned_deaths)); ! static void conflicts_early_clobbered PARAMS ((void)); ! static void web_class PARAMS ((struct web*)); /* A sbitmap of DF_REF_IDs of uses, which are live over an abnormal edge. */ *************** livethrough_conflicts_bb (bb) *** 1076,1083 **** { if (INSN_P (insn)) { ! struct ra_insn_info info = insn_df[INSN_UID (insn)]; unsigned int n; for (n = 0; n < info.num_defs; n++) bitmap_set_bit (all_defs, DF_REF_ID (info.defs[n])); if (TEST_BIT (insns_with_deaths, INSN_UID (insn))) --- 1079,1087 ---- { if (INSN_P (insn)) { ! struct ra_insn_info info; unsigned int n; + info = insn_df[INSN_UID (insn)]; for (n = 0; n < info.num_defs; n++) bitmap_set_bit (all_defs, DF_REF_ID (info.defs[n])); if (TEST_BIT (insns_with_deaths, INSN_UID (insn))) *************** detect_webs_set_in_cond_jump () *** 2728,2742 **** static void select_regclass () { ! struct dlist *d; ! if (flag_ra_pre_reload) ! web_class (); ! ! for (d = WEBS(INITIAL); d; d = d->next) { int i; struct web *web = DLIST_WEB (d); do { unsigned int found_size = 0; --- 2732,2752 ---- static void select_regclass () { ! struct dlist *d, *d_next; ! for (d = WEBS (INITIAL); d; d = d_next) { int i; struct web *web = DLIST_WEB (d); + struct web *supweb = web; + d_next = d->next; + if (flag_ra_pre_reload && web->type != PRECOLORED) + { + web_class (web); + if (WEBS (SPILLED)) + continue; + } + do { unsigned int found_size = 0; *************** select_regclass () *** 2746,2754 **** if (flag_ra_pre_reload) { ! web->regclass = web_preferred_class (web); ! COPY_HARD_REG_SET (web->usable_regs, ! reg_class_contents [web->regclass]); } else { --- 2756,2766 ---- if (flag_ra_pre_reload) { ! if (web->parent_web) ! { ! web->regclass = supweb->regclass; ! COPY_HARD_REG_SET (web->usable_regs, supweb->usable_regs); ! } } else { *************** make_webs (df) *** 2862,2867 **** --- 2874,2884 ---- /* And finally relate them to each other, meaning to record all possible conflicts between webs (see the comment there). */ conflicts_between_webs (df); + conflicts_early_clobbered (); + + if (WEBS (SPILLED)) + return; + detect_remat_webs (); determine_web_costs (); } *************** handle_asm_insn (df, insn) *** 3088,3095 **** else { if (flag_ra_pre_reload) ! COPY_HARD_REG_SET (conflict, ! usable_regs [web_preferred_class (web)]); else { COPY_HARD_REG_SET (conflict, usable_regs --- 3105,3111 ---- else { if (flag_ra_pre_reload) ! COPY_HARD_REG_SET (conflict, web->usable_regs); else { COPY_HARD_REG_SET (conflict, usable_regs *************** void *** 3131,3138 **** build_i_graph (df) struct df *df; { - rtx insn; - init_web_parts (df); sbitmap_zero (move_handled); --- 3147,3152 ---- *************** build_i_graph (df) *** 3148,3158 **** --- 3162,3180 ---- connected web parts. Collect all information and build the webs including all conflicts between webs (instead web parts). */ make_webs (df); + if (WEBS (SPILLED)) + return; + moves_to_webs (df); + #if 0 + { + rtx insn; /* Look for additional constraints given by asms. */ for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) handle_asm_insn (df, insn); + } + #endif } /* Allocates or reallocates most memory for the interference graph and *************** detect_spanned_deaths (spanned_deaths) *** 3590,3595 **** --- 3612,3725 ---- sbitmap_free (live); sbitmap_free (rmw_web); sbitmap_free (defs_per_insn); + } + + static void + conflicts_early_clobbered () + { + rtx insn; + struct ra_insn_info info; + + for (insn = get_insns(); insn; insn = NEXT_INSN (insn)) + { + unsigned int n; + + if (!INSN_P (insn) || INSN_UID (insn) > insn_df_max_uid) + continue; + + info = insn_df[INSN_UID (insn)]; + + for (n = 0; n < info.num_defs; n++) + { + ra_ref *rref; + struct ref *dref = info.defs[n]; + rref = DF2RA (df2ra, dref); + if (rref && RA_REF_CLOBBER_P (rref)) + { + unsigned int i; + struct web *web1 = def2web[DF_REF_ID (dref)]; + for (i = 0; i < info.num_uses; ++i) + { + struct ref *uref = info.uses[i]; + struct web *web2 = use2web[DF_REF_ID (uref)]; + record_conflict (web1, web2); + } + } + } + } + } + + /* Select a reg_class for the WEB. Split the WEB if single reg_class + can't be selected. */ + static void + web_class (web) + struct web *web; + { + unsigned int i, n, num_refs; + struct ref *dref; + struct ref **refs; + struct ra_ref *rref; + enum reg_class class; + int web_size; + int spilled_web = 0; + bitmap already_insn = NULL; + + class = ALL_REGS; + for (n = 0, refs = web->uses, num_refs = web->num_uses; + n < 2; + refs = web->defs, num_refs = web->num_defs, n++) + for (i = 0; i < num_refs; i++) + { + dref = refs[i]; + if (already_insn + && bitmap_bit_p (already_insn, INSN_UID (DF_REF_INSN (dref)))) + continue; + rref = DF2RA (df2ra, dref); + if (rref) + { + int blocks; + enum reg_class c = NO_REGS; + + if (reg_class_subset_p (rref->class, class)) + c = rref->class; + else if (reg_class_subset_p (class, rref->class)) + c = class; + + if (c != NO_REGS) + { + web_size = CLASS_MAX_NREGS (c, PSEUDO_REGNO_MODE (web->regno)); + blocks = count_long_blocks (usable_regs[c], web_size); + } + else + { + blocks = 0; + c = class; + } + if (!blocks) + { + web_class_spill_ref (web, dref); + spilled_web = 1; + if (!already_insn) + already_insn = BITMAP_XMALLOC (); + bitmap_set_bit (already_insn, INSN_UID (DF_REF_INSN (dref))); + } + else + class = c; + } + } + if (spilled_web) + { + remove_list (web->dlink, &WEBS(INITIAL)); + put_web (web, SPILLED); + } + else + { + web->regclass = class; + COPY_HARD_REG_SET (web->usable_regs, usable_regs[class]); + } + + if (already_insn) + BITMAP_XFREE (already_insn); } #include "gt-ra-build.h" Index: ra.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra.c,v retrieving revision 1.1.2.64 diff -c -3 -p -r1.1.2.64 ra.c *** ra.c 20 Nov 2002 22:43:08 -0000 1.1.2.64 --- ra.c 7 Jan 2003 23:46:55 -0000 *************** *** 1,5 **** /* Graph coloring register allocator ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . --- 1,5 ---- /* Graph coloring register allocator ! Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . *************** bitmap spill_slot_regs; *** 160,167 **** /* Tracking insns modified/deleted/emitted by allocator in current pass. */ bitmap ra_modified_insns; - static enum reg_class *reg_class_of_web; - extern struct df2ra build_df2ra PARAMS ((struct df*, struct ra_info*)); static struct ra_info *ra_info; struct df2ra df2ra; --- 160,165 ---- *************** one_pass (df, rebuild) *** 468,487 **** if (!rebuild) dump_igraph_machine (); ! /* Colorize the I-graph. This results in either a list of ! spilled_webs, in which case we need to run the spill phase, and ! rerun the allocator, or that list is empty, meaning we are done. */ ! ra_colorize_graph (df); ! ! last_max_uid = get_max_uid (); ! /* actual_spill() might change WEBS(SPILLED) and even empty it, ! so we need to remember it's state. */ ! something_spilled = !!WEBS(SPILLED); ! ! /* Add spill code if necessary. */ ! if (something_spilled) ! actual_spill (); ! ticks = clock () - ticks; if (rebuild) ticks_rebuild += ticks; --- 466,517 ---- if (!rebuild) dump_igraph_machine (); ! if (!WEBS (SPILLED)) ! { ! /* Colorize the I-graph. This results in either a list of ! spilled_webs, in which case we need to run the spill phase, and ! rerun the allocator, or that list is empty, meaning we are done. */ ! ra_colorize_graph (df); ! ! last_max_uid = get_max_uid (); ! ! /* actual_spill() might change WEBS(SPILLED) and even empty it, ! so we need to remember it's state. */ ! something_spilled = !!WEBS(SPILLED); ! ! /* Add spill code if necessary. */ ! if (something_spilled) ! actual_spill (1); ! ! /* Check all colored webs to detect ones colored by an_unusable_color. ! These webs are spill temporaries and must be substituted by stack ! slots. `subst_to_stack_p' performs checking. */ ! if (!something_spilled && subst_to_stack_p ()) ! { ! something_spilled = 1; ! ra_debug_msg (DUMP_NEARLY_EVER, ! "Stack spill slots must be added.\n"); ! actual_spill (0); ! } ! } ! else if (ra_pass == 1) ! { ! if (death_insns_max_uid < get_max_uid ()) ! { ! sbitmap_free (insns_with_deaths); ! insns_with_deaths = sbitmap_alloc (get_max_uid ()); ! sbitmap_ones (insns_with_deaths); ! death_insns_max_uid = get_max_uid (); ! } ! last_changed_insns = ra_modified_insns; ! detect_web_parts_to_rebuild (); ! last_changed_insns = NULL; ! something_spilled = 1; ! last_max_uid = get_max_uid (); ! } ! else ! abort (); ! ticks = clock () - ticks; if (rebuild) ticks_rebuild += ticks; *************** init_ra () *** 593,599 **** break; if (an_unusable_color == FIRST_PSEUDO_REGISTER) abort (); - compute_bb_for_insn (); ra_reg_renumber = NULL; insns_with_deaths = NULL; --- 623,628 ---- *************** reg_alloc () *** 800,805 **** --- 829,835 ---- flag_ra_pre_reload = 0; flag_ra_spanned_deaths_from_scratch = 0; */ + while_newra = 1; if (! INSN_P (last)) last = prev_real_insn (last); /* If this is an empty function we shouldn't do all the following, *************** reg_alloc () *** 901,910 **** df = df_init (); ra_modified_insns = NULL; if (flag_ra_pre_reload) ! { ! ra_info = ra_info_init (max_reg_num ()); ! reg_class_of_web = NULL; ! } /* This is the main loop, calling one_pass as long as there are still some spilled webs. */ --- 931,937 ---- df = df_init (); ra_modified_insns = NULL; if (flag_ra_pre_reload) ! ra_info = ra_info_init (max_reg_num ()); /* This is the main loop, calling one_pass as long as there are still some spilled webs. */ *************** reg_alloc () *** 915,921 **** internal_error ("Didn't find a coloring.\n"); if (flag_ra_pre_reload) ! pre_reload (ra_info, ra_modified_insns); if (!ra_modified_insns) ra_modified_insns = BITMAP_XMALLOC (); --- 942,956 ---- internal_error ("Didn't find a coloring.\n"); if (flag_ra_pre_reload) ! { ! pre_reload (ra_info, ra_modified_insns); ! if (rtl_dump_file && ra_pass == 1 && (debug_new_regalloc & DUMP_RTL)) ! { ! ra_debug_msg (DUMP_NEARLY_EVER, "Original function:\n"); ! ra_print_rtl_with_bb (rtl_dump_file, get_insns ()); ! fflush (rtl_dump_file); ! } ! } if (!ra_modified_insns) ra_modified_insns = BITMAP_XMALLOC (); *************** reg_alloc () *** 1007,1013 **** --- 1042,1050 ---- /* And new insns. */ compute_bb_for_insn (); /* Some of them might be dead. */ + /* delete_trivially_dead_insns (get_insns (), max_reg_num ()); + */ /* Those new pseudos need to have their REFS count set. */ reg_scan_update (get_insns (), NULL, max_regno); max_regno = max_reg_num (); *************** reg_alloc () *** 1060,1066 **** no_new_pseudos = 0; allocate_reg_info (max_reg_num (), FALSE, FALSE); /*compute_bb_for_insn ();*/ - while_newra = 1; /*store_motion ();*/ no_new_pseudos = 1; rtl_dump_file = ra_dump_file; --- 1097,1102 ---- *************** reg_alloc () *** 1158,1257 **** allocate_initial_values (reg_equiv_memory_loc); /* And one last regclass pass just before reload. */ regclass (get_insns (), max_reg_num (), rtl_dump_file); - if (flag_ra_pre_reload) - if (reg_class_of_web) - free (reg_class_of_web); BITMAP_XFREE (emitted_by_spill); BITMAP_XFREE (spill_slot_regs); } - - enum reg_class - web_preferred_class (web) - struct web *web; - { - if (!reg_class_of_web) - abort (); - - if (web->id >= num_webs) - abort (); - - return reg_class_of_web[find_web_for_subweb(web)->id]; - } - - - void - web_class () - { - unsigned int n; - unsigned int i; - char class[LIM_REG_CLASSES]; - ra_ref *rref; - struct ref* dref; - enum reg_class best; - int debug = 0; - static const char *const reg_class_names[] = REG_CLASS_NAMES; - - if (reg_class_of_web) - free (reg_class_of_web); - - reg_class_of_web = xmalloc (sizeof (enum reg_class) * (num_webs - - num_subwebs)); - for (n = 0; n < (num_webs - num_subwebs); ++n) - { - struct web *web = id2web[n]; - int founded = 0; - - reg_class_of_web[n] = NO_REGS; - - if (web->type == PRECOLORED) - continue; - - for (i = 0; i < LIM_REG_CLASSES; ++i) - class[i] = 0; - - for (i = 0; i < web->num_defs; ++i) - { - dref = web->defs[i]; - rref = DF2RA (df2ra, dref); - if (rref) - ++class[rref->class]; - } - - for (i = 0; i < web->num_uses; ++i) - { - dref = web->uses[i]; - rref = DF2RA (df2ra, dref); - if (rref) - ++class[rref->class]; - } - if (debug) - fprintf (stderr, "Web: %d ", web->id); - best = ALL_REGS; - for (i = 0; i < LIM_REG_CLASSES; ++i) - if (class[i]) - { - if (reg_class_subset_p (i, best)) - { - best = i; - founded = 1; - } - else if (!reg_class_subset_p (best, i)) - best = NO_REGS; - if (debug) - fprintf (stderr, "%s: %d ", reg_class_names[i], class[i]); - } - if (debug) - fprintf (stderr, " BEST: %s\n", reg_class_names[best]); - if (best == NO_REGS) - { - if (debug) - fprintf (stderr, "Web: %d (%d) NO_REGS\n", web->id, web->regno); - best = GENERAL_REGS; - } - reg_class_of_web[n] = best; - } - } /* vim:cinoptions={.5s,g0,p5,t0,(0,^-0.5s,n-0.5s:tw=78:cindent:sw=4: */ --- 1194,1203 ---- Index: ra-colorize.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra-colorize.c,v retrieving revision 1.1.2.6 diff -c -3 -p -r1.1.2.6 ra-colorize.c *** ra-colorize.c 20 Nov 2002 22:43:08 -0000 1.1.2.6 --- ra-colorize.c 7 Jan 2003 23:47:11 -0000 *************** *** 1,5 **** /* Graph coloring register allocator ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . --- 1,5 ---- /* Graph coloring register allocator ! Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . *************** static int color_usable_p PARAMS ((int, *** 70,76 **** int get_free_reg PARAMS ((HARD_REG_SET, HARD_REG_SET, enum machine_mode)); static int get_biased_reg PARAMS ((HARD_REG_SET, HARD_REG_SET, HARD_REG_SET, HARD_REG_SET, enum machine_mode)); - static int count_long_blocks PARAMS ((HARD_REG_SET, int)); static char * hardregset_to_string PARAMS ((HARD_REG_SET)); static void calculate_dont_begin PARAMS ((struct web *, HARD_REG_SET *)); static void colorize_one_web PARAMS ((struct web *, int)); --- 70,75 ---- *************** build_worklists (df) *** 392,398 **** for (i = 0; i < num; i++) { struct web *web = order2web[i]; - struct conflict_link *wl; remove_list (web->dlink, &WEBS(INITIAL)); put_web (web, SIMPLIFY); /*put_web (web, SELECT); --- 391,396 ---- *************** combine (u, v) *** 763,768 **** --- 761,778 ---- u->spill_cost += v->spill_cost; /*u->spill_cost = MAX (u->spill_cost, v->spill_cost);*/ merge_moves (u, v); + + /* Now merge the usable_regs together. */ + /* XXX That merging might normally make it necessary to + adjust add_hardregs, which also means to adjust neighbors. This can + result in making some more webs trivially colorable, (or the opposite, + if this increases our add_hardregs). Because we intersect the + usable_regs it should only be possible to decrease add_hardregs. So a + conservative solution for now is to simply don't change it. */ + u->use_my_regs = 1; + AND_HARD_REG_SET (u->usable_regs, v->usable_regs); + u->regclass = reg_class_subunion[u->regclass][v->regclass]; + /* combine add_hardregs's of U and V. */ for (wl = v->conflict_list; wl; wl = wl->next) *************** combine (u, v) *** 831,846 **** } } - /* Now merge the usable_regs together. */ - /* XXX That merging might normally make it necessary to - adjust add_hardregs, which also means to adjust neighbors. This can - result in making some more webs trivially colorable, (or the opposite, - if this increases our add_hardregs). Because we intersect the - usable_regs it should only be possible to decrease add_hardregs. So a - conservative solution for now is to simply don't change it. */ - u->use_my_regs = 1; - AND_HARD_REG_SET (u->usable_regs, v->usable_regs); - u->regclass = reg_class_subunion[u->regclass][v->regclass]; /* Count number of possible hardregs. This might make U a spillweb, but that could also happen, if U and V together had too many conflicts. */ --- 841,846 ---- *************** get_biased_reg (dont_begin_colors, bias, *** 1160,1166 **** /* Counts the number of non-overlapping bitblocks of length LEN in FREE_COLORS. */ ! static int count_long_blocks (free_colors, len) HARD_REG_SET free_colors; int len; --- 1160,1166 ---- /* Counts the number of non-overlapping bitblocks of length LEN in FREE_COLORS. */ ! int count_long_blocks (free_colors, len) HARD_REG_SET free_colors; int len; *************** colorize_one_web (web, hard) *** 1522,1528 **** { unsigned int loop; struct web *try = NULL; ! struct web *candidates[9]; ra_debug_msg (DUMP_COLORIZE, " *** %d spilled, although %s ***\n", web->id, web->spill_temp ? "spilltemp" : "non-spill"); --- 1522,1528 ---- { unsigned int loop; struct web *try = NULL; ! struct web *candidates[10]; ra_debug_msg (DUMP_COLORIZE, " *** %d spilled, although %s ***\n", web->id, web->spill_temp ? "spilltemp" : "non-spill"); *************** colorize_one_web (web, hard) *** 1566,1586 **** } if (aw->type != COLORED) continue; ! if (w->type == COLORED && !w->spill_temp && !w->is_coalesced ! && w->was_spilled) { ! if (w->spill_cost < web->spill_cost) ! set_cand (0, w); ! else if (web->spill_temp) ! set_cand (1, w); } ! if (w->type == COLORED && !w->spill_temp && !w->is_coalesced ! && !w->was_spilled) { ! if (w->spill_cost < web->spill_cost) ! set_cand (2, w); ! else if (web->spill_temp && web->spill_temp != 2) ! set_cand (3, w); } if (web->spill_temp) { --- 1566,1600 ---- } if (aw->type != COLORED) continue; ! else { ! int c; ! int intersects_p = 0; ! for (c = 0; c <= aw->add_hardregs; ++c) ! if (TEST_HARD_REG_BIT (web->usable_regs, aw->color + c)) ! { ! intersects_p = 1; ! break; ! } ! if (!intersects_p) ! continue; } ! if (!w->spill_temp && !w->is_coalesced && w->type == COLORED) { ! if (w->was_spilled) ! { ! if (w->spill_cost < web->spill_cost) ! set_cand (0, w); ! else if (web->spill_temp) ! set_cand (1, w); ! } ! else ! { ! if (w->spill_cost < web->spill_cost) ! set_cand (2, w); ! else if (web->spill_temp && web->spill_temp != 2) ! set_cand (3, w); ! } } if (web->spill_temp) { *************** colorize_one_web (web, hard) *** 1608,1616 **** temps (and not only type 2 spill temps). */ if (web->changed && !aw->changed && aw->spill_temp) set_cand (8, aw); } } ! for (loop = 0; try == NULL && loop < 9; loop++) if (candidates[loop]) try = candidates[loop]; #undef set_cand --- 1622,1637 ---- temps (and not only type 2 spill temps). */ if (web->changed && !aw->changed && aw->spill_temp) set_cand (8, aw); + if (aw->spill_temp && aw->span_deaths /* && !aw->changed */ + && !web->span_deaths + && !web->is_coalesced) + set_cand (9, aw); } } ! for (loop = 0; ! try == NULL ! && loop < sizeof (candidates) / sizeof (candidates[0]); ! loop++) if (candidates[loop]) try = candidates[loop]; #undef set_cand *************** assign_colors () *** 1717,1723 **** struct web *web; d = pop_list (&WEBS(SELECT)); web = DLIST_WEB (d); ! colorize_one_web (DLIST_WEB (d), 1); } for (d = WEBS(COALESCED); d; d = d->next) --- 1738,1744 ---- struct web *web; d = pop_list (&WEBS(SELECT)); web = DLIST_WEB (d); ! colorize_one_web (DLIST_WEB (d), 2); } for (d = WEBS(COALESCED); d; d = d->next) *************** try_recolor_web (web) *** 1743,1758 **** struct web *web; { struct conflict_link *wl; ! unsigned HOST_WIDE_INT *cost_neighbors; ! unsigned int *min_color; int newcol, c; HARD_REG_SET precolored_neighbors, spill_temps; HARD_REG_SET possible_begin, wide_seen; ! cost_neighbors = (unsigned HOST_WIDE_INT *) ! xcalloc (FIRST_PSEUDO_REGISTER, sizeof (cost_neighbors[0])); /* For each hard-regs count the number of preceding hardregs, which would overlap this color, if used in WEB's mode. */ ! min_color = (unsigned int *) xcalloc (FIRST_PSEUDO_REGISTER, sizeof (int)); CLEAR_HARD_REG_SET (possible_begin); for (c = 0; c < FIRST_PSEUDO_REGISTER; c++) { --- 1764,1779 ---- struct web *web; { struct conflict_link *wl; ! unsigned HOST_WIDE_INT cost_neighbors[FIRST_PSEUDO_REGISTER]; ! unsigned int min_color[FIRST_PSEUDO_REGISTER]; int newcol, c; HARD_REG_SET precolored_neighbors, spill_temps; HARD_REG_SET possible_begin, wide_seen; ! ! memset (cost_neighbors, 0, sizeof (cost_neighbors)); /* For each hard-regs count the number of preceding hardregs, which would overlap this color, if used in WEB's mode. */ ! memset (min_color, 0, sizeof (min_color)); CLEAR_HARD_REG_SET (possible_begin); for (c = 0; c < FIRST_PSEUDO_REGISTER; c++) { *************** try_recolor_web (web) *** 1930,1937 **** } free (old_colors); } - free (min_color); - free (cost_neighbors); } /* This ensures that all conflicts of coalesced webs are seen from --- 1951,1956 ---- *************** insert_coalesced_conflicts () *** 1977,1983 **** &wl->t->usable_regs)) { /*abort ();*/ ! fprintf (stderr, "SHIT. Lost a conflict.\n"); ra_debug_msg (DUMP_COLORIZE, "Lost conflict %d - %d\n", tweb->id, wl->t->id); if (wl->sub == NULL) --- 1996,2003 ---- &wl->t->usable_regs)) { /*abort ();*/ ! fprintf (stderr, "SHIT. Lost a conflict in %s\n", ! cfun->name); ra_debug_msg (DUMP_COLORIZE, "Lost conflict %d - %d\n", tweb->id, wl->t->id); if (wl->sub == NULL) *************** recolor_spills () *** 2041,2053 **** if (web->type == SPILLED) try_recolor_web (web); } /* It might have been decided in try_recolor_web() (in colorize_one_web()) that a coalesced web should be spilled, so it was put on the select stack. Those webs need recoloring again, and all remaining coalesced webs might need their color updated, so simply call assign_colors() again. */ assign_colors (); - free (order2web); } /* This checks the current color assignment for obvious errors, --- 2061,2073 ---- if (web->type == SPILLED) try_recolor_web (web); } + free (order2web); /* It might have been decided in try_recolor_web() (in colorize_one_web()) that a coalesced web should be spilled, so it was put on the select stack. Those webs need recoloring again, and all remaining coalesced webs might need their color updated, so simply call assign_colors() again. */ assign_colors (); } /* This checks the current color assignment for obvious errors, *************** restore_conflicts_from_coalesce (web) *** 2354,2360 **** the neighbor. */ struct conflict_link **opcl; struct conflict_link *owl; - struct sub_conflict *sl; wl = *pcl; *pcl = wl->next; if (!other->have_orig_conflicts && other->type != PRECOLORED) --- 2374,2379 ---- *************** ra_colorize_free_all () *** 2993,2998 **** --- 3012,3023 ---- struct web *wnext; web->orig_conflict_list = NULL; web->conflict_list = NULL; + if (web->defs) + free (web->defs); + if (web->uses) + free (web->uses); + if (web->useless_conflicts) + free (web->useless_conflicts); for (web = web->subreg_next; web; web = wnext) { wnext = web->subreg_next; Index: ra-debug.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra-debug.c,v retrieving revision 1.1.2.5 diff -c -3 -p -r1.1.2.5 ra-debug.c *** ra-debug.c 20 Nov 2002 22:43:08 -0000 1.1.2.5 --- ra-debug.c 7 Jan 2003 23:47:14 -0000 *************** ra_print_rtx_object (file, x) *** 276,282 **** fputs ("]", file); } else ! fprintf (file, "p%d", regno); break; } case SUBREG: --- 276,286 ---- fputs ("]", file); } else ! { ! fprintf (file, "p%d", regno); ! if (SPILL_SLOT_P (regno)) ! fprintf (file, "'"); ! } break; } case SUBREG: *************** ra_print_rtx (file, x, with_pn) *** 392,397 **** --- 396,403 ---- fprintf (file, " [%d uses] uid=(", LABEL_NUSES (x)); } fprintf (file, "%d", INSN_UID (x)); + if (bitmap_bit_p (emitted_by_spill, INSN_UID (x))) + fprintf (file, "`"); if (with_pn) fprintf (file, " %d %d", PREV_INSN (x) ? INSN_UID (PREV_INSN (x)) : 0, NEXT_INSN (x) ? INSN_UID (NEXT_INSN (x)) : 0); *************** dump_static_insn_cost (file, message, pr *** 938,944 **** struct cost store = {0, 0}; struct cost regcopy = {0, 0}; struct cost selfcopy = {0, 0}; ! struct cost overall = {0, 0}; basic_block bb; if (!file) --- 944,950 ---- struct cost store = {0, 0}; struct cost regcopy = {0, 0}; struct cost selfcopy = {0, 0}; ! struct cost overall = {0, 0}; basic_block bb; if (!file) *************** debug_web_conflicts (web) *** 1067,1072 **** --- 1073,1093 ---- web->id, web->regno, web->add_hardregs, reg_class_names[web->regclass], web->num_freedom, web->num_conflicts); + + if (web->num_aliased) + { + struct dlist *d; + fprintf (stderr, " Coalescing target for:"); + + for (d = WEBS(COALESCED); d; d = d->next) + { + struct web *a = alias (DLIST_WEB (d)); + if (a == web) + fprintf (stderr, " %d(%d)", DLIST_WEB (d)->id, + DLIST_WEB (d)->regno); + } + fprintf (stderr, "\n"); + } for (def2 = 0; def2 < num_webs; def2++) if (TEST_BIT (igraph, igraph_index (web->id, def2)) && web->id != def2) Index: ra.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra.h,v retrieving revision 1.1.2.6 diff -c -3 -p -r1.1.2.6 ra.h *** ra.h 20 Nov 2002 22:43:09 -0000 1.1.2.6 --- ra.h 7 Jan 2003 23:47:16 -0000 *************** *** 1,5 **** /* Graph coloring register allocator ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . --- 1,5 ---- /* Graph coloring register allocator ! Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . *************** extern void dump_web_conflicts PARAMS (( *** 619,624 **** --- 619,626 ---- extern void dump_web_insns PARAMS ((struct web*)); extern int web_conflicts_p PARAMS ((struct web *, struct web *)); extern void debug_hard_reg_set PARAMS ((HARD_REG_SET)); + extern void debug_web_insns PARAMS ((struct web *)); + extern void debug_web_conflicts PARAMS ((struct web *web)); extern int comp_webs_maxcost PARAMS ((const void *, const void *)); *************** extern struct web * alias PARAMS ((struc *** 634,640 **** extern void merge_moves PARAMS ((struct web *, struct web *)); extern void ra_colorize_graph PARAMS ((struct df *)); ! extern void actual_spill PARAMS ((void)); extern void emit_colors PARAMS ((struct df *)); extern void delete_moves PARAMS ((void)); extern void setup_renumber PARAMS ((int)); --- 636,642 ---- extern void merge_moves PARAMS ((struct web *, struct web *)); extern void ra_colorize_graph PARAMS ((struct df *)); ! extern void actual_spill PARAMS ((int)); extern void emit_colors PARAMS ((struct df *)); extern void delete_moves PARAMS ((void)); extern void setup_renumber PARAMS ((int)); *************** extern void remove_suspicious_death_note *** 642,648 **** extern int is_partly_dead PARAMS ((sbitmap, struct web *)); extern void set_web_live PARAMS ((sbitmap, struct web *)); extern void reset_web_live PARAMS ((sbitmap, struct web *)); ! extern enum reg_class web_preferred_class PARAMS ((struct web *)); ! extern void web_class PARAMS ((void)); #define SPILL_SLOT_P(REGNO) bitmap_bit_p (spill_slot_regs, (REGNO)) --- 644,652 ---- extern int is_partly_dead PARAMS ((sbitmap, struct web *)); extern void set_web_live PARAMS ((sbitmap, struct web *)); extern void reset_web_live PARAMS ((sbitmap, struct web *)); ! extern int count_long_blocks PARAMS ((HARD_REG_SET, int)); ! extern void detect_web_parts_to_rebuild PARAMS ((void)); ! extern void web_class_spill_ref PARAMS ((struct web *, struct ref *)); ! extern int subst_to_stack_p PARAMS ((void)); #define SPILL_SLOT_P(REGNO) bitmap_bit_p (spill_slot_regs, (REGNO)) Index: ra-rewrite.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ra-rewrite.c,v retrieving revision 1.1.2.6 diff -c -3 -p -r1.1.2.6 ra-rewrite.c *** ra-rewrite.c 20 Nov 2002 22:43:07 -0000 1.1.2.6 --- ra-rewrite.c 7 Jan 2003 23:47:24 -0000 *************** *** 1,5 **** /* Graph coloring register allocator ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . --- 1,5 ---- /* Graph coloring register allocator ! Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Matz and Daniel Berlin . *************** *** 32,38 **** --- 32,40 ---- #include "expr.h" #include "output.h" #include "except.h" + #include "obstack.h" #include "ra.h" + #include "pre-reload.h" /* This file is part of the graph coloring register allocator, and contains the functions to change the insn stream. I.e. it adds *************** static void delete_overlapping_uses PARA *** 58,64 **** static int slot_member_p PARAMS ((struct rtx_list *, rtx)); static void insert_stores PARAMS ((bitmap)); static int spill_same_color_p PARAMS ((struct web *, struct web *)); ! static int is_partly_live_1 PARAMS ((sbitmap, struct web *)); static void update_spill_colors PARAMS ((HARD_REG_SET *, struct web *, int)); static int spill_is_free PARAMS ((HARD_REG_SET *, struct web *)); static void emit_loads PARAMS ((struct rewrite_info *, int, rtx)); --- 60,66 ---- static int slot_member_p PARAMS ((struct rtx_list *, rtx)); static void insert_stores PARAMS ((bitmap)); static int spill_same_color_p PARAMS ((struct web *, struct web *)); ! static unsigned int is_partly_live_1 PARAMS ((sbitmap, struct web *)); static void update_spill_colors PARAMS ((HARD_REG_SET *, struct web *, int)); static int spill_is_free PARAMS ((HARD_REG_SET *, struct web *)); static void emit_loads PARAMS ((struct rewrite_info *, int, rtx)); *************** static void reloads_to_loads PARAMS ((st *** 68,78 **** unsigned int, struct web **)); static void rewrite_program2 PARAMS ((bitmap)); static void mark_refs_for_checking PARAMS ((struct web *, bitmap)); ! static void detect_web_parts_to_rebuild PARAMS ((void)); static void delete_useless_defs PARAMS ((void)); static void detect_non_changed_webs PARAMS ((void)); static void reset_changed_flag PARAMS ((void)); bitmap last_changed_insns; /* For tracking some statistics, we count the number (and cost) --- 70,92 ---- unsigned int, struct web **)); static void rewrite_program2 PARAMS ((bitmap)); static void mark_refs_for_checking PARAMS ((struct web *, bitmap)); ! void detect_web_parts_to_rebuild PARAMS ((void)); static void delete_useless_defs PARAMS ((void)); static void detect_non_changed_webs PARAMS ((void)); static void reset_changed_flag PARAMS ((void)); + static void assign_stack_slots PARAMS ((void)); + static void assign_stack_slots_1 PARAMS ((void)); + static struct move * find_move PARAMS ((struct ref*)); + static void init_find_move PARAMS((void)); + static void mark_insn_refs_for_checking PARAMS ((struct ra_insn_info *, + sbitmap , bitmap)); + static int coalesce_spill_slot PARAMS ((struct web *, struct ref*, rtx)); + /* Raw array for quick mapping INSN_UID to structure of a move. */ + static struct move **insn2move; + + /* Bitmap used for tracking insns changed in spill pass. + Very similar to ra_modified_insns. */ bitmap last_changed_insns; /* For tracking some statistics, we count the number (and cost) *************** spill_coalescing (coalesce, spilled) *** 133,138 **** --- 147,158 ---- s->is_coalesced = 1; t->is_coalesced = 1; merge_moves (s, t); + + /* Now merge the usable_regs together. */ + s->use_my_regs = 1; + AND_HARD_REG_SET (s->usable_regs, t->usable_regs); + s->regclass = reg_class_subunion[s->regclass][t->regclass]; + for (wl = t->conflict_list; wl; wl = wl->next) { struct web *pweb = wl->t; *************** allocate_spill_web (web) *** 326,342 **** unsigned int total_size = MAX (inherent_size, 0); if (web->stack_slot) return; ! if (0) ! { ! slot = assign_stack_local (PSEUDO_REGNO_MODE (regno), total_size, ! inherent_size == total_size ? 0 : -1); ! RTX_UNCHANGING_P (slot) = RTX_UNCHANGING_P (regno_reg_rtx[regno]); ! set_mem_alias_set (slot, new_alias_set ()); ! } ! else ! slot = gen_reg_rtx (PSEUDO_REGNO_MODE (regno)); ! web->stack_slot = slot; bitmap_set_bit (spill_slot_regs, REGNO (slot)); } /* This chooses a color for all SPILLED webs for interference region --- 346,368 ---- unsigned int total_size = MAX (inherent_size, 0); if (web->stack_slot) return; ! ! /* GO_IF_HARD_REG_EQUAL (usable_regs[GENERAL_REGS], web->usable_regs, */ ! /* alloc_slot); */ ! slot = gen_reg_rtx (PSEUDO_REGNO_MODE (regno)); bitmap_set_bit (spill_slot_regs, REGNO (slot)); + web->stack_slot = slot; + return; + /* If we trying to spill a web which needed in GENERAL_REGS then we don't + needed in remaining register. So, allocate the stack slot. */ + /* + alloc_slot: + slot = assign_stack_local (PSEUDO_REGNO_MODE (regno), total_size, + inherent_size == total_size ? 0 : -1); + RTX_UNCHANGING_P (slot) = RTX_UNCHANGING_P (regno_reg_rtx[regno]); + set_mem_alias_set (slot, new_alias_set ()); + web->stack_slot = slot; + */ } /* This chooses a color for all SPILLED webs for interference region *************** insert_stores (new_deaths) *** 746,754 **** if (uid < insn_df_max_uid) { unsigned int n; ! struct ra_insn_info info = insn_df[uid]; rtx following = NEXT_INSN (insn); basic_block bb = BLOCK_FOR_INSN (insn); for (n = 0; n < info.num_defs; n++) { struct web *web = def2web[DF_REF_ID (info.defs[n])]; --- 772,781 ---- if (uid < insn_df_max_uid) { unsigned int n; ! struct ra_insn_info info; rtx following = NEXT_INSN (insn); basic_block bb = BLOCK_FOR_INSN (insn); + info = insn_df[uid]; for (n = 0; n < info.num_defs; n++) { struct web *web = def2web[DF_REF_ID (info.defs[n])]; *************** insert_stores (new_deaths) *** 774,789 **** && ! slot_member_p (slots, slot)) { rtx insns, ni; last_slot = slot; remember_slot (&slots, slot); ! if (DF_REF_FLAGS (info.defs[n]) & DF_REF_MEM_OK ! && validate_change (insn, DF_REF_LOC (info.defs[n]), ! slot, 0)) { df_insn_modify (df, bb, insn); bitmap_set_bit (last_changed_insns, uid); ! if (!bitmap_bit_p (useless_defs, DF_REF_ID ! (info.defs[n]))) ra_emit_move_insn (source, slot); } else --- 801,819 ---- && ! slot_member_p (slots, slot)) { rtx insns, ni; + rtx spill; + int has_use; last_slot = slot; remember_slot (&slots, slot); ! if ((GET_CODE (slot) == MEM) ! && ra_validate_change (insn, DF_REF_LOC (info.defs[n]), ! slot, 0)) { df_insn_modify (df, bb, insn); + bitmap_set_bit (ra_modified_insns, uid); bitmap_set_bit (last_changed_insns, uid); ! if (!bitmap_bit_p (useless_defs, ! DF_REF_ID (info.defs[n]))) ra_emit_move_insn (source, slot); } else *************** insert_stores (new_deaths) *** 810,817 **** } emitted_spill_stores++; spill_store_cost += bb->frequency + 1; ! bitmap_set_bit (new_deaths, ! INSN_UID (PREV_INSN (following))); } else { --- 840,868 ---- } emitted_spill_stores++; spill_store_cost += bb->frequency + 1; ! /* Check all uses in insns generated by spill phase in ! previous passes. */ ! spill = following; ! has_use = 0; ! for (spill = following; ! (spill && !has_use ! && bitmap_bit_p (emitted_by_spill, ! INSN_UID (spill))); ! spill = NEXT_INSN (spill)) ! { ! unsigned int i; ! for (i = 0; i < web->num_uses; ++i) ! { ! if (DF_REF_INSN (web->uses[i]) == spill) ! { ! has_use = 1; ! break; ! } ! } ! } ! if (!has_use) ! bitmap_set_bit (new_deaths, ! INSN_UID (PREV_INSN (following))); } else { *************** insert_stores (new_deaths) *** 824,830 **** the last emitted slot, and additionally clear all slots overlapping it's source (after all, we need it again). */ /* XXX If we emit the stack-ref directly into the using insn the ! following needs a change, because that is no new insn. Preferably we would add some notes to the insn, what stackslots are needed for it. */ if (uid >= last_max_uid --- 875,881 ---- the last emitted slot, and additionally clear all slots overlapping it's source (after all, we need it again). */ /* XXX If we emit the stack-ref directly into the using insn the ! following needs a change, because that is no new insn. Preferably we would add some notes to the insn, what stackslots are needed for it. */ if (uid >= last_max_uid *************** insert_stores (new_deaths) *** 842,850 **** rtx d = SET_DEST (set); note_uses (&set, delete_overlapping_uses, (void *)&slots); /*if (1 || GET_CODE (SET_SRC (set)) == MEM) ! delete_overlapping_slots (&slots, SET_SRC (set));*/ /*if (REG_P (d) || GET_CODE (d) == MEM ! || (GET_CODE (d) == SUBREG && REG_P (SUBREG_REG (d)))) remember_slot (&slots, d);*/ } } --- 893,901 ---- rtx d = SET_DEST (set); note_uses (&set, delete_overlapping_uses, (void *)&slots); /*if (1 || GET_CODE (SET_SRC (set)) == MEM) ! delete_overlapping_slots (&slots, SET_SRC (set));*/ /*if (REG_P (d) || GET_CODE (d) == MEM ! || (GET_CODE (d) == SUBREG && REG_P (SUBREG_REG (d)))) remember_slot (&slots, d);*/ } } *************** spill_same_color_p (web1, web2) *** 876,882 **** /* Given the set of live web IDs LIVE, returns nonzero, if any of WEBs subwebs (or WEB itself) is live. */ ! static int is_partly_live_1 (live, web) sbitmap live; struct web *web; --- 927,933 ---- /* Given the set of live web IDs LIVE, returns nonzero, if any of WEBs subwebs (or WEB itself) is live. */ ! static unsigned int is_partly_live_1 (live, web) sbitmap live; struct web *web; *************** emit_loads (ri, nl_first_reload, last_bl *** 1053,1064 **** slot = simplify_gen_subreg (GET_MODE (reg), slot, innermode, SUBREG_BYTE (reg)); if (web->one_load && web->last_use_insn ! && DF_REF_FLAGS (web->last_use) & DF_REF_MEM_OK ! && validate_change (web->last_use_insn, DF_REF_LOC (web->last_use), ! slot, 0)) { bb = BLOCK_FOR_INSN (web->last_use_insn); df_insn_modify (df, bb, web->last_use_insn); bitmap_set_bit (last_changed_insns, INSN_UID (web->last_use_insn)); } else --- 1104,1116 ---- slot = simplify_gen_subreg (GET_MODE (reg), slot, innermode, SUBREG_BYTE (reg)); if (web->one_load && web->last_use_insn ! && (GET_CODE (slot) == MEM || supweb->pattern) ! && ra_validate_change (web->last_use_insn, ! DF_REF_LOC (web->last_use), slot, 0)) { bb = BLOCK_FOR_INSN (web->last_use_insn); df_insn_modify (df, bb, web->last_use_insn); + bitmap_set_bit (ra_modified_insns, INSN_UID (web->last_use_insn)); bitmap_set_bit (last_changed_insns, INSN_UID (web->last_use_insn)); } else *************** rewrite_program2 (new_deaths) *** 1734,1739 **** --- 1786,1826 ---- BITMAP_XFREE (ri.need_reload); } + /* Mark all webs mentioned in insn described by INFO for checking in + the next allocator pass. + Layout of webs isn't changed they are only mentioned in changed + insns. */ + static void + mark_insn_refs_for_checking (info, already_webs, uses_as_bitmap) + struct ra_insn_info *info; + sbitmap already_webs; + bitmap uses_as_bitmap; + { + int i, n; + int num_refs; + struct ref **refs; + + for (i = 0, refs = info->uses, num_refs = info->num_uses; + i < 2; + i++, refs = info->defs, num_refs = info->num_defs) + for (n = 0; n < num_refs; n++) + { + struct web *web; + int id = DF_REF_ID (refs[n]); + + /* Insn may be deleted by coalesce_spill_slot. */ + if (!INSN_P (DF_REF_INSN (refs[n]))) + return; + + web = DF_REF_REG_USE_P (refs[n]) ? use2web[id]: def2web[id]; + if (TEST_BIT (already_webs, web->id) || web->type == SPILLED) + continue; + SET_BIT (already_webs, web->id); + mark_refs_for_checking (web, uses_as_bitmap); + } + } + + /* WEBS is a web conflicting with a spilled one. Prepare it to be able to rescan it in the next pass. Mark all it's uses for checking, and clear the some members of their web parts *************** mark_refs_for_checking (web, uses_as_bit *** 1751,1757 **** { unsigned int id = DF_REF_ID (web->uses[i]); SET_BIT (last_check_uses, id); ! bitmap_set_bit (uses_as_bitmap, id); web_parts[df->def_id + id].spanned_deaths = 0; web_parts[df->def_id + id].crosses_call = 0; web_parts[df->def_id + id].crosses_bb = 0; --- 1838,1845 ---- { unsigned int id = DF_REF_ID (web->uses[i]); SET_BIT (last_check_uses, id); ! if (uses_as_bitmap) ! bitmap_set_bit (uses_as_bitmap, id); web_parts[df->def_id + id].spanned_deaths = 0; web_parts[df->def_id + id].crosses_call = 0; web_parts[df->def_id + id].crosses_bb = 0; *************** mark_refs_for_checking (web, uses_as_bit *** 1771,1781 **** rechecking, look at their neighbors, and clean up some global information, we will rebuild. */ ! static void detect_web_parts_to_rebuild () { bitmap uses_as_bitmap; unsigned int i, pass; struct dlist *d; sbitmap already_webs = sbitmap_alloc (num_webs); --- 1859,1870 ---- rechecking, look at their neighbors, and clean up some global information, we will rebuild. */ ! void detect_web_parts_to_rebuild () { bitmap uses_as_bitmap; unsigned int i, pass; + int uid; struct dlist *d; sbitmap already_webs = sbitmap_alloc (num_webs); *************** detect_web_parts_to_rebuild () *** 1849,1856 **** --- 1938,1953 ---- SET_BIT (already_webs, web2->id); mark_refs_for_checking (web2, uses_as_bitmap); }); + } + EXECUTE_IF_SET_IN_BITMAP (last_changed_insns, 0, uid, + { + if (uid < insn_df_max_uid) + mark_insn_refs_for_checking (&insn_df[uid], already_webs, + uses_as_bitmap); + }); + /* We also recheck unconditionally all uses of any hardregs. This means we _can_ delete all these uses from the live_at_end[] bitmaps. And because we sometimes delete insn refering to hardregs (when *************** reset_changed_flag () *** 1956,1971 **** DLIST_WEB(d)->changed = 0; } /* The toplevel function for this file. Given a colorized graph, and lists of spilled, coalesced and colored webs, we add some spill code. This also sets up the structures for incrementally building the interference graph in the next pass. */ void ! actual_spill () { int i; ! bitmap new_deaths = BITMAP_XMALLOC (); if (last_changed_insns) BITMAP_XFREE (last_changed_insns); last_changed_insns = BITMAP_XMALLOC (); --- 2053,2099 ---- DLIST_WEB(d)->changed = 0; } + /* Check all colored webs to detect ones colored by an_unusable_color. + These webs are spill temporaries and must be substituted by stack slots. + IMHO(denisc@overta.ru): This check must be supported in different + manner. */ + int + subst_to_stack_p () + { + struct dlist *d; + for (d = WEBS(COLORED); d; d = d->next) + { + struct web *web = DLIST_WEB (d); + if (web->color == an_unusable_color) + return 1; + } + return 0; + } + /* The toplevel function for this file. Given a colorized graph, and lists of spilled, coalesced and colored webs, we add some spill code. This also sets up the structures for incrementally building the interference graph in the next pass. */ void ! actual_spill (spill_p) ! int spill_p ATTRIBUTE_UNUSED; { int i; ! bitmap new_deaths; ! ! /* If we have a webs colored by an_unusable_color (ie we think that they are ! already in frame) we must put such webs to frame. */ ! if (/* !spill_p && */ subst_to_stack_p ()) ! /* If you uncomment the SPILL_P usage then you will have a calls to ! assign_stack_slots only at end of allocation process. ! See to the caller of actual_spill. */ ! { ! assign_stack_slots (); ! return; ! } ! ! new_deaths = BITMAP_XMALLOC (); if (last_changed_insns) BITMAP_XFREE (last_changed_insns); last_changed_insns = BITMAP_XMALLOC (); *************** actual_spill () *** 1991,1996 **** --- 2119,2489 ---- BITMAP_XFREE (new_deaths); } + /* Allocate and assign stack slots to all webs colored by + an_unusable_color. + Replace all uses and defs to stack slots in all possible cases. */ + + static void + assign_stack_slots () + { + int i; + struct dlist *d, *d_next; + + if (last_changed_insns) + BITMAP_XFREE (last_changed_insns); + last_changed_insns = BITMAP_XMALLOC (); + + /* Cleanup SPILLED list. I hope to colorize all these webs in next pass + after substitution webs colored by an_unusable_color to stack slots. */ + for (d = WEBS(SPILLED); d; d = d_next) + { + struct web *web = DLIST_WEB (d); + d_next = d->next; + remove_list (web->dlink, &WEBS(SPILLED)); + put_web (web, INITIAL); + } + + /* Allocate slots in stack frame and modify all insns which use slots. */ + assign_stack_slots_1 (); + + if (death_insns_max_uid < get_max_uid ()) + { + sbitmap old_deaths = insns_with_deaths; + insns_with_deaths = sbitmap_alloc (get_max_uid ()); + sbitmap_zero (insns_with_deaths); + EXECUTE_IF_SET_IN_SBITMAP (old_deaths, 0, i, + { SET_BIT (insns_with_deaths, i);}); + sbitmap_free (old_deaths); + } + death_insns_max_uid = get_max_uid (); + detect_web_parts_to_rebuild (); + } + + /* Setup insn2move array. */ + static void + init_find_move () + { + struct move_list *ml; + struct move *m; + for (ml = wl_moves; ml; ml = ml->next) + if ((m = ml->move) != NULL + && bitmap_bit_p (emitted_by_spill, INSN_UID (m->insn))) + insn2move[INSN_UID (m->insn)] = m; + } + + /* Return a structure of a move if REF is a def or use of a move + else return NULL. + */ + static struct move * + find_move (ref) + struct ref *ref; + { + rtx insn = DF_REF_INSN (ref); + return insn2move[INSN_UID (insn)]; + } + + /* If the WEB connected with a small web referred by REF then substitute + all refs of a small web to stack slot PLACE. + Remove dead move insns. + This is the same as coalesce and substitute. */ + static int + coalesce_spill_slot (web, ref, place) + struct web *web; + struct ref *ref; + rtx place; + { + rtx source; + struct web *dweb; + struct web *s; + struct web *t; + struct move *m; + struct ref **refs; + int num_refs; + int i,j; + rtx back_move = NULL; + rtx insn, move_insn; + + m = find_move (ref); + if (!m || !INSN_P (m->insn)) + return 0; + + s = m->source_web; + t = m->target_web; + if (s == web) + dweb = t; + else if (t == web) + dweb = s; + else + return 0; + + if (TEST_BIT (sup_igraph, s->id * num_webs + t->id) + || TEST_BIT (sup_igraph, t->id * num_webs + s->id) + || s->pattern || t->pattern) + return 0; + + if (dweb->type != COLORED || !dweb->spill_temp || dweb->crosses_bb + || dweb->is_coalesced || dweb->color == an_unusable_color) + return 0; + + move_insn = m->insn; + + /* Replace all web refs to stack spill slot. */ + for (i = 0, refs = dweb->uses, num_refs = dweb->num_uses; + i < 2; + refs = dweb->defs, num_refs = dweb->num_defs, i++) + for (j = 0; j < num_refs; j++) + { + rtx target; + rtx insns; + struct move *back_m; + + insn = DF_REF_INSN (refs[j]); + if (insn == move_insn) + continue; + if (i == 0 /* Is this a use ? */ + && (back_m = find_move (refs[j])) != NULL + && back_m->target_web == web) + { + if (back_move) + abort (); + back_move = back_m->insn; + continue; + } + + target = DF_REF_REG (refs[j]); + + /* Happens when move was deleted before. */ + if (!INSN_P (insn)) + continue; + + source = place; + start_sequence (); + if (GET_CODE (target) == SUBREG) + source = simplify_gen_subreg (GET_MODE (target), place, + GET_MODE (place), + SUBREG_BYTE (target)); + insns = get_insns (); + end_sequence (); + if (insns) + { + ra_cancel_changes (0); + return 0; + } + ra_validate_change (insn, DF_REF_LOC (refs[j]), source, 1); + } + if (!ra_apply_change_group ()) + return 0; + + remove_list (dweb->dlink, &WEBS(COLORED)); + put_web (dweb, SPILLED); + PUT_CODE (move_insn, NOTE); + NOTE_LINE_NUMBER (move_insn) = NOTE_INSN_DELETED; + RESET_BIT (insns_with_deaths, INSN_UID (move_insn)); + deleted_move_insns++; + deleted_move_cost += BLOCK_FOR_INSN (move_insn)->frequency + 1; + + if (back_move) + { + PUT_CODE (back_move, NOTE); + NOTE_LINE_NUMBER (back_move) = NOTE_INSN_DELETED; + RESET_BIT (insns_with_deaths, INSN_UID (back_move)); + deleted_move_insns++; + deleted_move_cost += BLOCK_FOR_INSN (back_move)->frequency + 1; + } + /* Mark all changed insns. */ + for (i = 0, refs = dweb->uses, num_refs = dweb->num_uses; + i < 2; + refs = dweb->defs, num_refs = dweb->num_defs, i++) + for (j = 0; j < num_refs; j++) + { + insn = DF_REF_INSN (refs[j]); + df_insn_modify (df, BLOCK_FOR_INSN (insn), insn); + bitmap_set_bit (ra_modified_insns, INSN_UID (insn)); + if (insn != back_move && insn != move_insn) + bitmap_set_bit (last_changed_insns, INSN_UID (insn)); + } + return 1; + } + + /* Allocate and assign stack slots to all refs of spill slot web. + Replace spill slot web to stack slot in all insns. + This function also perform a simple elimination of dead insns. */ + + static void + assign_stack_slots_1 () + { + unsigned int j, i, n, webs_count; + struct ref **refs; + unsigned int num_refs; + + ra_debug_msg (DUMP_COLORIZE, "Allocate stack spill slots for webs:\n"); + + insn2move = (struct move **) xcalloc (get_max_uid (), + sizeof (struct move *)); + init_find_move (); + webs_count = num_webs - num_subwebs; + for (n = 0; n < webs_count; ++n) + { + unsigned int inherent_size; + unsigned int total_size; + rtx place; + struct web *web = id2web[n]; + + if (web->type != COLORED || web->color != an_unusable_color) + continue; + + if (web->stack_slot && !REG_P (web->stack_slot)) + abort (); + + /* Detect dead spilltemp webs and skip them. */ + if (web->num_uses == 0 && web->num_defs == 1) + { + rtx dead = DF_REF_INSN (web->defs[0]); + if (insn_df[INSN_UID (dead)].num_defs == 1 + && GET_CODE (dead) == INSN) + continue; + } + + inherent_size = PSEUDO_REGNO_BYTES (web->regno); + total_size = MAX (inherent_size, 0); + place = assign_stack_local (PSEUDO_REGNO_MODE (web->regno), + total_size, + inherent_size == total_size ? 0: -1); + RTX_UNCHANGING_P (place) = + RTX_UNCHANGING_P (regno_reg_rtx[web->regno]); + set_mem_alias_set (place, new_alias_set ()); + + ra_debug_msg (DUMP_COLORIZE, "\t%3d(%d) insns: ", + web->id, web->regno); + + web->stack_slot = place; + web->changed = 1; + + /* Replace all web refs to stack spill slot. */ + + for (i = 0, refs = web->uses, num_refs = web->num_uses; + i < 2; + refs = web->defs, num_refs = web->num_defs, i++) + for (j = 0; j < num_refs; j++) + { + rtx target, source; + rtx insns; + rtx insn = DF_REF_INSN (refs[j]); + rtx aux_insn = (i == 0 ? PREV_INSN (insn): NEXT_INSN (insn)); + basic_block bb = BLOCK_FOR_INSN (insn); + + /* Happens when spill_coalescing() deletes move insns. */ + if (!INSN_P (insn)) + continue; + + ra_debug_msg (DUMP_COLORIZE, " %d(%c%d)", INSN_UID (insn), + i == 0 ? 'u': 'd', + DF_REF_ID (refs[j])); + + /* Trying to substitute this use to corresponding web. */ + if (coalesce_spill_slot (web, refs[j], place)) + continue; + + target = DF_REF_REG (refs[j]); + source = place; + + start_sequence (); + if (GET_CODE (target) == SUBREG) + source = simplify_gen_subreg (GET_MODE (target), source, + GET_MODE (source), + SUBREG_BYTE (target)); + if (ra_validate_change (insn, DF_REF_LOC (refs[j]), source, 0)) + { + df_insn_modify (df, bb, insn); + bitmap_set_bit (ra_modified_insns, INSN_UID (insn)); + bitmap_set_bit (last_changed_insns, INSN_UID (insn)); + } + else + { + if (i == 0) /* Insn for use. */ + ra_emit_move_insn (copy_rtx (target), source); + else + ra_emit_move_insn (source, copy_rtx (target)); + } + insns = get_insns (); + end_sequence (); + if (insns && i == 0) /* Is this a use? */ + { + rtx pi; + emit_insn_before (insns, insn); + if (bb->head == insn) + bb->head = NEXT_INSN (aux_insn); + for (pi = PREV_INSN (insn); pi != aux_insn; + pi = PREV_INSN (pi)) + { + set_block_for_insn (pi, bb); + df_insn_modify (df, bb, pi); + bitmap_set_bit (ra_modified_insns, INSN_UID (pi)); + bitmap_set_bit (emitted_by_spill, INSN_UID (pi)); + } + } + else if (insns) + { + rtx ni; + emit_insn_after (insns, insn); + if (bb->end == insn) + bb->end = PREV_INSN (aux_insn); + for (ni = insns; ni != aux_insn; ni = NEXT_INSN (ni)) + { + set_block_for_insn (ni, bb); + df_insn_modify (df, bb, ni); + bitmap_set_bit (ra_modified_insns, INSN_UID (ni)); + bitmap_set_bit (emitted_by_spill, INSN_UID (ni)); + } + } + } + ra_debug_msg (DUMP_COLORIZE, "\n"); + remove_list (web->dlink, &WEBS(COLORED)); + put_web (web, SPILLED); + bitmap_clear_bit (spill_slot_regs, web->regno); + } + + ra_debug_msg (DUMP_COLORIZE, "\n"); + + /* A very simple dead insns elimination. */ + for (n = 0; n < webs_count; ++n) + { + struct web *web = id2web[n]; + + if (web->type == COLORED && web->num_uses == 0 && web->num_defs == 1) + { + unsigned int i; + rtx dead = DF_REF_INSN (web->defs[0]); + struct ra_insn_info *info = &insn_df[INSN_UID (dead)]; + + if (info->num_defs != 1 || GET_CODE (dead) != INSN) + continue; + for (i = 0; i < info->num_uses; ++i) + { + struct web *web1 + = find_web_for_subweb (use2web[DF_REF_ID (info->uses[i])]); + if (web1->type == COLORED) + { + remove_list (web1->dlink, &WEBS(COLORED)); + put_web (web1, SPILLED); + } + } + remove_list (web->dlink, &WEBS(COLORED)); + put_web (web, SPILLED); + PUT_CODE (dead, NOTE); + NOTE_LINE_NUMBER (dead) = NOTE_INSN_DELETED; + RESET_BIT (insns_with_deaths, INSN_UID (dead)); + df_insn_modify (df, BLOCK_FOR_INSN (dead), dead); + bitmap_set_bit (ra_modified_insns, INSN_UID (dead)); + /* This is not fully correct because not only a move insn can be + deleted. */ + deleted_move_insns++; + deleted_move_cost += BLOCK_FOR_INSN (dead)->frequency + 1; + } + } + free (insn2move); + } + /* A bitmap of pseudo reg numbers which are coalesced directly to a hardreg. Set in emit_colors(), used and freed in remove_suspicious_death_notes(). */ *************** emit_colors (df) *** 2038,2044 **** unsigned int total_size = MAX (inherent_size, 0); rtx place = assign_stack_local (PSEUDO_REGNO_MODE (web->regno), total_size, ! inherent_size == total_size ? 0 : -1); RTX_UNCHANGING_P (place) = RTX_UNCHANGING_P (regno_reg_rtx[web->regno]); set_mem_alias_set (place, new_alias_set ()); --- 2531,2537 ---- unsigned int total_size = MAX (inherent_size, 0); rtx place = assign_stack_local (PSEUDO_REGNO_MODE (web->regno), total_size, ! inherent_size == total_size ? 0: -1); RTX_UNCHANGING_P (place) = RTX_UNCHANGING_P (regno_reg_rtx[web->regno]); set_mem_alias_set (place, new_alias_set ()); *************** setup_renumber (free_it) *** 2279,2284 **** --- 2772,2903 ---- free (ra_reg_renumber); ra_reg_renumber = NULL; ra_max_regno = 0; + } + } + + + /* The WEB can't have a single color. The REF is a constraining ref. + The REF will be spilled out from the WEB. */ + void + web_class_spill_ref (web, ref) + struct web *web; + struct ref *ref; + { + rtx insns; + rtx insn = DF_REF_INSN (ref); + + if (DF_REF_REG_USE_P (ref)) + { + int num_refs; + int i, j; + rtx source, target; + struct ref **refs; + rtx reg = gen_reg_rtx (PSEUDO_REGNO_MODE (web->regno)); + rtx def_rtx = NULL; + basic_block bb = BLOCK_FOR_INSN (insn); + + for (i = 0, refs = web->uses, num_refs = web->num_uses; + i < 2; + refs = web->defs, num_refs = web->num_defs, i++) + for (j = 0; j < num_refs; j++) + { + if (DF_REF_INSN (refs[j]) != insn) + continue; + + target = DF_REF_REG (refs[j]); + source = reg; + + if (GET_CODE (target) == SUBREG) + source = simplify_gen_subreg (GET_MODE (target), source, + GET_MODE (source), + SUBREG_BYTE (target)); + ra_validate_change (insn, DF_REF_LOC (refs[j]), source, 1); + if (i == 1) /* This is a def. */ + { + if (def_rtx) + abort (); + def_rtx = source; + } + } + if (!ra_apply_change_group ()) + abort (); + + df_insn_modify (df, bb, insn); + bitmap_set_bit (ra_modified_insns, INSN_UID (insn)); + + start_sequence (); + ra_emit_move_insn (reg, DF_REF_REG (ref)); + insns = get_insns (); + end_sequence (); + if (insns) + { + rtx pi; + rtx aux_insn = PREV_INSN (insn); + emit_insn_before (insns, insn); + if (bb->head == insn) + bb->head = NEXT_INSN (aux_insn); + for (pi = PREV_INSN (insn); pi != aux_insn; + pi = PREV_INSN (pi)) + { + set_block_for_insn (pi, bb); + df_insn_modify (df, bb, pi); + bitmap_set_bit (ra_modified_insns, INSN_UID (pi)); + } + } + + if (def_rtx) + { + start_sequence (); + ra_emit_move_insn (DF_REF_REG (ref), copy_rtx (def_rtx)); + insns = get_insns (); + end_sequence (); + if (insns) + { + rtx ni; + rtx aux_insn = NEXT_INSN (insn); + emit_insn_after (insns, insn); + if (bb->end == insn) + bb->end = PREV_INSN (aux_insn); + for (ni = insns; ni != aux_insn; ni = NEXT_INSN (ni)) + { + set_block_for_insn (ni, bb); + df_insn_modify (df, bb, ni); + bitmap_set_bit (ra_modified_insns, INSN_UID (ni)); + } + } + } + } + else if (DF_REF_REG_DEF_P (ref)) + { + rtx aux_insn = NEXT_INSN (insn); + rtx reg = gen_reg_rtx (GET_MODE (DF_REF_REG (ref))); + basic_block bb = BLOCK_FOR_INSN (insn); + + if (ra_validate_change (insn, DF_REF_LOC (ref), reg, 0)) + { + df_insn_modify (df, bb, insn); + bitmap_set_bit (ra_modified_insns, INSN_UID (insn)); + } + else + abort (); + + start_sequence (); + ra_emit_move_insn (DF_REF_REG (ref), reg); + insns = get_insns (); + end_sequence (); + if (insns) + { + rtx ni; + emit_insn_after (insns, insn); + if (bb->end == insn) + bb->end = PREV_INSN (aux_insn); + for (ni = insns; ni != aux_insn; ni = NEXT_INSN (ni)) + { + set_block_for_insn (ni, bb); + df_insn_modify (df, bb, ni); + bitmap_set_bit (ra_modified_insns, INSN_UID (ni)); + } + } } } Index: pre-reload.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/pre-reload.c,v retrieving revision 1.1.2.12 diff -c -3 -p -r1.1.2.12 pre-reload.c *** pre-reload.c 20 Nov 2002 22:43:08 -0000 1.1.2.12 --- pre-reload.c 7 Jan 2003 23:47:33 -0000 *************** *** 1,5 **** /* Search an insn for pseudo regs that must be in reg_class and are not. ! Copyright (C) 2002 Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of GNU CC. --- 1,5 ---- /* Search an insn for pseudo regs that must be in reg_class and are not. ! Copyright (C) 2002, 2003 Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of GNU CC. *************** static void ra_info_remove_refs PARAMS *** 105,111 **** static int df_link2ra_link PARAMS ((struct df2ra, rtx, struct df_link *, struct ra_link *)); - static const char *const reg_class_names[] = REG_CLASS_NAMES; static int indirect_levels = -1; --- 105,110 ---- *************** gen_pre_reload (out, in, opnum, type, cl *** 141,147 **** enum reg_class class; { rtx last = get_last_insn (); - rtx tem; /* If IN is a paradoxical SUBREG, remove it and try to put the opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */ --- 140,145 ---- *************** pre_operands_match_p (x, y) *** 2107,2112 **** --- 2105,2772 ---- return operands_match_p (x, y); } + + struct alternative_info + { + int class; /* this_alternative */ + char match_win; /* this_alternative_match_win */ + char win; /* this_alternative_win */ + char offmemok; /* this_alternative_offmemok */ + char earlyclobber; /* this_alternative_earlyclobber */ + int matches; /* this_alternative_matches */ + int matched; /* goal_alternative_matched */ + rtx reg; /* this_alternative_reg */ + rtx *reg_loc; /* this_alternative_reg_loc */ + char *constraints; /* this_alternative_constraints */ + int address_operand; /* this_alternative_address_operand */ + }; + + enum reload_usage { RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE }; + static int scan_alternative PARAMS ((struct alternative_info [], char *[], + enum reload_usage [], int [], + char [MAX_RECOG_OPERANDS] + [MAX_RECOG_OPERANDS], + int, int *)); + + /* Scan one alternative and fill alternative info. */ + + static int + scan_alternative (this_alt, constraints, modified, address_reloaded, + operands_match, swapped, commut) + struct alternative_info this_alt[]; + char *constraints[]; + enum reload_usage modified[]; + int address_reloaded[]; + char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS]; + int swapped; + int *commut; + { + int i; + int j; + int noperands; + int losers = 0; + /* BAD is set to 1 if it some operand can't fit this alternative + even after reloading. */ + int bad = 0; + /* REJECT is a count of how undesirable this alternative says it is + if any reloading is required. If the alternative matches exactly + then REJECT is ignored, but otherwise it gets this much + counted against it in addition to the reloading needed. Each + ? counts three times here since we want the disparaging caused by + a bad register class to only count 1/3 as much. */ + int reject = 0; + enum machine_mode *operand_mode = recog_data.operand_mode; + int commutative = *commut; + + noperands = recog_data.n_operands; + + for (i = 0; i < noperands; i++) + { + struct alternative_info *op_alt = &this_alt[i]; + char *p = constraints[i]; + int win = 0; + int did_match = 0; + /* 0 => this operand can be reloaded somehow for this + alternative. */ + int badop = 1; + /* 0 => this operand can be reloaded if the alternative + allows regs. */ + int winreg = 0; + int c; + rtx operand = recog_data.operand[i]; + rtx *operand_loc = recog_data.operand_loc[i]; + int offset = 0; + /* Nonzero means this is a MEM that must be reloaded into a reg + regardless of what the constraint says. */ + int force_reload = 0; + int offmemok = 0; + /* Nonzero if a constant forced into memory would be OK for this + operand. */ + int constmemok = 0; + int earlyclobber = 0; + int match_seen = 0; + + /* If the predicate accepts a unary operator, it means that + we need to reload the operand, but do not do this for + match_operator and friends. */ + if (GET_RTX_CLASS (GET_CODE (operand)) == '1' && *p != 0) + { + operand = XEXP (operand, 0); + operand_loc = &XEXP (operand, 0); + } + + /* If the operand is a SUBREG, extract + the REG or MEM (or maybe even a constant) within. + (Constants can occur as a result of reg_equiv_constant.) */ + + while (GET_CODE (operand) == SUBREG) + { + /* Offset only matters when operand is a REG and + it is a hard reg. This is because it is passed + to reg_fits_class_p if it is a REG and all pseudos + return 0 from that function. */ + if (REG_P (SUBREG_REG (operand)) + && REGNO (SUBREG_REG (operand)) < FIRST_PSEUDO_REGISTER) + { + offset += + subreg_regno_offset (REGNO (SUBREG_REG (operand)), + GET_MODE (SUBREG_REG (operand)), + SUBREG_BYTE (operand), + GET_MODE (operand)); + } + operand = SUBREG_REG (operand); + operand_loc = &SUBREG_REG (operand); + /* Force reload if this is a constant or PLUS or if there may + be a problem accessing OPERAND in the outer mode. */ + if (CONSTANT_P (operand) + || GET_CODE (operand) == PLUS + /* We must force a reload of paradoxical SUBREGs + of a MEM because the alignment of the inner value + may not be enough to do the outer reference. On + big-endian machines, it may also reference outside + the object. + + On machines that extend byte operations and we have a + SUBREG where both the inner and outer modes are no wider + than a word and the inner mode is narrower, is integral, + and gets extended when loaded from memory, combine.c has + made assumptions about the behavior of the machine in such + register access. If the data is, in fact, in memory we + must always load using the size assumed to be in the + register and let the insn do the different-sized + accesses. + + This is doubly true if WORD_REGISTER_OPERATIONS. In + this case eliminate_regs has left non-paradoxical + subregs for push_reloads to see. Make sure it does + by forcing the reload. + + ??? When is it right at this stage to have a subreg + of a mem that is _not_ to be handled specialy? IMO + those should have been reduced to just a mem. */ + || ((GET_CODE (operand) == MEM + || (0 + && REG_P (operand) + && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) + #ifndef WORD_REGISTER_OPERATIONS + && (((GET_MODE_BITSIZE (GET_MODE (operand)) + < BIGGEST_ALIGNMENT) + && (GET_MODE_SIZE (operand_mode[i]) + > GET_MODE_SIZE (GET_MODE (operand)))) + || (GET_CODE (operand) == MEM && BYTES_BIG_ENDIAN) + #ifdef LOAD_EXTEND_OP + || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD + && (GET_MODE_SIZE (GET_MODE (operand)) + <= UNITS_PER_WORD) + && (GET_MODE_SIZE (operand_mode[i]) + > GET_MODE_SIZE (GET_MODE (operand))) + && INTEGRAL_MODE_P (GET_MODE (operand)) + && LOAD_EXTEND_OP (GET_MODE (operand)) != NIL) + #endif + ) + #endif + ) + ) + force_reload = 1; + } + + op_alt->class = (int) NO_REGS; + op_alt->win = 0; + op_alt->match_win = 0; + op_alt->offmemok = 0; + op_alt->earlyclobber = 0; + op_alt->matches = -1; + op_alt->reg = NULL_RTX; + op_alt->reg_loc = NULL; + op_alt->constraints = p; + op_alt->address_operand = 0; + + /* An empty constraint or empty alternative + allows anything which matched the pattern. */ + if (*p == 0 || *p == ',') + { + win = 1, badop = 0; + if (REG_P (operand)) + { + op_alt->reg = operand; + op_alt->reg_loc = operand_loc; + op_alt->class = GENERAL_REGS; + } + } + + /* Scan this alternative's specs for this operand; + set WIN if the operand fits any letter in this alternative. + Otherwise, clear BADOP if this operand could + fit some letter after reloads, + or set WINREG if this operand could fit after reloads + provided the constraint allows some registers. */ + + match_seen = 0; + while (*p && (c = *p++) != ',') + switch (c) + { + case '=': case '+': + break; + + case '*': + reject += 4; + break; + + case '%': + /* The last operand should not be marked commutative. */ + if (i != noperands - 1) + *commut = commutative = i; + break; + + case '?': + reject += 6; + break; + + case '!': + reject = 600; + break; + + case '#': + /* Ignore rest of this alternative as far as + reloading is concerned. */ + if (match_seen) + while (*p && *p != ',') + p++; + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + struct alternative_info *mop_alt; + match_seen = 1; + c -= '0'; + op_alt->matches = c; + mop_alt = &this_alt[c]; + /* We are supposed to match a previous operand. + If we do, we win if that one did. + If we do not, count both of the operands as losers. + (This is too conservative, since most of the time + only a single reload insn will be needed to make + the two operands win. As a result, this alternative + may be rejected when it is actually desirable.) */ + if ((swapped && (c != commutative || i != commutative + 1)) + /* If we are matching as if two operands were swapped, + also pretend that operands_match had been computed + with swapped. + But if I is the second of those and C is the first, + don't exchange them, because operands_match is valid + only on one side of its diagonal. */ + ? (operands_match + [(c == commutative || c == commutative + 1) + ? 2 * commutative + 1 - c : c] + [(i == commutative || i == commutative + 1) + ? 2 * commutative + 1 - i : i]) + : operands_match[c][i]) + { + /* If we are matching a non-offsettable address where an + offsettable address was expected, then we must reject + this combination, because we can't reload it. */ + if (mop_alt->offmemok + && GET_CODE (recog_data.operand[c]) == MEM + && mop_alt->class == (int) NO_REGS + && ! mop_alt->win) + bad = 1; + + did_match = mop_alt->win; + } + else + { + /* Retroactively mark the operand we had to match + as a loser, if it wasn't already. */ + if (mop_alt->win) + losers++; + mop_alt->win = 0; + if (mop_alt->class == (int) NO_REGS) + bad = 1; + } + /* This can be fixed with reloads if the operand + we are supposed to match can be fixed with reloads. */ + badop = 0; + op_alt->class = mop_alt->class; + + /* If we have to reload this operand and some previous + operand also had to match the same thing as this + operand, we don't know how to do that. So reject this + alternative. */ + if (! did_match || force_reload) + for (j = 0; j < i; j++) + if (this_alt[j].matches + == op_alt->matches) + badop = 1; + + if (REG_P (operand)) + { + op_alt->reg = operand; + op_alt->reg_loc = operand_loc; + } + } + break; + + case 'p': + /* All necessary reloads for an address_operand + were handled in find_reloads_address. */ + op_alt->class = (int) BASE_REG_CLASS; + op_alt->address_operand = 1; + win = 1; + break; + + case 'm': + if (force_reload) + break; + if (GET_CODE (operand) == MEM) + win = 1; + /* force_const_mem does not accept HIGH. */ + if (CONSTANT_P (operand) + && GET_CODE (operand) != HIGH) + badop = 0; + constmemok = 1; + break; + + case '<': + if (GET_CODE (operand) == MEM + && ! address_reloaded[i] + && (GET_CODE (XEXP (operand, 0)) == PRE_DEC + || GET_CODE (XEXP (operand, 0)) == POST_DEC)) + win = 1; + break; + + case '>': + if (GET_CODE (operand) == MEM + && ! address_reloaded[i] + && (GET_CODE (XEXP (operand, 0)) == PRE_INC + || GET_CODE (XEXP (operand, 0)) == POST_INC)) + win = 1; + break; + + /* Memory operand whose address is not offsettable. */ + case 'V': + if (force_reload) + break; + if (GET_CODE (operand) == MEM + && ! offsettable_nonstrict_memref_p (operand)) + win = 1; + break; + + /* Memory operand whose address is offsettable. */ + case 'o': + if (force_reload) + break; + if (GET_CODE (operand) == MEM + /* If IND_LEVELS, find_reloads_address won't reload a + pseudo that didn't get a hard reg, so we have to + reject that case. */ + && (offsettable_nonstrict_memref_p (operand) + /* A reloaded address is offsettable because it is now + just a simple register indirect. */ + || address_reloaded[i])) + win = 1; + /* force_const_mem does not accept HIGH. */ + if ((CONSTANT_P (operand) && GET_CODE (operand) != HIGH) + || GET_CODE (operand) == MEM) + badop = 0; + constmemok = 1; + offmemok = 1; + break; + + case '&': + /* Output operand that is stored before the need for the + input operands (and their index registers) is over. */ + earlyclobber = 1; + break; + + case 'E': + #ifndef REAL_ARITHMETIC + /* Match any floating double constant, but only if + we can examine the bits of it reliably. */ + if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT + || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD) + && GET_MODE (operand) != VOIDmode && ! flag_pretend_float) + break; + #endif + if (GET_CODE (operand) == CONST_DOUBLE) + win = 1; + break; + + case 'F': + if (GET_CODE (operand) == CONST_DOUBLE) + win = 1; + break; + + case 'G': + case 'H': + if (GET_CODE (operand) == CONST_DOUBLE + && CONST_DOUBLE_OK_FOR_LETTER_P (operand, c)) + win = 1; + break; + + case 's': + if (GET_CODE (operand) == CONST_INT + || (GET_CODE (operand) == CONST_DOUBLE + && GET_MODE (operand) == VOIDmode)) + break; + case 'i': + if (CONSTANT_P (operand) + #ifdef LEGITIMATE_PIC_OPERAND_P + && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand)) + #endif + ) + win = 1; + break; + + case 'n': + if (GET_CODE (operand) == CONST_INT + || (GET_CODE (operand) == CONST_DOUBLE + && GET_MODE (operand) == VOIDmode)) + win = 1; + break; + + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + if (GET_CODE (operand) == CONST_INT + && CONST_OK_FOR_LETTER_P (INTVAL (operand), c)) + win = 1; + break; + + case 'X': + win = 1; + break; + + case 'g': + if (! force_reload + /* A PLUS is never a valid operand, but reload can make + it from a register when eliminating registers. */ + && GET_CODE (operand) != PLUS + /* A SCRATCH is not a valid operand. */ + && GET_CODE (operand) != SCRATCH + #ifdef LEGITIMATE_PIC_OPERAND_P + && (! CONSTANT_P (operand) + || ! flag_pic + || LEGITIMATE_PIC_OPERAND_P (operand)) + #endif + && GENERAL_REGS == ALL_REGS) + win = 1; + /* Drop through into 'r' case. */ + + case 'r': + op_alt->class = (int) (reg_class_subunion + [op_alt->class] + [(int) GENERAL_REGS]); + goto reg; + + default: + if (REG_CLASS_FROM_LETTER (c) == NO_REGS) + { + #ifdef EXTRA_CONSTRAINT + if (EXTRA_CONSTRAINT (operand, c)) + win = 1; + #endif + break; + } + /* FIXME: denisc@overta.ru Better to use union of contents + of classes. */ + op_alt->class + = (int) (reg_class_subunion + [op_alt->class] + [(int) REG_CLASS_FROM_LETTER (c)]); + reg: + if (GET_MODE (operand) == BLKmode) + break; + winreg = 1; + if (REG_P (operand)) + { + op_alt->reg_loc = operand_loc; + op_alt->reg = operand; + if (REGNO (operand) >= FIRST_PSEUDO_REGISTER) + win = pseudo_fits_class_p (operand, op_alt->class, + GET_MODE (operand)) ; + else if (reg_fits_class_p (operand, op_alt->class, + offset, GET_MODE (operand))) + win = 1; + } + break; + } + + constraints[i] = p; + + /* If this operand could be handled with a reg, + and some reg is allowed, then this operand can be handled. */ + if (winreg && op_alt->class != (int) NO_REGS) + badop = 0; + + /* Record which operands fit this alternative. */ + op_alt->earlyclobber = earlyclobber; + if (win && ! force_reload) + op_alt->win = 1; + else if (did_match && ! force_reload) + op_alt->match_win = 1; + else + { + int const_to_mem = 0; + + op_alt->offmemok = offmemok; + losers++; + if (badop) + bad = 1; + /* Alternative loses if it has no regs for a reg operand. */ + if (REG_P (operand) + && op_alt->class == (int) NO_REGS + && op_alt->matches < 0) + bad = 1; + + /* If this is a constant that is reloaded into the desired + class by copying it to memory first, count that as another + reload. This is consistent with other code and is + required to avoid choosing another alternative when + the constant is moved into memory by this function on + an early reload pass. Note that the test here is + precisely the same as in the code below that calls + force_const_mem. */ + if (CONSTANT_P (operand) + /* force_const_mem does not accept HIGH. */ + && GET_CODE (operand) != HIGH + && (PREFERRED_RELOAD_CLASS (operand, + (enum reg_class) op_alt->class) + == NO_REGS) + && operand_mode[i] != VOIDmode) + { + const_to_mem = 1; + if (op_alt->class != (int) NO_REGS) + losers++; + } + + /* If we can't reload this value at all, reject this + alternative. Note that we could also lose due to + LIMIT_RELOAD_RELOAD_CLASS, but we don't check that + here. */ + + if (! CONSTANT_P (operand) + && (enum reg_class) op_alt->class != NO_REGS + && (PREFERRED_RELOAD_CLASS (operand, + (enum reg_class) op_alt->class) + == NO_REGS)) + bad = 1; + + /* We prefer to reload pseudos over reloading other things, + since such reloads may be able to be eliminated later. + If we are reloading a SCRATCH, we won't be generating any + insns, just using a register, so it is also preferred. + So bump REJECT in other cases. Don't do this in the + case where we are forcing a constant into memory and + it will then win since we don't want to have a different + alternative match then. */ + if (! (REG_P (operand) + && (0 + && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) + && GET_CODE (operand) != SCRATCH + && ! (const_to_mem && constmemok)) + reject += 2; + + /* Input reloads can be inherited more often than output + reloads can be removed, so penalize output reloads. */ + if (modified[i] != RELOAD_READ + && GET_CODE (operand) != SCRATCH) + reject++; + } + } + + /* Now see if any output operands that are marked "earlyclobber" + in this alternative conflict with any input operands + or any memory addresses. */ + + for (i = 0; i < noperands; i++) + { + struct alternative_info *op_alt = &this_alt[i]; + if (op_alt->earlyclobber + && (op_alt->win || op_alt->match_win)) + { + struct decomposition early_data; + + early_data = pre_reload_decompose (recog_data.operand[i]); + + if (modified[i] == RELOAD_READ) + abort (); + + if (op_alt->class == NO_REGS) + { + op_alt->earlyclobber = 0; + if (this_insn_is_asm) + error_for_asm (this_insn, + "`&' constraint used with no register class"); + else + abort (); + } + + for (j = 0; j < noperands; j++) + /* Is this an input operand or a memory ref? */ + if ((GET_CODE (recog_data.operand[j]) == MEM + || modified[j] != RELOAD_WRITE) + && j != i + /* Ignore things like match_operator operands. */ + && *recog_data.constraints[j] != 0 + /* Don't coutn an input operand that is constrained to match + the early clobber operand. */ + && ! (this_alt[j].matches == i + && rtx_equal_p (recog_data.operand[i], + recog_data.operand[j])) + /* Is it altered by storing the earlyclobber operand? */ + && !pre_reload_immune_p (recog_data.operand[j], + recog_data.operand[i], + early_data)) + { + /* If the output is in a single-reg class, + it's costly to reload it, so reload the input instead. */ + if (reg_class_size[op_alt->class] == 1 + && (REG_P (recog_data.operand[j]) + || GET_CODE (recog_data.operand[j]) == SUBREG)) + { + losers++; + this_alt[j].win = 0; + this_alt[j].match_win = 0; + } + else + break; + } + /* If an earlyclobber operand conflicts with something, + it must be reloaded, so request this and count the cost. */ + if (j != noperands) + { + losers++; + op_alt->win = 0; + this_alt[j].match_win = 0; + for (j = 0; j < noperands; j++) + { + struct alternative_info * op = &this_alt[j]; + if (op->matches == i && op->match_win) + { + op->win = 0; + op->match_win = 0; + losers++; + } + } + } + } + } + + /* REJECT, set by the '!', '*' and '?' constraint characters and when + a register would be reloaded into a non-preferred class, discourages + the use of this alternative for a reload goal. REJECT is incremented + by six for each ? and two for each non-preferred class. */ + losers = losers * 6 + reject; + + return bad ? -1 : losers; + } + /* Pre-reload INSN or collect all defs/uses for INSN. If n_reloads nonzero then INSN was reloaded and no defs/uses was callected. *************** collect_insn_info (ra_info, insn, def_re *** 2130,2137 **** char *constraints[MAX_RECOG_OPERANDS]; /* These are the preferred classes for an operand, or NO_REGS if it isn't a register. */ - enum reg_class preferred_class[MAX_RECOG_OPERANDS]; - char pref_or_nothing[MAX_RECOG_OPERANDS]; /* Nonzero for a MEM operand whose entire address needs a reload. */ int address_reloaded[MAX_RECOG_OPERANDS]; /* Value of enum reload_type to use for operand. */ --- 2790,2795 ---- *************** collect_insn_info (ra_info, insn, def_re *** 2139,2180 **** /* Value of enum reload_type to use within address of operand. */ enum reload_type address_type[MAX_RECOG_OPERANDS]; /* Save the usage of each operand. */ ! enum reload_usage { RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE } ! modified[MAX_RECOG_OPERANDS]; ! int no_input_reloads = 0, no_output_reloads = 0; int n_alternatives; ! int this_alternative[MAX_RECOG_OPERANDS]; ! char this_alternative_match_win[MAX_RECOG_OPERANDS]; ! char this_alternative_win[MAX_RECOG_OPERANDS]; ! char this_alternative_offmemok[MAX_RECOG_OPERANDS]; ! char this_alternative_earlyclobber[MAX_RECOG_OPERANDS]; ! int this_alternative_matches[MAX_RECOG_OPERANDS]; ! rtx this_alternative_reg[MAX_RECOG_OPERANDS]; ! rtx *this_alternative_reg_loc[MAX_RECOG_OPERANDS]; ! char *this_alternative_constraints[MAX_RECOG_OPERANDS]; ! int this_alternative_address_operand[MAX_RECOG_OPERANDS]; int this_alternative_number; int swapped; ! int goal_alternative[MAX_RECOG_OPERANDS]; int goal_alternative_number = 0; int operand_reloadnum[MAX_RECOG_OPERANDS]; - int goal_alternative_matches[MAX_RECOG_OPERANDS]; - int goal_alternative_matched[MAX_RECOG_OPERANDS]; - char goal_alternative_match_win[MAX_RECOG_OPERANDS]; - char goal_alternative_win[MAX_RECOG_OPERANDS]; - char goal_alternative_offmemok[MAX_RECOG_OPERANDS]; - char goal_alternative_earlyclobber[MAX_RECOG_OPERANDS]; - rtx goal_alternative_reg[MAX_RECOG_OPERANDS]; - rtx *goal_alternative_reg_loc[MAX_RECOG_OPERANDS]; - char *goal_alternative_constraints[MAX_RECOG_OPERANDS]; - int goal_alternative_address_operand[MAX_RECOG_OPERANDS]; int goal_alternative_swapped; int best; int commutative; char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS]; rtx substed_operand[MAX_RECOG_OPERANDS]; rtx set = single_set (insn); - int goal_earlyclobber = 0, this_earlyclobber; enum machine_mode operand_mode[MAX_RECOG_OPERANDS]; int ind_levels = indirect_levels; ra_ref **orig_def_refs = def_refs; --- 2797,2819 ---- /* Value of enum reload_type to use within address of operand. */ enum reload_type address_type[MAX_RECOG_OPERANDS]; /* Save the usage of each operand. */ ! enum reload_usage modified[MAX_RECOG_OPERANDS]; int n_alternatives; ! struct alternative_info this_alt[MAX_RECOG_OPERANDS]; ! int this_alternative_number; int swapped; ! ! struct alternative_info goal_alt[MAX_RECOG_OPERANDS]; ! int goal_alternative_number = 0; int operand_reloadnum[MAX_RECOG_OPERANDS]; int goal_alternative_swapped; int best; int commutative; char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS]; rtx substed_operand[MAX_RECOG_OPERANDS]; rtx set = single_set (insn); enum machine_mode operand_mode[MAX_RECOG_OPERANDS]; int ind_levels = indirect_levels; ra_ref **orig_def_refs = def_refs; *************** collect_insn_info (ra_info, insn, def_re *** 2399,3146 **** /* Loop over operands for one constraint alternative. */ /* LOSERS counts those that don't fit this alternative and would require loading. */ - int losers = 0; - /* BAD is set to 1 if it some operand can't fit this alternative - even after reloading. */ - int bad = 0; - /* REJECT is a count of how undesirable this alternative says it is - if any reloading is required. If the alternative matches exactly - then REJECT is ignored, but otherwise it gets this much - counted against it in addition to the reloading needed. Each - ? counts three times here since we want the disparaging caused by - a bad register class to only count 1/3 as much. */ - int reject = 0; - - this_earlyclobber = 0; - - for (i = 0; i < noperands; i++) - { - char *p = constraints[i]; - int win = 0; - int did_match = 0; - /* 0 => this operand can be reloaded somehow for this - alternative. */ - int badop = 1; - /* 0 => this operand can be reloaded if the alternative - allows regs. */ - int winreg = 0; - int c; - rtx operand = recog_data.operand[i]; - rtx *operand_loc = recog_data.operand_loc[i]; - int offset = 0; - /* Nonzero means this is a MEM that must be reloaded into a reg - regardless of what the constraint says. */ - int force_reload = 0; - int offmemok = 0; - /* Nonzero if a constant forced into memory would be OK for this - operand. */ - int constmemok = 0; - int earlyclobber = 0; - int match_seen = 0; - - /* If the predicate accepts a unary operator, it means that - we need to reload the operand, but do not do this for - match_operator and friends. */ - if (GET_RTX_CLASS (GET_CODE (operand)) == '1' && *p != 0) - { - operand = XEXP (operand, 0); - operand_loc = &XEXP (operand, 0); - } - - /* If the operand is a SUBREG, extract - the REG or MEM (or maybe even a constant) within. - (Constants can occur as a result of reg_equiv_constant.) */ - - while (GET_CODE (operand) == SUBREG) - { - /* Offset only matters when operand is a REG and - it is a hard reg. This is because it is passed - to reg_fits_class_p if it is a REG and all pseudos - return 0 from that function. */ - if (REG_P (SUBREG_REG (operand)) - && REGNO (SUBREG_REG (operand)) < FIRST_PSEUDO_REGISTER) - { - offset += - subreg_regno_offset (REGNO (SUBREG_REG (operand)), - GET_MODE (SUBREG_REG (operand)), - SUBREG_BYTE (operand), - GET_MODE (operand)); - } - operand = SUBREG_REG (operand); - operand_loc = &SUBREG_REG (operand); - /* Force reload if this is a constant or PLUS or if there may - be a problem accessing OPERAND in the outer mode. */ - if (CONSTANT_P (operand) - || GET_CODE (operand) == PLUS - /* We must force a reload of paradoxical SUBREGs - of a MEM because the alignment of the inner value - may not be enough to do the outer reference. On - big-endian machines, it may also reference outside - the object. - - On machines that extend byte operations and we have a - SUBREG where both the inner and outer modes are no wider - than a word and the inner mode is narrower, is integral, - and gets extended when loaded from memory, combine.c has - made assumptions about the behavior of the machine in such - register access. If the data is, in fact, in memory we - must always load using the size assumed to be in the - register and let the insn do the different-sized - accesses. - - This is doubly true if WORD_REGISTER_OPERATIONS. In - this case eliminate_regs has left non-paradoxical - subregs for push_reloads to see. Make sure it does - by forcing the reload. - - ??? When is it right at this stage to have a subreg - of a mem that is _not_ to be handled specialy? IMO - those should have been reduced to just a mem. */ - || ((GET_CODE (operand) == MEM - || (0 - && REG_P (operand) - && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) - #ifndef WORD_REGISTER_OPERATIONS - && (((GET_MODE_BITSIZE (GET_MODE (operand)) - < BIGGEST_ALIGNMENT) - && (GET_MODE_SIZE (operand_mode[i]) - > GET_MODE_SIZE (GET_MODE (operand)))) - || (GET_CODE (operand) == MEM && BYTES_BIG_ENDIAN) - #ifdef LOAD_EXTEND_OP - || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD - && (GET_MODE_SIZE (GET_MODE (operand)) - <= UNITS_PER_WORD) - && (GET_MODE_SIZE (operand_mode[i]) - > GET_MODE_SIZE (GET_MODE (operand))) - && INTEGRAL_MODE_P (GET_MODE (operand)) - && LOAD_EXTEND_OP (GET_MODE (operand)) != NIL) - #endif - ) - #endif - ) - ) - force_reload = 1; - } - - this_alternative[i] = (int) NO_REGS; - this_alternative_win[i] = 0; - this_alternative_match_win[i] = 0; - this_alternative_offmemok[i] = 0; - this_alternative_earlyclobber[i] = 0; - this_alternative_matches[i] = -1; - this_alternative_reg[i] = NULL_RTX; - this_alternative_reg_loc[i] = NULL; - this_alternative_constraints[i] = p; - this_alternative_address_operand[i] = 0; - - /* An empty constraint or empty alternative - allows anything which matched the pattern. */ - if (*p == 0 || *p == ',') - { - win = 1, badop = 0; - if (REG_P (operand)) - { - this_alternative_reg[i] = operand; - this_alternative_reg_loc[i] = operand_loc; - this_alternative[i] = GENERAL_REGS; - } - } ! /* Scan this alternative's specs for this operand; ! set WIN if the operand fits any letter in this alternative. ! Otherwise, clear BADOP if this operand could ! fit some letter after reloads, ! or set WINREG if this operand could fit after reloads ! provided the constraint allows some registers. */ ! ! match_seen = 0; ! while (*p && (c = *p++) != ',') ! switch (c) ! { ! case '=': case '+': ! break; ! ! case '*': ! reject += 4; ! break; ! case '%': ! /* The last operand should not be marked commutative. */ ! if (i != noperands - 1) ! commutative = i; ! break; ! case '?': ! reject += 6; ! break; ! case '!': ! reject = 600; ! break; ! case '#': ! /* Ignore rest of this alternative as far as ! reloading is concerned. */ ! if (match_seen) ! while (*p && *p != ',') ! p++; ! break; ! case '0': case '1': case '2': case '3': case '4': ! case '5': case '6': case '7': case '8': case '9': ! match_seen = 1; ! c -= '0'; ! this_alternative_matches[i] = c; ! /* We are supposed to match a previous operand. ! If we do, we win if that one did. ! If we do not, count both of the operands as losers. ! (This is too conservative, since most of the time ! only a single reload insn will be needed to make ! the two operands win. As a result, this alternative ! may be rejected when it is actually desirable.) */ ! if ((swapped && (c != commutative || i != commutative + 1)) ! /* If we are matching as if two operands were swapped, ! also pretend that operands_match had been computed ! with swapped. ! But if I is the second of those and C is the first, ! don't exchange them, because operands_match is valid ! only on one side of its diagonal. */ ! ? (operands_match ! [(c == commutative || c == commutative + 1) ! ? 2 * commutative + 1 - c : c] ! [(i == commutative || i == commutative + 1) ! ? 2 * commutative + 1 - i : i]) ! : operands_match[c][i]) ! { ! /* If we are matching a non-offsettable address where an ! offsettable address was expected, then we must reject ! this combination, because we can't reload it. */ ! if (this_alternative_offmemok[c] ! && GET_CODE (recog_data.operand[c]) == MEM ! && this_alternative[c] == (int) NO_REGS ! && ! this_alternative_win[c]) ! bad = 1; ! did_match = this_alternative_win[c]; ! } ! else ! { ! /* Retroactively mark the operand we had to match ! as a loser, if it wasn't already. */ ! if (this_alternative_win[c]) ! losers++; ! this_alternative_win[c] = 0; ! if (this_alternative[c] == (int) NO_REGS) ! bad = 1; ! } ! /* This can be fixed with reloads if the operand ! we are supposed to match can be fixed with reloads. */ ! badop = 0; ! this_alternative[i] = this_alternative[c]; ! ! /* If we have to reload this operand and some previous ! operand also had to match the same thing as this ! operand, we don't know how to do that. So reject this ! alternative. */ ! if (! did_match || force_reload) ! for (j = 0; j < i; j++) ! if (this_alternative_matches[j] ! == this_alternative_matches[i]) ! badop = 1; ! if (REG_P (operand)) ! { ! this_alternative_reg[i] = operand; ! this_alternative_reg_loc[i] = operand_loc; ! } ! break; ! case 'p': ! /* All necessary reloads for an address_operand ! were handled in find_reloads_address. */ ! this_alternative[i] = (int) BASE_REG_CLASS; ! this_alternative_address_operand[i] = 1; ! win = 1; ! break; ! case 'm': ! if (force_reload) ! break; ! if (GET_CODE (operand) == MEM) ! win = 1; ! /* force_const_mem does not accept HIGH. */ ! if (CONSTANT_P (operand) ! && GET_CODE (operand) != HIGH) ! badop = 0; ! constmemok = 1; ! break; ! case '<': ! if (GET_CODE (operand) == MEM ! && ! address_reloaded[i] ! && (GET_CODE (XEXP (operand, 0)) == PRE_DEC ! || GET_CODE (XEXP (operand, 0)) == POST_DEC)) ! win = 1; ! break; ! case '>': ! if (GET_CODE (operand) == MEM ! && ! address_reloaded[i] ! && (GET_CODE (XEXP (operand, 0)) == PRE_INC ! || GET_CODE (XEXP (operand, 0)) == POST_INC)) ! win = 1; ! break; ! ! /* Memory operand whose address is not offsettable. */ ! case 'V': ! if (force_reload) ! break; ! if (GET_CODE (operand) == MEM ! && ! offsettable_nonstrict_memref_p (operand)) ! win = 1; ! break; ! ! /* Memory operand whose address is offsettable. */ ! case 'o': ! if (force_reload) ! break; ! if (GET_CODE (operand) == MEM ! /* If IND_LEVELS, find_reloads_address won't reload a ! pseudo that didn't get a hard reg, so we have to ! reject that case. */ ! && (offsettable_nonstrict_memref_p (operand) ! /* A reloaded address is offsettable because it is now ! just a simple register indirect. */ ! || address_reloaded[i])) ! win = 1; ! /* force_const_mem does not accept HIGH. */ ! if ((CONSTANT_P (operand) && GET_CODE (operand) != HIGH) ! || GET_CODE (operand) == MEM) ! badop = 0; ! constmemok = 1; ! offmemok = 1; ! break; ! ! case '&': ! /* Output operand that is stored before the need for the ! input operands (and their index registers) is over. */ ! earlyclobber = 1, this_earlyclobber = 1; ! break; ! ! case 'E': ! #ifndef REAL_ARITHMETIC ! /* Match any floating double constant, but only if ! we can examine the bits of it reliably. */ ! if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT ! || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD) ! && GET_MODE (operand) != VOIDmode && ! flag_pretend_float) ! break; ! #endif ! if (GET_CODE (operand) == CONST_DOUBLE) ! win = 1; ! break; ! ! case 'F': ! if (GET_CODE (operand) == CONST_DOUBLE) ! win = 1; ! break; ! ! case 'G': ! case 'H': ! if (GET_CODE (operand) == CONST_DOUBLE ! && CONST_DOUBLE_OK_FOR_LETTER_P (operand, c)) ! win = 1; ! break; ! ! case 's': ! if (GET_CODE (operand) == CONST_INT ! || (GET_CODE (operand) == CONST_DOUBLE ! && GET_MODE (operand) == VOIDmode)) ! break; ! case 'i': ! if (CONSTANT_P (operand) ! #ifdef LEGITIMATE_PIC_OPERAND_P ! && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand)) ! #endif ! ) ! win = 1; ! break; ! ! case 'n': ! if (GET_CODE (operand) == CONST_INT ! || (GET_CODE (operand) == CONST_DOUBLE ! && GET_MODE (operand) == VOIDmode)) ! win = 1; ! break; ! ! case 'I': ! case 'J': ! case 'K': ! case 'L': ! case 'M': ! case 'N': ! case 'O': ! case 'P': ! if (GET_CODE (operand) == CONST_INT ! && CONST_OK_FOR_LETTER_P (INTVAL (operand), c)) ! win = 1; ! break; ! ! case 'X': ! win = 1; ! break; ! ! case 'g': ! if (! force_reload ! /* A PLUS is never a valid operand, but reload can make ! it from a register when eliminating registers. */ ! && GET_CODE (operand) != PLUS ! /* A SCRATCH is not a valid operand. */ ! && GET_CODE (operand) != SCRATCH ! #ifdef LEGITIMATE_PIC_OPERAND_P ! && (! CONSTANT_P (operand) ! || ! flag_pic ! || LEGITIMATE_PIC_OPERAND_P (operand)) ! #endif ! && GENERAL_REGS == ALL_REGS) ! win = 1; ! /* Drop through into 'r' case. */ ! ! case 'r': ! this_alternative[i] = (int) (reg_class_subunion ! [this_alternative[i]] ! [(int) GENERAL_REGS]); ! goto reg; ! ! default: ! if (REG_CLASS_FROM_LETTER (c) == NO_REGS) ! { ! #ifdef EXTRA_CONSTRAINT ! if (EXTRA_CONSTRAINT (operand, c)) ! win = 1; ! #endif ! break; ! } ! /* FIXME: denisc@overta.ru Better to use union of contents ! of classes. */ ! this_alternative[i] ! = (int) (reg_class_subunion ! [this_alternative[i]] ! [(int) REG_CLASS_FROM_LETTER (c)]); ! reg: ! if (GET_MODE (operand) == BLKmode) ! break; ! winreg = 1; ! if (REG_P (operand)) ! { ! this_alternative_reg_loc[i] = operand_loc; ! this_alternative_reg[i] = operand; ! if (REGNO (operand) >= FIRST_PSEUDO_REGISTER) ! win = pseudo_fits_class_p (operand, this_alternative[i], ! GET_MODE (operand)) ; ! else if (reg_fits_class_p (operand, this_alternative[i], ! offset, GET_MODE (operand))) ! win = 1; ! } ! break; ! } ! ! constraints[i] = p; ! ! /* If this operand could be handled with a reg, ! and some reg is allowed, then this operand can be handled. */ ! if (winreg && this_alternative[i] != (int) NO_REGS) ! badop = 0; ! ! /* Record which operands fit this alternative. */ ! this_alternative_earlyclobber[i] = earlyclobber; ! if (win && ! force_reload) ! this_alternative_win[i] = 1; ! else if (did_match && ! force_reload) ! this_alternative_match_win[i] = 1; ! else ! { ! int const_to_mem = 0; ! ! this_alternative_offmemok[i] = offmemok; ! losers++; ! if (badop) ! bad = 1; ! /* Alternative loses if it has no regs for a reg operand. */ ! if (REG_P (operand) ! && this_alternative[i] == (int) NO_REGS ! && this_alternative_matches[i] < 0) ! bad = 1; ! ! /* If this is a constant that is reloaded into the desired ! class by copying it to memory first, count that as another ! reload. This is consistent with other code and is ! required to avoid choosing another alternative when ! the constant is moved into memory by this function on ! an early reload pass. Note that the test here is ! precisely the same as in the code below that calls ! force_const_mem. */ ! if (CONSTANT_P (operand) ! /* force_const_mem does not accept HIGH. */ ! && GET_CODE (operand) != HIGH ! && ((PREFERRED_RELOAD_CLASS (operand, ! (enum reg_class) ! this_alternative[i]) ! == NO_REGS) ! || no_input_reloads) ! && operand_mode[i] != VOIDmode) ! { ! const_to_mem = 1; ! if (this_alternative[i] != (int) NO_REGS) ! losers++; ! } ! ! /* If we can't reload this value at all, reject this ! alternative. Note that we could also lose due to ! LIMIT_RELOAD_RELOAD_CLASS, but we don't check that ! here. */ ! ! if (! CONSTANT_P (operand) ! && (enum reg_class) this_alternative[i] != NO_REGS ! && (PREFERRED_RELOAD_CLASS (operand, ! (enum reg_class) ! this_alternative[i]) ! == NO_REGS)) ! bad = 1; ! ! /* Alternative loses if it requires a type of reload not ! permitted for this insn. We can always reload SCRATCH ! and objects with a REG_UNUSED note. */ ! else if (GET_CODE (operand) != SCRATCH ! && modified[i] != RELOAD_READ && no_output_reloads) ! bad = 1; ! else if (modified[i] != RELOAD_WRITE && no_input_reloads ! && ! const_to_mem) ! bad = 1; ! ! /* We prefer to reload pseudos over reloading other things, ! since such reloads may be able to be eliminated later. ! If we are reloading a SCRATCH, we won't be generating any ! insns, just using a register, so it is also preferred. ! So bump REJECT in other cases. Don't do this in the ! case where we are forcing a constant into memory and ! it will then win since we don't want to have a different ! alternative match then. */ ! if (! (REG_P (operand) ! && (0 ! && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) ! && GET_CODE (operand) != SCRATCH ! && ! (const_to_mem && constmemok)) ! reject += 2; ! ! /* Input reloads can be inherited more often than output ! reloads can be removed, so penalize output reloads. */ ! if (operand_type[i] != RELOAD_FOR_INPUT ! && GET_CODE (operand) != SCRATCH) ! reject++; ! } ! } ! ! /* Now see if any output operands that are marked "earlyclobber" ! in this alternative conflict with any input operands ! or any memory addresses. */ ! ! for (i = 0; i < noperands; i++) ! if (this_alternative_earlyclobber[i] ! && (this_alternative_win[i] || this_alternative_match_win[i])) ! { ! struct decomposition early_data; ! ! early_data = pre_reload_decompose (recog_data.operand[i]); ! ! if (modified[i] == RELOAD_READ) ! abort (); ! ! if (this_alternative[i] == NO_REGS) ! { ! this_alternative_earlyclobber[i] = 0; ! if (this_insn_is_asm) ! error_for_asm (this_insn, ! "`&' constraint used with no register class"); ! else ! abort (); ! } ! ! for (j = 0; j < noperands; j++) ! /* Is this an input operand or a memory ref? */ ! if ((GET_CODE (recog_data.operand[j]) == MEM ! || modified[j] != RELOAD_WRITE) ! && j != i ! /* Ignore things like match_operator operands. */ ! && *recog_data.constraints[j] != 0 ! /* Don't coutn an input operand that is constrained to match ! the early clobber operand. */ ! && ! (this_alternative_matches[j] == i ! && rtx_equal_p (recog_data.operand[i], ! recog_data.operand[j])) ! /* Is it altered by storing the earlyclobber operand? */ ! && !pre_reload_immune_p (recog_data.operand[j], ! recog_data.operand[i], ! early_data)) ! { ! /* If the output is in a single-reg class, ! it's costly to reload it, so reload the input instead. */ ! if (reg_class_size[this_alternative[i]] == 1 ! && (REG_P (recog_data.operand[j]) ! || GET_CODE (recog_data.operand[j]) == SUBREG)) ! { ! losers++; ! this_alternative_win[j] = 0; ! this_alternative_match_win[j] = 0; ! } ! else ! break; ! } ! /* If an earlyclobber operand conflicts with something, ! it must be reloaded, so request this and count the cost. */ ! if (j != noperands) ! { ! losers++; ! this_alternative_win[i] = 0; ! this_alternative_match_win[j] = 0; ! for (j = 0; j < noperands; j++) ! if (this_alternative_matches[j] == i ! && this_alternative_match_win[j]) ! { ! this_alternative_win[j] = 0; ! this_alternative_match_win[j] = 0; ! losers++; ! } ! } ! } ! ! /* REJECT, set by the '!', '*' and '?' constraint characters and when ! a register would be reloaded into a non-preferred class, discourages ! the use of this alternative for a reload goal. REJECT is incremented ! by six for each ? and two for each non-preferred class. */ ! losers = losers * 6 + reject; ! ! /* If this alternative can be made to work by reloading, ! and it needs less reloading than the others checked so far, ! record it as the chosen goal for reloading. */ ! if (! bad && best > losers) ! { ! for (i = 0; i < noperands; i++) ! { ! goal_alternative[i] = this_alternative[i]; ! goal_alternative_win[i] = this_alternative_win[i]; ! goal_alternative_match_win[i] = this_alternative_match_win[i]; ! goal_alternative_offmemok[i] = this_alternative_offmemok[i]; ! goal_alternative_matches[i] = this_alternative_matches[i]; ! goal_alternative_earlyclobber[i] ! = this_alternative_earlyclobber[i]; ! goal_alternative_reg[i] = this_alternative_reg[i]; ! goal_alternative_reg_loc[i] = this_alternative_reg_loc[i]; ! goal_alternative_constraints[i] ! = this_alternative_constraints[i]; ! goal_alternative_address_operand[i] ! = this_alternative_address_operand[i]; ! } ! goal_alternative_swapped = swapped; ! best = losers; ! goal_alternative_number = this_alternative_number; ! goal_earlyclobber = this_earlyclobber; ! } ! } ! ! /* If insn is commutative (it's safe to exchange a certain pair of operands) ! then we need to try each alternative twice, ! the second time matching those two operands ! as if we had exchanged them. ! To do this, really exchange them in operands. ! ! If we have just tried the alternatives the second time, ! return operands to normal and drop through. */ ! ! if (commutative >= 0) ! { ! swapped = !swapped; ! if (swapped) ! { ! enum reg_class tclass; ! int t; ! ! recog_data.operand[commutative] = substed_operand[commutative + 1]; ! recog_data.operand[commutative + 1] = substed_operand[commutative]; ! ! tclass = preferred_class[commutative]; ! preferred_class[commutative] = preferred_class[commutative + 1]; ! preferred_class[commutative + 1] = tclass; ! ! t = pref_or_nothing[commutative]; ! pref_or_nothing[commutative] = pref_or_nothing[commutative + 1]; ! pref_or_nothing[commutative + 1] = t; ! ! memcpy (constraints, recog_data.constraints, ! noperands * sizeof (char *)); ! goto try_swapped; ! } ! else ! { ! recog_data.operand[commutative] = substed_operand[commutative]; ! recog_data.operand[commutative + 1] ! = substed_operand[commutative + 1]; ! } ! } ! ! /* The operands don't meet the constraints. ! goal_alternative describes the alternative ! that we could reach by reloading the fewest operands. ! Reload so as to fit it. */ ! ! if (best == MAX_RECOG_OPERANDS * 2 + 600) ! { ! /* No alternative works with reloads?? */ ! if (insn_code_number >= 0) ! fatal_insn ("Unable to generate reloads for:", insn); ! error_for_asm (insn, "inconsistent operand constraints in an `asm'"); ! /* Avoid further trouble with this insn. */ ! PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx); ! n_reloads = 0; ! return; ! } ! ! /* Right now, for any pair of operands I and J that are required to match, ! with I < J, ! goal_alternative_matches[J] is I. ! Set up goal_alternative_matched as the inverse function: ! goal_alternative_matched[I] = J. */ ! ! for (i = 0; i < noperands; i++) ! goal_alternative_matched[i] = -1; ! ! for (i = 0; i < noperands; i++) ! if (! goal_alternative_win[i] ! && goal_alternative_matches[i] >= 0) ! goal_alternative_matched[goal_alternative_matches[i]] = i; ! ! for (i = 0; i < noperands; i++) ! goal_alternative_win[i] |= goal_alternative_match_win[i]; ! ! /* If the best alternative is with operands 1 and 2 swapped, ! consider them swapped before reporting the reloads. Update the ! operand numbers of any reloads already pushed. */ ! ! if (goal_alternative_swapped) ! { ! rtx tem; ! ! tem = substed_operand[commutative]; ! substed_operand[commutative] = substed_operand[commutative + 1]; ! substed_operand[commutative + 1] = tem; ! tem = recog_data.operand[commutative]; ! recog_data.operand[commutative] = recog_data.operand[commutative + 1]; ! recog_data.operand[commutative + 1] = tem; ! tem = *recog_data.operand_loc[commutative]; ! *recog_data.operand_loc[commutative] ! = *recog_data.operand_loc[commutative + 1]; ! *recog_data.operand_loc[commutative + 1] = tem; for (i = 0; i < n_reloads; i++) { --- 3038,3142 ---- /* Loop over operands for one constraint alternative. */ /* LOSERS counts those that don't fit this alternative and would require loading. */ ! int losers = scan_alternative (this_alt, constraints, modified, ! address_reloaded, operands_match, ! swapped, &commutative); ! ! /* If this alternative can be made to work by reloading, ! and it needs less reloading than the others checked so far, ! record it as the chosen goal for reloading. */ ! if (losers >= 0 && best > losers) ! { ! for (i = 0; i < noperands; i++) ! memcpy (&goal_alt[i], &this_alt[i], sizeof (this_alt[0])); ! goal_alternative_swapped = swapped; ! goal_alternative_number = this_alternative_number; ! best = losers; ! } ! } ! /* If insn is commutative (it's safe to exchange a certain pair of operands) ! then we need to try each alternative twice, ! the second time matching those two operands ! as if we had exchanged them. ! To do this, really exchange them in operands. ! If we have just tried the alternatives the second time, ! return operands to normal and drop through. */ ! if (commutative >= 0) ! { ! swapped = !swapped; ! if (swapped) ! { ! recog_data.operand[commutative] = substed_operand[commutative + 1]; ! recog_data.operand[commutative + 1] = substed_operand[commutative]; ! memcpy (constraints, recog_data.constraints, ! noperands * sizeof (char *)); ! goto try_swapped; ! } ! else ! { ! recog_data.operand[commutative] = substed_operand[commutative]; ! recog_data.operand[commutative + 1] ! = substed_operand[commutative + 1]; ! } ! } ! /* The operands don't meet the constraints. ! goal_alternative describes the alternative ! that we could reach by reloading the fewest operands. ! Reload so as to fit it. */ ! if (best == MAX_RECOG_OPERANDS * 2 + 600) ! { ! /* No alternative works with reloads?? */ ! if (insn_code_number >= 0) ! fatal_insn ("Unable to generate reloads for:", insn); ! error_for_asm (insn, "inconsistent operand constraints in an `asm'"); ! /* Avoid further trouble with this insn. */ ! PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx); ! n_reloads = 0; ! return; ! } ! /* Right now, for any pair of operands I and J that are required to match, ! with I < J, ! goal_alternative_matches[J] is I. ! Set up goal_alternative_matched as the inverse function: ! goal_alternative_matched[I] = J. */ ! for (i = 0; i < noperands; i++) ! goal_alt[i].matched = -1; ! ! for (i = 0; i < noperands; i++) ! if (! goal_alt[i].win ! && goal_alt[i].matches >= 0) ! goal_alt[goal_alt[i].matches].matched = i; ! for (i = 0; i < noperands; i++) ! goal_alt[i].win |= goal_alt[i].match_win; ! /* If the best alternative is with operands 1 and 2 swapped, ! consider them swapped before reporting the reloads. Update the ! operand numbers of any reloads already pushed. */ ! if (goal_alternative_swapped) ! { ! rtx tem; ! tem = substed_operand[commutative]; ! substed_operand[commutative] = substed_operand[commutative + 1]; ! substed_operand[commutative + 1] = tem; ! tem = recog_data.operand[commutative]; ! recog_data.operand[commutative] = recog_data.operand[commutative + 1]; ! recog_data.operand[commutative + 1] = tem; ! tem = *recog_data.operand_loc[commutative]; ! *recog_data.operand_loc[commutative] ! = *recog_data.operand_loc[commutative + 1]; ! *recog_data.operand_loc[commutative + 1] = tem; for (i = 0; i < n_reloads; i++) { *************** collect_insn_info (ra_info, insn, def_re *** 3172,3192 **** In any case, anything needed to address this operand can remain however they were previously categorized. */ ! if (goal_alternative_earlyclobber[i] && operand_type[i] != RELOAD_OTHER) operand_type[i] = RELOAD_OTHER; } /* Any constants that aren't allowed and can't be reloaded into registers are here changed into memory references. */ for (i = 0; i < noperands; i++) ! if (! goal_alternative_win[i] && CONSTANT_P (recog_data.operand[i]) /* force_const_mem does not accept HIGH. */ && GET_CODE (recog_data.operand[i]) != HIGH ! && ((PREFERRED_RELOAD_CLASS (recog_data.operand[i], ! (enum reg_class) goal_alternative[i]) ! == NO_REGS) ! || no_input_reloads) && operand_mode[i] != VOIDmode) { substed_operand[i] = recog_data.operand[i] --- 3168,3187 ---- In any case, anything needed to address this operand can remain however they were previously categorized. */ ! if (goal_alt[i].earlyclobber && operand_type[i] != RELOAD_OTHER) operand_type[i] = RELOAD_OTHER; } /* Any constants that aren't allowed and can't be reloaded into registers are here changed into memory references. */ for (i = 0; i < noperands; i++) ! if (! goal_alt[i].win && CONSTANT_P (recog_data.operand[i]) /* force_const_mem does not accept HIGH. */ && GET_CODE (recog_data.operand[i]) != HIGH ! && (PREFERRED_RELOAD_CLASS (recog_data.operand[i], ! (enum reg_class) goal_alt[i].class) ! == NO_REGS) && operand_mode[i] != VOIDmode) { substed_operand[i] = recog_data.operand[i] *************** collect_insn_info (ra_info, insn, def_re *** 3196,3216 **** NULL); if (alternative_allows_memconst (recog_data.constraints[i], goal_alternative_number)) ! goal_alternative_win[i] = 1; } /* Record the values of the earlyclobber operands for the caller. */ ! if (goal_earlyclobber) ! for (i = 0; i < noperands; i++) ! if (goal_alternative_earlyclobber[i]) ! reload_earlyclobbers[n_earlyclobbers++] = recog_data.operand[i]; /* Now record reloads for all the operands that need them. */ for (i = 0; i < noperands; i++) ! if (! goal_alternative_win[i]) { /* Operands that match previous ones have already been handled. */ ! if (goal_alternative_matches[i] >= 0) ; /* Handle an operand with a nonoffsettable address appearing where an offsettable address will do --- 3191,3210 ---- NULL); if (alternative_allows_memconst (recog_data.constraints[i], goal_alternative_number)) ! goal_alt[i].win = 1; } /* Record the values of the earlyclobber operands for the caller. */ ! for (i = 0; i < noperands; i++) ! if (goal_alt[i].earlyclobber) ! reload_earlyclobbers[n_earlyclobbers++] = recog_data.operand[i]; /* Now record reloads for all the operands that need them. */ for (i = 0; i < noperands; i++) ! if (! goal_alt[i].win) { /* Operands that match previous ones have already been handled. */ ! if (goal_alt[i].matches >= 0) ; /* Handle an operand with a nonoffsettable address appearing where an offsettable address will do *************** collect_insn_info (ra_info, insn, def_re *** 3219,3226 **** ??? We can also do this when the operand is a register and reg_equiv_mem is not offsettable, but this is a bit tricky, so we don't bother with it. It may not be worth doing. */ ! else if (goal_alternative_matched[i] == -1 ! && goal_alternative_offmemok[i] && GET_CODE (recog_data.operand[i]) == MEM) { operand_reloadnum[i] --- 3213,3220 ---- ??? We can also do this when the operand is a register and reg_equiv_mem is not offsettable, but this is a bit tricky, so we don't bother with it. It may not be worth doing. */ ! else if (goal_alt[i].matched == -1 ! && goal_alt[i].offmemok && GET_CODE (recog_data.operand[i]) == MEM) { operand_reloadnum[i] *************** collect_insn_info (ra_info, insn, def_re *** 3251,3257 **** } } } ! else if (goal_alternative_matched[i] == -1) { operand_reloadnum[i] = push_pre_reload ((modified[i] != RELOAD_WRITE --- 3245,3251 ---- } } } ! else if (goal_alt[i].matched == -1) { operand_reloadnum[i] = push_pre_reload ((modified[i] != RELOAD_WRITE *************** collect_insn_info (ra_info, insn, def_re *** 3262,3268 **** ? recog_data.operand_loc[i] : 0), (modified[i] != RELOAD_READ ? recog_data.operand_loc[i] : 0), ! (enum reg_class) goal_alternative[i], (modified[i] == RELOAD_WRITE ? VOIDmode : operand_mode[i]), (modified[i] == RELOAD_READ --- 3256,3262 ---- ? recog_data.operand_loc[i] : 0), (modified[i] != RELOAD_READ ? recog_data.operand_loc[i] : 0), ! (enum reg_class) goal_alt[i].class, (modified[i] == RELOAD_WRITE ? VOIDmode : operand_mode[i]), (modified[i] == RELOAD_READ *************** collect_insn_info (ra_info, insn, def_re *** 3275,3303 **** and the other must be output only. Pass the input operand as IN and the other as OUT. */ else if (modified[i] == RELOAD_READ ! && modified[goal_alternative_matched[i]] == RELOAD_WRITE) { operand_reloadnum[i] = push_pre_reload (recog_data.operand[i], ! recog_data.operand [goal_alternative_matched[i]], recog_data.operand_loc[i], ! recog_data.operand_loc[goal_alternative_matched[i]], ! (enum reg_class) goal_alternative[i], operand_mode[i], ! operand_mode[goal_alternative_matched[i]], 0, 0, i, RELOAD_OTHER); ! operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum; } else if (modified[i] == RELOAD_WRITE ! && modified[goal_alternative_matched[i]] == RELOAD_READ) { ! operand_reloadnum[goal_alternative_matched[i]] ! = push_pre_reload (recog_data.operand[goal_alternative_matched[i]], recog_data.operand[i], ! recog_data.operand_loc[goal_alternative_matched[i]], recog_data.operand_loc[i], ! (enum reg_class) goal_alternative[i], ! operand_mode[goal_alternative_matched[i]], operand_mode[i], 0, 0, i, RELOAD_OTHER); operand_reloadnum[i] = output_reloadnum; --- 3269,3297 ---- and the other must be output only. Pass the input operand as IN and the other as OUT. */ else if (modified[i] == RELOAD_READ ! && modified[goal_alt[i].matched] == RELOAD_WRITE) { operand_reloadnum[i] = push_pre_reload (recog_data.operand[i], ! recog_data.operand [goal_alt[i].matched], recog_data.operand_loc[i], ! recog_data.operand_loc[goal_alt[i].matched], ! (enum reg_class) goal_alt[i].class, operand_mode[i], ! operand_mode[goal_alt[i].matched], 0, 0, i, RELOAD_OTHER); ! operand_reloadnum[goal_alt[i].matched] = output_reloadnum; } else if (modified[i] == RELOAD_WRITE ! && modified[goal_alt[i].matched] == RELOAD_READ) { ! operand_reloadnum[goal_alt[i].matched] ! = push_pre_reload (recog_data.operand[goal_alt[i].matched], recog_data.operand[i], ! recog_data.operand_loc[goal_alt[i].matched], recog_data.operand_loc[i], ! (enum reg_class) goal_alt[i].class, ! operand_mode[goal_alt[i].matched], operand_mode[i], 0, 0, i, RELOAD_OTHER); operand_reloadnum[i] = output_reloadnum; *************** collect_insn_info (ra_info, insn, def_re *** 3388,3394 **** opno2ref[i] = 0; if (GET_CODE (recog_data.operand[i]) == MEM ! || goal_alternative_address_operand[i]) { /* FIXME: Now we can only record registers inside address. */ struct scan_addr_state scan_state; --- 3382,3388 ---- opno2ref[i] = 0; if (GET_CODE (recog_data.operand[i]) == MEM ! || goal_alt[i].address_operand) { /* FIXME: Now we can only record registers inside address. */ struct scan_addr_state scan_state; *************** collect_insn_info (ra_info, insn, def_re *** 3398,3404 **** scan_state.uses = use_refs; scan_state.regs_per_addr = 0; scan_state.alt = goal_alternative_number; ! scan_state.constraints = goal_alternative_constraints[i]; scan_state.modified = 0; scan_state.class = BASE_REG_CLASS; scan_state.ra_info = ra_info; --- 3392,3398 ---- scan_state.uses = use_refs; scan_state.regs_per_addr = 0; scan_state.alt = goal_alternative_number; ! scan_state.constraints = goal_alt[i].constraints; scan_state.modified = 0; scan_state.class = BASE_REG_CLASS; scan_state.ra_info = ra_info; *************** collect_insn_info (ra_info, insn, def_re *** 3407,3429 **** def_refs = scan_state.defs; use_refs = scan_state.uses; } ! else if (goal_alternative_reg[i]) { ! int matches = goal_alternative_matches[i]; ra_ref *ref = (ra_ref *) obstack_alloc (&ra_info->obstack, sizeof (ra_ref)); opno2ref[i] = ref; ! ref->reg = goal_alternative_reg[i]; ! ref->loc = goal_alternative_reg_loc[i]; ref->insn = insn; ref->opno = i; ref->operand = recog_data.operand[i]; ref->type = RA_REF_NONE; ! if (*goal_alternative_constraints[i] != '\0') { ! if (goal_alternative_earlyclobber[i]) RA_REF_SET_TYPE (ref, RA_REF_CLOBBER); if (operand_type[i] == RELOAD_OTHER) RA_REF_SET_TYPE (ref, RA_REF_RDWR); --- 3401,3423 ---- def_refs = scan_state.defs; use_refs = scan_state.uses; } ! else if (goal_alt[i].reg) { ! int matches = goal_alt[i].matches; ra_ref *ref = (ra_ref *) obstack_alloc (&ra_info->obstack, sizeof (ra_ref)); opno2ref[i] = ref; ! ref->reg = goal_alt[i].reg; ! ref->loc = goal_alt[i].reg_loc; ref->insn = insn; ref->opno = i; ref->operand = recog_data.operand[i]; ref->type = RA_REF_NONE; ! if (*goal_alt[i].constraints != '\0') { ! if (goal_alt[i].earlyclobber) RA_REF_SET_TYPE (ref, RA_REF_CLOBBER); if (operand_type[i] == RELOAD_OTHER) RA_REF_SET_TYPE (ref, RA_REF_RDWR); *************** collect_insn_info (ra_info, insn, def_re *** 3449,3460 **** } else COPY_HARD_REG_SET (ref->hardregs, ! reg_class_contents[goal_alternative[i]]); /* Fields for debugging. */ ref->alt = goal_alternative_number; ! ref->constraints = goal_alternative_constraints[i]; ! ref->class = goal_alternative[i]; if (RA_REF_WRITE_P (ref) || RA_REF_CLOBBER_P (ref)) *def_refs++ = ref; --- 3443,3454 ---- } else COPY_HARD_REG_SET (ref->hardregs, ! reg_class_contents[goal_alt[i].class]); /* Fields for debugging. */ ref->alt = goal_alternative_number; ! ref->constraints = goal_alt[i].constraints; ! ref->class = goal_alt[i].class; if (RA_REF_WRITE_P (ref) || RA_REF_CLOBBER_P (ref)) *def_refs++ = ref; *************** collect_insn_info (ra_info, insn, def_re *** 3468,3473 **** --- 3462,3732 ---- *n_uses = use_refs - orig_use_refs; } + /* Recognize the insn INSN and check constraints validity very + strictly. */ + int + ra_check_constraints (insn) + rtx insn; + { + int insn_code_number; + int i; + int noperands; + /* These start out as the constraints for the insn + and they are chewed up as we consider alternatives. */ + char *constraints[MAX_RECOG_OPERANDS]; + /* These are the preferred classes for an operand, or NO_REGS if it isn't + a register. */ + /* Nonzero for a MEM operand whose entire address needs a reload. */ + int address_reloaded[MAX_RECOG_OPERANDS]; + /* Value of enum reload_type to use for operand. */ + enum reload_type operand_type[MAX_RECOG_OPERANDS]; + /* Value of enum reload_type to use within address of operand. */ + enum reload_type address_type[MAX_RECOG_OPERANDS]; + /* Save the usage of each operand. */ + enum reload_usage modified[MAX_RECOG_OPERANDS]; + int n_alternatives; + struct alternative_info this_alt[MAX_RECOG_OPERANDS]; + + int this_alternative_number; + int swapped; + + int best; + int commutative; + char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS]; + rtx substed_operand[MAX_RECOG_OPERANDS]; + enum machine_mode operand_mode[MAX_RECOG_OPERANDS]; + rtx pat = PATTERN (insn); + + /* If we are before reload and the pattern is a SET, see if we can add + clobbers. */ + int icode = recog (pat, insn, 0); + int is_asm = icode < 0 && asm_noperands (PATTERN (insn)) >= 0; + + + /* If this is an asm and the operand aren't legal, then fail. Likewise if + this is not an asm and the insn wasn't recognized. */ + if ((is_asm && ! check_asm_operands (PATTERN (insn))) + || (!is_asm && icode < 0)) + return 0; + + INSN_CODE (insn) = icode; + extract_insn (insn); + + noperands = reload_n_operands = recog_data.n_operands; + n_alternatives = recog_data.n_alternatives; + + n_reloads = 0; + n_replacements = 0; + n_earlyclobbers = 0; + + /* Just return "no reloads" if insn has no operands with constraints. */ + if (noperands == 0 || n_alternatives == 0) + return 1; + + this_insn = insn; + insn_code_number = INSN_CODE (insn); + this_insn_is_asm = insn_code_number < 0; + + memcpy (operand_mode, recog_data.operand_mode, + noperands * sizeof (enum machine_mode)); + memcpy (constraints, recog_data.constraints, noperands * sizeof (char *)); + + commutative = -1; + + /* If we will need to know, later, whether some pair of operands + are the same, we must compare them now and save the result. + Reloading the base and index registers will clobber them + and afterward they will fail to match. */ + + for (i = 0; i < noperands; i++) + { + char *p; + int c; + + substed_operand[i] = recog_data.operand[i]; + p = constraints[i]; + + modified[i] = RELOAD_READ; + + /* Scan this operand's constraint to see if it is an output operand, + an in-out operand, is commutative, or should match another. */ + + while ((c = *p++)) + { + if (c == '=') + modified[i] = RELOAD_WRITE; + else if (c == '+') + modified[i] = RELOAD_READ_WRITE; + else if (c == '%') + { + /* The last operand should not be marked commutative. */ + if (i == noperands - 1) + abort (); + + commutative = i; + } + else if (c >= '0' && c <= '9') + { + rtx op1 = recog_data.operand[c - '0']; + rtx op2 = recog_data.operand[i]; + c -= '0'; + if (GET_MODE (op1) != GET_MODE (op2) + && INTEGRAL_MODE_P (GET_MODE (op1)) + && INTEGRAL_MODE_P (GET_MODE (op2))) + { + if (GET_MODE_SIZE (GET_MODE (op1)) + < GET_MODE_SIZE (GET_MODE (op2))) + { + rtx t = op1; + op1 = op2; + op2 = t; + } + if (GET_CODE (op2) == SUBREG) + { + unsigned o = subreg_lowpart_offset (GET_MODE (op2), + GET_MODE (op1)); + if (o == SUBREG_BYTE (op2)) + op2 = SUBREG_REG (op2); + } + } + operands_match[c][i] = pre_operands_match_p (op1, op2);; + + /* An operand may not match itself. */ + if (c == i) + abort (); + + /* If C can be commuted with C+1, and C might need to match I, + then C+1 might also need to match I. */ + if (commutative >= 0) + { + if (c == commutative || c == commutative + 1) + { + int other = c + (c == commutative ? 1 : -1); + operands_match[other][i] + = pre_operands_match_p (recog_data.operand[other], + recog_data.operand[i]); + } + if (i == commutative || i == commutative + 1) + { + int other = i + (i == commutative ? 1 : -1); + operands_match[c][other] + = pre_operands_match_p (recog_data.operand[c], + recog_data.operand[other]); + } + /* Note that C is supposed to be less than I. + No need to consider altering both C and I because in + that case we would alter one into the other. */ + } + } + } + } + + /* Examine each operand that is a memory reference or memory address + and check addresses. */ + for (i = 0; i < noperands; i++) + { + RTX_CODE code = GET_CODE (recog_data.operand[i]); + + address_reloaded[i] = 0; + operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT + : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT + : RELOAD_OTHER); + address_type[i] + = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT_ADDRESS + : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT_ADDRESS + : RELOAD_OTHER); + + if (*constraints[i] == 0) + /* Ignore things like match_operator operands. */ + ; + else if (constraints[i][0] == 'p') + { + /* FIXME: denisc@overta.ru We don't use reload_address now. + define_address must be used here. */ + if (!memory_address_p (recog_data.operand_mode[i], + recog_data.operand[i])) + return 0; + } + else if (code == MEM) + { + /* FIXME: denisc@overta.ru We don't use reload_address now. + define_address must be used here. */ + if (!memory_address_p (recog_data.operand_mode[i], + XEXP (recog_data.operand[i], 0))) + return 0; + } + } + + /* Now see what we need for pseudo-regs. For this, we must consider + all the operands together against the register constraints. */ + + best = MAX_RECOG_OPERANDS * 2 + 600; + + swapped = 0; + try_swapped: + + /* The constraints are made of several alternatives. + Each operand's constraint looks like foo,bar,... with commas + separating the alternatives. The first alternatives for all + operands go together, the second alternatives go together, etc. + + First loop over alternatives. */ + + for (this_alternative_number = 0; + this_alternative_number < n_alternatives; + this_alternative_number++) + { + /* Loop over operands for one constraint alternative. */ + /* LOSERS counts those that don't fit this alternative + and would require loading. */ + + int losers = scan_alternative (this_alt, constraints, modified, + address_reloaded, operands_match, + swapped, &commutative); + + if (losers == 0) + return 1; + /* If this alternative can be made to work by reloading, + and it needs less reloading than the others checked so far, + record it as the chosen goal for reloading. */ + if (losers >= 0 && best > losers) + { + for (i = 0; i < noperands; i++) + if (! this_alt[i].win) + break; + + if (i == noperands) + return 1; + best = losers; + } + } + + /* If insn is commutative (it's safe to exchange a certain pair of operands) + then we need to try each alternative twice, + the second time matching those two operands + as if we had exchanged them. + To do this, really exchange them in operands. + + If we have just tried the alternatives the second time, + return operands to normal and drop through. */ + + if (commutative >= 0) + { + swapped = !swapped; + if (swapped) + { + recog_data.operand[commutative] = substed_operand[commutative + 1]; + recog_data.operand[commutative + 1] = substed_operand[commutative]; + + memcpy (constraints, recog_data.constraints, + noperands * sizeof (char *)); + goto try_swapped; + } + } + + return 0; + } + /* Increase the insn info table for handling SIZE elements. */ static void *************** compare_ra_info (ra1) *** 4261,4263 **** --- 4520,4683 ---- ra_info_free (ra2); } + + /* Static data for the next two routines. */ + + typedef struct change_t + { + rtx object; + int old_code; + rtx *loc; + rtx old; + } change_t; + + static change_t *changes; + static int changes_allocated; + + static int num_changes = 0; + + /* Validate a proposed change to OBJECT. LOC is the location in the rtl + at which NEW will be placed. If OBJECT is zero, no validation is done, + the change is simply made. + + If OBJECT must be an INSN, CALL_INSN, or JUMP_INSN, the insn will be + re-recognized with the change in place. + + IN_GROUP is nonzero if this is part of a group of changes that must be + performed as a group. In that case, the changes will be stored. The + function `ra_apply_change_group' will validate and apply the changes. + + If IN_GROUP is zero, this is a single change. Try to recognize the insn + or validate the memory reference with the change applied. If the result + is not valid for the machine, suppress the change and return zero. + Otherwise, perform the change and return 1. */ + + int + ra_validate_change (object, loc, new, in_group) + rtx object; + rtx *loc; + rtx new; + int in_group; + { + rtx old = *loc; + + if (old == new || rtx_equal_p (old, new)) + return 1; + + if (in_group == 0 && num_changes != 0) + abort (); + + *loc = new; + + /* Save the information describing this change. */ + if (num_changes >= changes_allocated) + { + if (changes_allocated == 0) + /* This value allows for repeated substitutions inside complex + indexed addresses, or changes in up to 5 insns. */ + changes_allocated = MAX_RECOG_OPERANDS * 5; + else + changes_allocated *= 2; + + changes = + (change_t*) xrealloc (changes, + sizeof (change_t) * changes_allocated); + } + + changes[num_changes].object = object; + changes[num_changes].loc = loc; + changes[num_changes].old = old; + + if (object) + { + /* Set INSN_CODE to force rerecognition of insn. Save old code in + case invalid. */ + changes[num_changes].old_code = INSN_CODE (object); + INSN_CODE (object) = -1; + } + + num_changes++; + + /* If we are making a group of changes, return 1. Otherwise, validate the + change group we made. */ + + if (in_group) + return 1; + else + return ra_apply_change_group (); + } + + /* Apply a group of changes previously issued with `ra_validate_change'. + Return 1 if all changes are valid, zero otherwise. */ + + int + ra_apply_change_group () + { + int i; + rtx last_validated = NULL_RTX; + + /* The changes have been applied and all INSN_CODEs have been reset to + force rerecognition. */ + + for (i = 0; i < num_changes; i++) + { + rtx object = changes[i].object; + + /* if there is no object to test or if it is the same as the one we + already tested, ignore it. */ + if (object == 0 || object == last_validated) + continue; + + if (!ra_check_constraints (object)) + { + rtx pat = PATTERN (object); + + if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER) + /* If this insn is a CLOBBER or USE, it is always valid, but is + never recognized. */ + continue; + else + break; + } + last_validated = object; + } + + if (i == num_changes) + { + basic_block bb; + + for (i = 0; i < num_changes; i++) + if (changes[i].object + && INSN_P (changes[i].object) + && (bb = BLOCK_FOR_INSN (changes[i].object))) + bb->flags |= BB_DIRTY; + + num_changes = 0; + return 1; + } + else + { + ra_cancel_changes (0); + return 0; + } + } + + /* Retract the changes numbered NUM and up. */ + + void + ra_cancel_changes (num) + int num; + { + int i; + + /* Back out all the changes. Do this in the opposite order in which + they were made. */ + for (i = num_changes - 1; i >= num; i--) + { + *changes[i].loc = changes[i].old; + if (changes[i].object && GET_CODE (changes[i].object) != MEM) + INSN_CODE (changes[i].object) = changes[i].old_code; + } + num_changes = num; + } + Index: pre-reload.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/pre-reload.h,v retrieving revision 1.1.2.7 diff -c -3 -p -r1.1.2.7 pre-reload.h *** pre-reload.h 20 Nov 2002 22:43:07 -0000 1.1.2.7 --- pre-reload.h 7 Jan 2003 23:47:34 -0000 *************** *** 1,5 **** /* Communication between reload.c, reload1.c, pre-reload.c and ra.c. ! Copyright (C) 2002 Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of GNU CC. --- 1,5 ---- /* Communication between reload.c, reload1.c, pre-reload.c and ra.c. ! Copyright (C) 2002, 2003 Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of GNU CC. *************** struct ra_ref *** 100,106 **** rtx insn; /* insn which contain register rtx */ int opno; /* operand number in insn */ rtx operand; /* operand which contain register rtx */ ! rtx *opernad_loc; /* *operand_loc = operand */ enum ra_ref_type type; /* type of operand */ struct ra_ref *matches; /* This reg must match */ struct ra_ref *matched; /* This reg matched by */ --- 100,106 ---- rtx insn; /* insn which contain register rtx */ int opno; /* operand number in insn */ rtx operand; /* operand which contain register rtx */ ! rtx *operand_loc; /* *operand_loc = operand */ enum ra_ref_type type; /* type of operand */ struct ra_ref *matches; /* This reg must match */ struct ra_ref *matched; /* This reg matched by */ *************** extern struct ra_info *ra_info_init P *** 213,225 **** extern void ra_info_free PARAMS ((struct ra_info *)); extern void debug_hard_reg_set PARAMS ((HARD_REG_SET)); extern void compare_ra_info PARAMS ((struct ra_info *)); struct df2ra { ra_ref **def2def; ra_ref **use2use; }; #define DF2RA(DF2RA, DF_REF) (*(DF_REF_REG_DEF_P (DF_REF) \ ! ? &(DF2RA).def2def[DF_REF_ID (DF_REF)] \ : &(DF2RA).use2use[DF_REF_ID (DF_REF)])) --- 213,230 ---- extern void ra_info_free PARAMS ((struct ra_info *)); extern void debug_hard_reg_set PARAMS ((HARD_REG_SET)); extern void compare_ra_info PARAMS ((struct ra_info *)); + extern int ra_check_constraints PARAMS ((rtx)); + extern int ra_validate_change PARAMS ((rtx, rtx *, rtx, int)); + extern int ra_apply_change_group PARAMS ((void)); + extern void ra_cancel_changes PARAMS ((int)); struct df2ra { ra_ref **def2def; ra_ref **use2use; }; + extern struct df2ra df2ra; #define DF2RA(DF2RA, DF_REF) (*(DF_REF_REG_DEF_P (DF_REF) \ ! ? &(DF2RA).def2def[DF_REF_ID (DF_REF)] \ : &(DF2RA).use2use[DF_REF_ID (DF_REF)])) From gcc-patches-return-75216-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 01:19:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21869 invoked by alias); 8 Jan 2003 01:19:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21862 invoked from network); 8 Jan 2003 01:19:01 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 8 Jan 2003 01:19:01 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h081ImV04530; Tue, 7 Jan 2003 17:18:48 -0800 Date: Tue, 7 Jan 2003 17:18:48 -0800 From: Geoff Keating Message-Id: <200301080118.h081ImV04530@desire.geoffk.org> To: per@bothner.com CC: gcc-patches@gcc.gnu.org In-reply-to: <3E1B31CE.8010208@bothner.com> (message from Per Bothner on Tue, 07 Jan 2003 12:00:14 -0800) Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier References: <3E19F315.1070808@bothner.com> <20030106230843.GA30910@daikokuya.co.uk> <3E1B04D7.3000800@bothner.com> <3E1B31CE.8010208@bothner.com> > Date: Tue, 07 Jan 2003 12:00:14 -0800 > From: Per Bothner > User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 > X-Accept-Language: en-us, en > Cc: Gcc Patch List > X-OriginalArrivalTime: 07 Jan 2003 20:22:56.0313 (UTC) FILETIME=[90569290:01C2B68A] > > Geoff Keating wrote: > > Could you also run a test on some chunk of code that doesn't change? > > The current patch only effects the C front-end (and ObjC, as I believe > it also uses c-tree.h). I have separate patches for C++, but I wanted > to get the C patches checked-in first, since the C++ patches require > separate approval. > > But I guess I might as well re-test the C++ patch, and submit that > as soon as I've done that, without waiting for approval on the existing > patch. For C I have this: spu --files 1 --functions 20 --function-length 10 --lib-enums 2000 \ --enumerators 8 --lib-structs 1000 --fields 10 --lib-functions 10000 -- - Geoffrey Keating From gcc-patches-return-75217-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 02:42:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17180 invoked by alias); 8 Jan 2003 02:42:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15643 invoked from network); 8 Jan 2003 02:37:27 -0000 Received: from unknown (HELO mms1.broadcom.com) (63.70.210.58) by 209.249.29.67 with SMTP; 8 Jan 2003 02:37:27 -0000 Received: from 63.70.210.1 by mms1.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Tue, 07 Jan 2003 18:36:44 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id SAA16668; Tue, 7 Jan 2003 18:37:02 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h082b4ER011072; Tue, 7 Jan 2003 18:37:04 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id SAA24769; Tue, 7 Jan 2003 18:36:59 -0800 (PST) To: "Eric Christopher" cc: "Richard Sandiford" , gcc-patches@gcc.gnu.org Subject: Re: [mips patch rfa] Add MIPS32 Release 2 support. References: <1041958642.27191.9.camel@ghostwheel.ges.redhat.com> From: cgd@broadcom.com Date: 07 Jan 2003 18:36:59 -0800 In-Reply-To: "Eric Christopher"'s message of "07 Jan 2003 08:57:22 -0800" Message-ID: Lines: 47 MIME-Version: 1.0 X-WSS-ID: 12055136773019-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit Oh, FYI, while i remember: Eric asked me off-list about the !TARGET_MIPS16 in the ISA_HAS_ROTR_SI and ISA_HAS_ROTR_DI macros, i.e. why I added them. He asked me to check the modifications against mips64vr-elf w/ -march=vr4100 -mips16 flags. Logically, that should make no difference, since vr4100 (at least as described in gcc; i dunno about reality 8-) doesn't support mips16. (AFAIK, there are no architectures currently in GCC which support hw rotate _AND_ MIPS16.) In case i forget to mention later, in practice it made no difference: to the gcc 'check-gcc' test results were unchanged before and after my patch (i.e., an updated version that i'm hoping to post later tonight 8-). The point to the change was that on an architecture that _does_ support rotates in HW (and presumably does support MIPS16 8-), if you use -mips16, you will lose. For instance, imagine that vr5400 supported MIPS16. One might run the compiler as: mips64vr-elf.install.cleanish/bin/mips64vr-elf-gcc -o /tmp/x.o -c -march=vr5400 -mips16 ../combined/gcc/testsuite/gcc.c-torture/execute/20020226-1.c /tmp/ccd3aOg1.s: Assembler messages: /tmp/ccd3aOg1.s:137: Error: unrecognized opcode `ror' /tmp/ccd3aOg1.s:146: Error: unrecognized opcode `ror' /tmp/ccd3aOg1.s:157: Error: unrecognized opcode `ror' /tmp/ccd3aOg1.s:166: Error: unrecognized opcode `ror' /tmp/ccd3aOg1.s:180: Error: unrecognized opcode `dror' /tmp/ccd3aOg1.s:189: Error: unrecognized opcode `dror' /tmp/ccd3aOg1.s:203: Error: unrecognized opcode `dror' /tmp/ccd3aOg1.s:212: Error: unrecognized opcode `dror' /tmp/ccd3aOg1.s:316: Error: unrecognized opcode `ror' /tmp/ccd3aOg1.s:345: Error: unrecognized opcode `ror' /tmp/ccd3aOg1.s:374: Error: unrecognized opcode `dror' /tmp/ccd3aOg1.s:403: Error: unrecognized opcode `dror' That is, of course, because it's trying to use rotate ops in ".set mips16" code. Hence the little bit of my patch which added !TARGET_MIPS16 to the ISA_HAS_ROTR_* macros. 8-) cgd From gcc-patches-return-75218-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 03:03:46 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28713 invoked by alias); 8 Jan 2003 03:03:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28706 invoked from network); 8 Jan 2003 03:03:45 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 8 Jan 2003 03:03:45 -0000 Received: from tornado.toronto.redhat.com (IDENT:ByG29bX2fiPYY9uHDCwYcQo1M9psVSMy@tornado.toronto.redhat.com [172.16.14.228]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0833WY19307 for ; Tue, 7 Jan 2003 22:03:32 -0500 Received: from tornado.toronto.redhat.com (localhost [127.0.0.1]) by tornado.toronto.redhat.com (8.12.5/8.12.5) with ESMTP id h0833Wpw002234 for ; Tue, 7 Jan 2003 22:03:32 -0500 Received: (from dnovillo@localhost) by tornado.toronto.redhat.com (8.12.5/8.12.5/Submit) id h0833V4m002232 for gcc-patches@gcc.gnu.org; Tue, 7 Jan 2003 22:03:31 -0500 Date: Tue, 7 Jan 2003 22:03:31 -0500 From: Diego Novillo To: gcc-patches@gcc.gnu.org Subject: [tree-ssa] Minor changes to debugging dumps [patch] Message-ID: <20030108030331.GA2199@tornado.toronto.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline User-Agent: Mutt/1.4i Organization: Red Hat Canada Now that Jason moved dump_function from cp/optimize.c, we can use it instead of dump_current_function. Diego. * tree-dump.c (dump_function_to_file): New function. (dump_function): Call it. Convert argument declaration to K&R format. * tree-dump.h: Include splay-tree.h. (dump_function_to_file): Declare. * tree-optimize.c (optimize_function_tree): Remove unused variables dump_file and dump_flags. (dump_current_function): Remove. Update all users by calling dump_function instead. * tree.h (dump_current_function): Remove declaration. * Makefile.in (TREE_DUMP_H): Define. Update targets depending on tree-dump.h to depend on $(TREE_DUMP_H). (tree-ssa-cp.o): Remove unused target. (tree-cfg.o): Add dependency on $(TREE_DUMP_H). (tree-optimize.o): Likewise. (tree-ssa-dce.o): Likewise. (tree-ssa-ccp.o): Likewise. (tree-ssa-pre.o): Likewise. Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v retrieving revision 1.903.2.60 diff -d -u -p -r1.903.2.60 Makefile.in --- Makefile.in 3 Jan 2003 01:57:16 -0000 1.903.2.60 +++ Makefile.in 8 Jan 2003 02:55:33 -0000 @@ -591,6 +591,7 @@ C_TREE_H = c-tree.h $(C_COMMON_H) SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h PREDICT_H = predict.h predict.def CPPLIB_H = cpplib.h line-map.h +TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H) TREE_FLOW_H = tree-flow.h tree-flow-inline.h bitmap.h $(BASIC_BLOCK_H) \ hard-reg-set.h tree-simple.h @@ -1271,7 +1272,7 @@ c-semantics.o : c-semantics.c $(CONFIG_H $(EXPR_H) $(PREDICT_H) c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ - $(C_TREE_H) tree-dump.h + $(C_TREE_H) $(TREE_DUMP_H) # Language-independent files. @@ -1388,7 +1389,7 @@ tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) real.h gt-tree.h tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ $(C_TREE_H) flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ - $(EXPR_H) $(SPLAY_TREE_H) tree-dump.h + $(EXPR_H) $(SPLAY_TREE_H) $(TREE_DUMP_H) tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ $(RTL_H) expr.h flags.h params.h input.h insn-config.h $(INTEGRATE_H) \ $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h langhooks.h \ @@ -1424,14 +1425,11 @@ tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $ tree-ssa-pre.o : tree-ssa-pre.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) \ $(GGC_H) output.h diagnostic.h ssa.h errors.h toplev.h $(TIMEVAR_H) \ - $(TM_H) coretypes.h -tree-ssa-cp.o : tree-ssa-cp.c $(TREE_FLOW_H) $(CONFIG_H) \ - $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) \ - $(GGC_H) output.h diagnostic.h ssa.h errors.h toplev.h \ - $(TM_H) coretypes.h + $(TM_H) coretypes.h $(TREE_DUMP_H) tree-cfg.o : tree-cfg.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) flags.h output.h \ - diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h + diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \ + $(TREE_DUMP_H) tree-dfa.o : tree-dfa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h diagnostic.h \ errors.h tree-inline.h $(HASHTAB_H) flags.h function.h $(TIMEVAR_H) \ @@ -1439,7 +1437,7 @@ tree-dfa.o : tree-dfa.c $(TREE_FLOW_H) $ tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) \ $(GGC_H) output.h diagnostic.h ssa.h errors.h flags.h tree-alias-common.h \ - tree-dchain.h $(TIMEVAR_H) $(TM_H) coretypes.h + tree-dchain.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) c-simplify.o : c-simplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) errors.h \ $(C_TREE_H) $(C_COMMON_H) diagnostic.h tree-simple.h varray.h flags.h \ langhooks.h toplev.h rtl.h $(TREE_FLOW_H) langhooks-def.h \ @@ -1600,13 +1598,13 @@ ssa-dce.o : ssa-dce.c $(CONFIG_H) $(SYST $(BASIC_BLOCK_H) ssa.h insn-config.h $(RECOG_H) output.h tree-ssa-dce.o : tree-ssa-dce.c $(CONFIG_H) system.h errors.h $(TREE_H) \ $(RTL_H) $(TM_P_H) $(TREE_FLOW_H) diagnostic.h $(TIMEVAR_H) $(TM_H) \ - coretypes.h + coretypes.h $(TREE_DUMP_H) ssa-ccp.o : ssa-ccp.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h \ $(BASIC_BLOCK_H) ssa.h insn-config.h $(RECOG_H) output.h \ errors.h $(GGC_H) df.h function.h tree-ssa-ccp.o : tree-ssa-ccp.c $(CONFIG_H) system.h errors.h $(TREE_H) \ $(RTL_H) $(TM_P_H) $(TREE_FLOW_H) diagnostic.h tree-inline.h \ - $(TIMEVAR_H) $(TM_H) coretypes.h + $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) df.o : df.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) coretypes.h $(TM_H) $(RTL_H) \ insn-config.h $(RECOG_H) function.h $(REGS_H) $(OBSTACK_H) hard-reg-set.h \ $(BASIC_BLOCK_H) df.h $(FIBHEAP_H) Index: c-decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-decl.c,v retrieving revision 1.334.2.31 diff -d -u -p -r1.334.2.31 c-decl.c --- c-decl.c 3 Jan 2003 01:57:18 -0000 1.334.2.31 +++ c-decl.c 8 Jan 2003 02:55:33 -0000 @@ -6528,12 +6528,7 @@ c_expand_body (fndecl, nested_p, can_def if (!flag_disable_simple && simplify_function_tree (fndecl)) { /* Debugging dump after simplification. */ - dump_file = dump_begin (TDI_simple, &dump_flags); - if (dump_file) - { - dump_current_function (dump_file, dump_flags); - dump_end (TDI_simple, dump_file); - } + dump_function (TDI_simple, fndecl); if (flag_mudflap) { Index: tree-cfg.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/tree-cfg.c,v retrieving revision 1.1.4.41 diff -d -u -p -r1.1.4.41 tree-cfg.c --- tree-cfg.c 19 Dec 2002 22:27:26 -0000 1.1.4.41 +++ tree-cfg.c 8 Jan 2003 02:55:34 -0000 @@ -37,6 +37,7 @@ Boston, MA 02111-1307, USA. */ #include "diagnostic.h" #include "tree-flow.h" #include "timevar.h" +#include "tree-dump.h" /** @file tree-cfg.c @brief Build the control flow graph for a function tree. @@ -1532,7 +1533,7 @@ dump_tree_cfg (file, flags) } if (n_basic_blocks > 0) - dump_current_function (file, flags|TDF_BLOCK); + dump_function_to_file (current_function_decl, file, flags|TDF_BLOCK); } Index: tree-dump.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-dump.c,v retrieving revision 1.6.2.19 diff -d -u -p -r1.6.2.19 tree-dump.c --- tree-dump.c 3 Jan 2003 01:57:23 -0000 1.6.2.19 +++ tree-dump.c 8 Jan 2003 02:55:34 -0000 @@ -854,7 +854,9 @@ dump_switch_p (arg) /* Dump FUNCTION_DECL FN as tree dump PHASE. */ void -dump_function (enum tree_dump_index phase, tree fn) +dump_function (phase, fn) + enum tree_dump_index phase; + tree fn; { FILE *stream; int flags; @@ -868,11 +870,39 @@ dump_function (enum tree_dump_index phas IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fn))); fprintf (stream, ";; enabled by -%s\n", dump_flag_name (phase)); fprintf (stream, "\n"); - - if (flags & TDF_RAW) - dump_node (fn, TDF_SLIM | flags, stream); - else - print_generic_stmt (stream, DECL_SAVED_TREE (fn), 0); + + dump_function_to_file (fn, stream, flags); dump_end (phase, stream); } +} + + +/* Dump FUNCTION_DECL FN to file STREAM using FLAGS (see TDF_* in tree.h) */ + +void +dump_function_to_file (fn, stream, flags) + tree fn; + FILE *stream; + int flags; +{ + tree arg; + + fprintf (stream, "%s (", (*lang_hooks.decl_printable_name) (fn, 2)); + + arg = DECL_ARGUMENTS (fn); + while (arg) + { + print_generic_expr (stream, arg, 0); + if (TREE_CHAIN (arg)) + fprintf (stream, ", "); + arg = TREE_CHAIN (arg); + } + fprintf (stream, ")\n"); + + if (flags & TDF_RAW) + dump_node (fn, TDF_SLIM | flags, stream); + else + print_generic_stmt (stream, DECL_SAVED_TREE (fn), flags); + + fprintf (stream, "\n\n"); } Index: tree-dump.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-dump.h,v retrieving revision 1.3.2.1 diff -d -u -p -r1.3.2.1 tree-dump.h --- tree-dump.h 3 Jan 2003 01:57:23 -0000 1.3.2.1 +++ tree-dump.h 8 Jan 2003 02:55:34 -0000 @@ -22,6 +22,8 @@ Software Foundation, 59 Temple Place - S #ifndef GCC_TREE_DUMP_H #define GCC_TREE_DUMP_H +#include "splay-tree.h" + /* Flags used with queue functions. */ #define DUMP_NONE 0 #define DUMP_BINFO 1 @@ -93,5 +95,7 @@ extern void queue_and_dump_type PARAMS ((dump_info_p, tree)); extern void dump_function PARAMS ((enum tree_dump_index, tree)); +extern void dump_function_to_file + PARAMS ((tree, FILE *, int)); #endif /* ! GCC_TREE_DUMP_H */ Index: tree-optimize.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/tree-optimize.c,v retrieving revision 1.1.4.28 diff -d -u -p -r1.1.4.28 tree-optimize.c --- tree-optimize.c 29 Dec 2002 22:04:59 -0000 1.1.4.28 +++ tree-optimize.c 8 Jan 2003 02:55:34 -0000 @@ -35,6 +35,7 @@ Boston, MA 02111-1307, USA. */ #include "flags.h" #include "tree-flow.h" #include "tree-dchain.h" +#include "tree-dump.h" #include "timevar.h" /** @file tree-optimize.c @@ -49,8 +50,6 @@ optimize_function_tree (fndecl) tree fndecl; { tree fnbody; - FILE *dump_file; - int dump_flags; /* Don't bother doing anything if the program has errors. */ if (errorcount || sorrycount) @@ -104,51 +103,9 @@ optimize_function_tree (fndecl) #endif /* Debugging dump after optimization. */ - dump_file = dump_begin (TDI_optimized, &dump_flags); - if (dump_file) - { - dump_current_function (dump_file, dump_flags); - dump_end (TDI_optimized, dump_file); - dump_file = NULL; - } + dump_function (TDI_optimized, fndecl); /* Flush out flow graph and SSA data. */ delete_tree_ssa (fnbody); delete_tree_cfg (); -} - - -/** @brief Dump the body of current_function_decl to DUMP_FILE. - @param dump_file is the file to dump the function body to. - @param dump_flags affects dumping options (see TDF_* in tree.h). */ - -void -dump_current_function (dump_file, dump_flags) - FILE *dump_file; - int dump_flags; -{ - tree fnbody; - tree arg; - - fprintf (dump_file, "%s(", get_name (current_function_decl)); - - arg = DECL_ARGUMENTS (current_function_decl); - while (arg) - { - print_generic_expr (dump_file, arg, 0); - if (TREE_CHAIN (arg)) - fprintf (dump_file, ", "); - arg = TREE_CHAIN (arg); - } - - fprintf (dump_file, ")\n"); - - fnbody = DECL_SAVED_TREE (current_function_decl); - - if (dump_flags & TDF_RAW) - dump_node (fnbody, TDF_SLIM | dump_flags, dump_file); - else - print_generic_stmt (dump_file, fnbody, dump_flags); - - fprintf (dump_file, "\n\n"); } Index: tree-ssa-ccp.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa-ccp.c,v retrieving revision 1.1.2.38 diff -d -u -p -r1.1.2.38 tree-ssa-ccp.c --- tree-ssa-ccp.c 6 Dec 2002 20:16:28 -0000 1.1.2.38 +++ tree-ssa-ccp.c 8 Jan 2003 02:55:34 -0000 @@ -50,6 +50,7 @@ Software Foundation, 59 Temple Place - S #include "tree-inline.h" #include "tree-flow.h" #include "tree-simple.h" +#include "tree-dump.h" #include "timevar.h" /* Possible lattice values. */ @@ -170,8 +171,6 @@ tree_ssa_ccp (fndecl) /* Debugging dumps. */ if (dump_file) { - dump_current_function (dump_file, dump_flags); - if (dump_flags & TDF_DETAILS) { compute_reaching_defs (); @@ -182,8 +181,9 @@ tree_ssa_ccp (fndecl) } dump_end (TDI_ccp, dump_file); - dump_file = NULL; } + + dump_function (TDI_ccp, fndecl); } Index: tree-ssa-dce.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa-dce.c,v retrieving revision 1.1.2.18 diff -d -u -p -r1.1.2.18 tree-ssa-dce.c --- tree-ssa-dce.c 6 Dec 2002 20:16:28 -0000 1.1.2.18 +++ tree-ssa-dce.c 8 Jan 2003 02:55:34 -0000 @@ -60,6 +60,7 @@ Software Foundation, 59 Temple Place - S #include "diagnostic.h" #include "tree-flow.h" #include "tree-simple.h" +#include "tree-dump.h" #include "timevar.h" @@ -164,12 +165,14 @@ mark_control_parent_necessary (bb) static void print_stats () { + dump_file = dump_begin (TDI_dce, &dump_flags); if (dump_file && (dump_flags & (TDF_STATS|TDF_DETAILS))) { float percg; percg = ((float) stats.removed / (float) stats.total) * 100; fprintf (dump_file, "Removed %d of %d statements (%d%%)\n", stats.removed, stats.total, (int) percg); + dump_end (TDI_dce, dump_file); } } @@ -485,13 +488,11 @@ tree_ssa_eliminate_dead_code (fndecl) remove_dead_stmts (); + dump_end (TDI_dce, dump_file); + timevar_pop (TV_TREE_DCE); - if (dump_file) - { - /* Dump the function tree after DCE. */ - dump_current_function (dump_file, dump_flags); - print_stats (); - fclose (dump_file); - } + /* Dump the function tree after DCE. */ + dump_function (TDI_dce, fndecl); + print_stats (); } Index: tree-ssa-pre.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa-pre.c,v retrieving revision 1.1.4.42 diff -d -u -p -r1.1.4.42 tree-ssa-pre.c --- tree-ssa-pre.c 4 Jan 2003 19:29:25 -0000 1.1.4.42 +++ tree-ssa-pre.c 8 Jan 2003 02:55:34 -0000 @@ -44,6 +44,7 @@ Boston, MA 02111-1307, USA. */ #include "tree-simple.h" #include "tree-flow.h" #include "tree-inline.h" +#include "tree-dump.h" #include "timevar.h" #define EXTRANEOUS_EPHI_REMOVAL 0 @@ -3327,12 +3328,9 @@ tree_perform_ssapre (fndecl) splay_tree_delete (new_stmt_map); splay_tree_delete (old_new_map); + dump_end (TDI_pre, dump_file); timevar_pop (TV_TREE_PRE); /* Debugging dump after SSA PRE */ - if (dump_file) - { - dump_current_function (dump_file, dump_flags); - dump_end (TDI_pre, dump_file); - } + dump_function (TDI_pre, fndecl); } Index: tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree.h,v retrieving revision 1.342.2.36 diff -d -u -p -r1.342.2.36 tree.h --- tree.h 3 Jan 2003 01:57:24 -0000 1.342.2.36 +++ tree.h 8 Jan 2003 02:55:35 -0000 @@ -3197,7 +3197,6 @@ extern void declare_nonlocal_label PARAM /* In tree-optimize.c. */ void optimize_function_tree PARAMS ((tree)); -void dump_current_function PARAMS ((FILE *, int)); /* If KIND=='I', return a suitable global initializer (constructor) name. If KIND=='D', return a suitable global clean-up (destructor) name. */ From gcc-patches-return-75219-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 03:27:09 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32475 invoked by alias); 8 Jan 2003 03:27:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32148 invoked from network); 8 Jan 2003 03:24:36 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 8 Jan 2003 03:24:36 -0000 Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h083O6du025547 for ; Tue, 7 Jan 2003 22:24:06 -0500 Received: (from pinard@localhost) by trex.iro.umontreal.ca (8.11.4/8.11.1) id h083O5v27722; Tue, 7 Jan 2003 22:24:05 -0500 Date: Tue, 7 Jan 2003 22:24:05 -0500 Message-Id: <200301080324.h083O5v27722@trex.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: New Spanish PO file for `gcc' X-MailScanner: Found to be clean X-MailScanner-SpamScore: s Hello, gentle maintainer. This is a message from the Translation Project robot. A revised PO file, for programs using the textual domain `gcc', has been submitted by the team of translators taking care of the Spanish language. This particular file, along with all other PO files pertaining to the same textual domain, is available as: > http://www.iro.umontreal.ca/contrib/po/maint/gcc/es.po The file should soon be made available in mirror sites as: > ftp://ftp.unex.es/pub/gnu-i18n/po/maint/gcc/es.po > http://translation.sf.net/maint/gcc/es.po > ftp://tiger.informatik.hu-berlin.de/pub/po/maint/gcc/es.po This file has already been sent to you separately on 2003-01-07, as a MIME invoice unpacking the file `gcc-3.3-b20021230.es.po'. The following HTML page should also be updated by tomorrow. > http://www.iro.umontreal.ca/contrib/po/HTML/domain-gcc.html Please consider including all PO files, as they stand, in the `po/' subdirectory of your next release of programs using that textual domain, whether it is official or pretest. Whenever you have a distribution ready which holds a newer PO Template, please send the URL of this distribution to the address below. The distribution could be a pretest or a snapshot, it does not even have to compile. This is to be used by translators, when they need to get some translation context from your sources. Within the Translation Project, each PO Template file should have different version numbers, but since it is not OK to have two different distributions using same version numbers, this is not a problem in practice. Contact me if any question arises. Thanks for your collaboration, The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca From gcc-patches-return-75220-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 03:27:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32704 invoked by alias); 8 Jan 2003 03:27:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32154 invoked from network); 8 Jan 2003 03:24:39 -0000 Received: from unknown (HELO mercure.iro.umontreal.ca) (132.204.24.67) by 209.249.29.67 with SMTP; 8 Jan 2003 03:24:39 -0000 Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206]) by mercure.iro.umontreal.ca (8.12.1/8.12.1) with ESMTP id h083O6du025546 for ; Tue, 7 Jan 2003 22:24:06 -0500 Received: (from pinard@localhost) by trex.iro.umontreal.ca (8.11.4/8.11.1) id h083O5d27725; Tue, 7 Jan 2003 22:24:05 -0500 Date: Tue, 7 Jan 2003 22:24:05 -0500 Message-Id: <200301080324.h083O5d27725@trex.iro.umontreal.ca> From: Translation Project Robot To: gcc-patches@gcc.gnu.org Subject: Contents of file `gcc-3.3-b20021230.es.po.gz' MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-MailScanner: Found to be clean --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=gcc-3.3-b20021230.es.po.gz Content-Transfer-Encoding: base64 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 q4UMAA== --=-=-= The Translation Project robot, in the name of your translation coordinator. mailto:translation@iro.umontreal.ca --=-=-=-- From gcc-patches-return-75221-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 04:38:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20009 invoked by alias); 8 Jan 2003 04:38:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19211 invoked from network); 8 Jan 2003 04:36:12 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 209.249.29.67 with SMTP; 8 Jan 2003 04:36:12 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.12.5/8.12.5) with ESMTP id h084ZxW8023160; Tue, 7 Jan 2003 20:36:00 -0800 Message-ID: <3E1BA55B.7030902@bothner.com> Date: Tue, 07 Jan 2003 20:13:15 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Michael Johnson CC: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: Re: HELP me unsubscribe References: <20030107212233.GA764@insatnet.nu> In-Reply-To: <20030107212233.GA764@insatnet.nu> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Michael Johnson wrote: > Please help me to unsubscribe, *anyone* Read http://gcc.gnu.org/lists.html (for gcc-patches) and http://sources.redhat.com/lists.html (for binutils). -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From gcc-patches-return-75222-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 05:23:04 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32427 invoked by alias); 8 Jan 2003 05:23:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32418 invoked from network); 8 Jan 2003 05:23:02 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 8 Jan 2003 05:23:02 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id AAA08070; Wed, 8 Jan 2003 00:22:50 -0500 (EST) Date: Wed, 8 Jan 2003 00:22:50 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301080522.AAA08070@caip.rutgers.edu> To: jh@suse.cz Subject: Re: Add conditional addition patterns Cc: gcc-patches@gcc.gnu.org References: <20021127122658.GB30020@atrey.karlin.mff.cuni.cz> <20030107203336.GD12992@redhat.com> <20030107204014.GC10268@kam.mff.cuni.cz> Jan - this patch: > Fri Nov 22 01:25:59 CET 2002 Jan Hubicka > * genopinit.c (optabs): Add addc_optab. > * ifcvt.c (noce_try_store_flag): Rename to ... > (noce_try_addcc): ... this one; handle generic conditional increment. > (noce_process_if_block): Update noce_try_addcc call. > * optabs.c (emit_conditional_add): New. > (init_obtabs): Initialize addc_optab. > * optabs.h (optab_index): Add OTI_addcc. > (addcc_optab): New macro. > * md.texi: Document addMcc caused three new warnings from gcc (and a bootstrap failure with irix6 stage1 cc) gcc warnings: ifcvt.c:886: warning: implicit declaration of function `emit_conditional_add' ifcvt.c:892: warning: assignment makes pointer from integer without a cast optabs.c:4251: warning: function declaration isn't a prototype irix6 cc error: ifcvt.c", line 886: error(1515): a value of type "int" cannot be assigned to an entity of type "rtx" target = emit_conditional_add (if_info->x, code, You just need to prototype emit_conditional_add somewhere so that both ifcvt.c and optabs.c see it. Perhaps expr.h? Would you please fix this? Thanks, --Kaveh -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75223-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 05:45:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5632 invoked by alias); 8 Jan 2003 05:45:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5623 invoked from network); 8 Jan 2003 05:45:22 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 8 Jan 2003 05:45:22 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h085jAr17950 for ; Wed, 8 Jan 2003 00:45:10 -0500 Date: Wed, 8 Jan 2003 00:45:10 -0500 (EST) From: Jeff Sturm To: gcc-patches@gcc.gnu.org Subject: Fix target/9210 Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Gcc generates bad code for the following input with -fPIC on powerpc-linux: static struct closure { char tramp[24]; } cl; typedef int (*closure_test_type)(int, float); void ffitest(void) { (*((closure_test_type)(&cl)))(1, 2.0); } current_file_function_operand() doesn't recognize that cl is a local symbol because static data objects don't have SYMBOL_REF_FLAG set. Currently this causes a bootstrap failure in libffi, as reported in target/9210. Bootstrapped and regression tested on powerpc-unknown-linux-gnu. OK for mainline and 3.3 branch? 2003-01-08 Jeff Sturm * config/rs6000/rs6000.c (rs6000_elf_encode_section_info): Set SYMBOL_REF_FLAG on local data sym_ref. Fixes PR 9210. Index: config/rs6000/rs6000.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.407 diff -u -p -r1.407 rs6000.c --- config/rs6000/rs6000.c 3 Jan 2003 23:09:33 -0000 1.407 +++ config/rs6000/rs6000.c 7 Jan 2003 22:42:37 -0000 @@ -12627,11 +12627,15 @@ rs6000_elf_encode_section_info (decl, fi && DEFAULT_ABI == ABI_V4 && TREE_CODE (decl) == VAR_DECL) { + rtx sym_ref = XEXP (DECL_RTL (decl), 0); int size = int_size_in_bytes (TREE_TYPE (decl)); tree section_name = DECL_SECTION_NAME (decl); const char *name = (char *)0; int len = 0; + if ((*targetm.binds_local_p) (decl)) + SYMBOL_REF_FLAG (sym_ref) = 1; + if (section_name) { if (TREE_CODE (section_name) == STRING_CST) @@ -12658,7 +12662,6 @@ rs6000_elf_encode_section_info (decl, fi || (len == sizeof (".PPC.EMB.sbss0") - 1 && strcmp (name, ".PPC.EMB.sbss0") == 0)))) { - rtx sym_ref = XEXP (DECL_RTL (decl), 0); size_t len = strlen (XSTR (sym_ref, 0)); char *str = alloca (len + 2); From gcc-patches-return-75224-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 06:43:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21695 invoked by alias); 8 Jan 2003 06:43:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20032 invoked from network); 8 Jan 2003 06:38:30 -0000 Received: from unknown (HELO mms3.broadcom.com) (63.70.210.38) by 209.249.29.67 with SMTP; 8 Jan 2003 06:38:30 -0000 Received: from 63.70.210.1 by mms3.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Tue, 07 Jan 2003 22:38:10 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id WAA02651; Tue, 7 Jan 2003 22:38:02 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h086c4ER013449; Tue, 7 Jan 2003 22:38:04 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id WAA25041; Tue, 7 Jan 2003 22:38:00 -0800 (PST) To: "Richard Sandiford" , echristo@redhat.com cc: gcc-patches@gcc.gnu.org Subject: [mips patch' rfa] Add MIPS32 Release 2 support. References: From: cgd@broadcom.com Date: 07 Jan 2003 22:38:00 -0800 In-Reply-To: "Richard Sandiford"'s message of "07 Jan 2003 20:54:21 +0000" Message-ID: Lines: 573 MIME-Version: 1.0 X-WSS-ID: 120518D882472-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit As before, adjusted for feedback. One oustanding issue: __mips=32 or __mips=33 for MIPS32r2. I just checked the Algorithmics sde-mips gcc binary (uh, i couldn't find sources or an offer for sources on their web site ... would others look and sanity check that i'm not missing something obvious... www.algor.co.uk), gcc -dumpspecs. They do __mips=32, and add an additional define. I'll do the former since it seems to make sense. I won't do the latter, uh, because if they still can't be bothered to participate in the open GNU tools development process.... "not my problem." tested for mipsisa32-elf on the sim (check-gcc only, no c++ or fortran), no change in test results. tested mipsisa32r2-elf (same way) against mipsisa32-elf w/o new instructions in the sim, to verify that the new insns are being generated. tested w/ new instructions, no changes from mipsisa32-elf. checked mips64vr-elf w/ -march=vr4100 -mips16 before and after, no change. (see previous mail for more about that.) cgd -- Chris Demetriou Broadcom Corporation Principal Design Engineer Broadband Processor Business Unit Any opinions expressed in this message are mine, not necessarily Broadcom's. -- 2003-01-07 Chris Demetriou * config.gcc (mipsisa32r2-*-elf*, mipsisa32r2el-*-elf*): New targets, to support MIPS32 Release 2 (MIPS32R2) configurations. * config/mips/mips.h (enum processor_type): Rename PROCESSOR_R4KC to PROCESSOR_4KC, PROCESSOR_R5KC to PROCESSOR_5KC, and PROCESSOR_R20KC to PROCESSOR_20KC. Add PROCESSOR_M4K. (TARGET_MIPS4KC, TARGET_MIPS5KC): Update for the renaming. (ISA_MIPS32R2): New define. (TARGET_CPU_CPP_BUILTINS, GENERATE_MULT3_SI, ISA_HAS_CONDMOVE) (ISA_HAS_8CC, ISA_HAS_MADD_MSUB, ISA_HAS_CLZ_CLO) (ISA_HAS_PREFETCH): Add support for MIPS32R2. (MIPS_ISA_DEFAULT): Likewise. Also, fix indentation. (ISA_HAS_ROTR_SI): Add support for MIPS32R2, and avoid if compiling MIPS16 code. (ISA_HAS_ROTR_DI): Do not use if compiling MIPS16 code, and fix comment. (ISA_HAS_SEB_SEH): New define. (ASM_SPEC, LINK_SPEC): Pass -mips32r2 to assembler and linker. * config/mips/mips.c (mips_cpu_info_table): Adjust for enum processor_type value renaming. Add support for MIPS32R2. Clean up comments, and move "sb1" entry with other MIPS64 CPU entries. (override_options): Reimplement -mipsN option handling so that it will work correctly for -mips32r2. Avoid branch-likely instructions on MIPS32R2. * config/mips/mips.md (mulsi3_mult3): Add support for MIPS32R2. (extendhisi2): Use extendhisi2_hw if ISA_HAS_SEB_SEH. (extendqisi2): Use extendqisi2_hw if ISA_HAS_SEB_SEH. (extendhisi2_hw, extendqisi2_hw): New. * config/mips/netbsd.h (TARGET_CPU_CPP_BUILTINS): Add support for MIPS32R2. (LINK_SPEC): Pass -mips32r2 to linker. * config/mips/t-isa3264: Built -mips32r2 multilibs. * doc/invoke.texi (MIPS Options): Add -mips32r2, add support for mips32r2 in the -march description. Alphabetically sort CPU names in the -march description. Add long-missed -mips32 and -mips64 to MIPS option summary. * config.gcc: Update copyright years to include 2003. * config/mips/mips.c: Likewise. * config/mips/mips.h: Likewise. * config/mips/mips.md: Likewise. * config/mips/netbsd.h: Likewise. * doc/invoke.texi: Likewise. diff -rup ../combined.cleanish/gcc/config.gcc gcc/config.gcc --- ../combined.cleanish/gcc/config.gcc Mon Jan 6 18:08:43 2003 +++ gcc/config.gcc Tue Jan 7 09:51:27 2003 @@ -1,5 +1,5 @@ # GCC build-, host- and target-specific configuration file. -# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. #This file is part of GCC. @@ -1832,6 +1832,11 @@ mipsisa32-*-elf* | mipsisa32el-*-elf*) tmake_file=mips/t-isa3264 tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_EABI" ;; +mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*) + tm_file="${tm_file} mips/elf.h" + tmake_file=mips/t-isa3264 + tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_EABI" + ;; mipsisa64-*-elf* | mipsisa64el-*-elf*) tm_file="${tm_file} mips/elf.h" tmake_file=mips/t-isa3264 diff -rup ../combined.cleanish/gcc/config/mips/mips.c gcc/config/mips/mips.c --- ../combined.cleanish/gcc/config/mips/mips.c Thu Dec 19 20:30:51 2002 +++ gcc/config/mips/mips.c Tue Jan 7 13:22:36 2003 @@ -1,6 +1,6 @@ /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -583,8 +583,9 @@ const struct mips_cpu_info mips_cpu_info { "mips2", PROCESSOR_R6000, 2 }, { "mips3", PROCESSOR_R4000, 3 }, { "mips4", PROCESSOR_R8000, 4 }, - { "mips32", PROCESSOR_R4KC, 32 }, - { "mips64", PROCESSOR_R5KC, 64 }, + { "mips32", PROCESSOR_4KC, 32 }, + { "mips32r2", PROCESSOR_M4K, 33 }, + { "mips64", PROCESSOR_5KC, 64 }, /* MIPS I */ { "r3000", PROCESSOR_R3000, 1 }, @@ -611,18 +612,18 @@ const struct mips_cpu_info mips_cpu_info { "vr5400", PROCESSOR_R5400, 4 }, { "vr5500", PROCESSOR_R5500, 4 }, - - /* MIPS 32 */ - { "4kc", PROCESSOR_R4KC, 32 }, - { "4kp", PROCESSOR_R4KC, 32 }, /* = 4kc */ - - /* MIPS 64 */ - { "5kc", PROCESSOR_R5KC, 64 }, - { "20kc", PROCESSOR_R20KC, 64 }, - { "sr71000", PROCESSOR_SR71000, 64 }, - - /* Broadcom SB-1 CPU core */ + /* MIPS32 */ + { "4kc", PROCESSOR_4KC, 32 }, + { "4kp", PROCESSOR_4KC, 32 }, /* = 4kc */ + + /* MIPS32 Release 2 */ + { "m4k", PROCESSOR_M4K, 33 }, + + /* MIPS64 */ + { "5kc", PROCESSOR_5KC, 64 }, + { "20kc", PROCESSOR_20KC, 64 }, { "sb1", PROCESSOR_SB1, 64 }, + { "sr71000", PROCESSOR_SR71000, 64 }, /* End marker */ { 0, 0, 0 } @@ -5130,28 +5131,31 @@ override_options () if (mips_isa_string != 0) { /* Handle -mipsN. */ - int level = atoi (mips_isa_string); - if (level == 16) + + if (strcmp (mips_isa_string, "16") == 0) { /* -mips16 specifies an ASE rather than a processor, so don't change mips_arch here. -mno-mips16 overrides -mips16. */ if (mips_no_mips16_string == NULL) target_flags |= MASK_MIPS16; } - else if (mips_arch_info != 0) + else { + char *whole_isa_str = concat ("mips", mips_isa_string, NULL); + const struct mips_cpu_info *isa_info; + + isa_info = mips_parse_cpu ("-mips option", whole_isa_str); + free (whole_isa_str); + /* -march takes precedence over -mipsN, since it is more descriptive. There's no harm in specifying both as long as the ISA levels are the same. */ - if (mips_isa != level) - error ("-mips%d conflicts with the other architecture options, which specify a MIPS%d processor", - level, mips_isa); - } - else - { - mips_set_architecture (mips_cpu_info_from_isa (level)); - if (mips_arch_info == 0) - error ("bad value (%s) for -mips switch", mips_isa_string); + if (mips_arch_info != 0 && mips_isa != isa_info->isa) + error ("-mips%s conflicts with the other architecture options, which specify a MIPS%d processor", + mips_isa_string, mips_isa); + + /* Set architecture based on the given option. */ + mips_set_architecture (isa_info); } } @@ -5268,7 +5272,7 @@ override_options () of the [MIPS32 and MIPS64] architecture." Therefore, we do not issue those instructions unless instructed to do so by -mbranch-likely. */ - if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS64)) + if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64)) target_flags |= MASK_BRANCHLIKELY; else target_flags &= ~MASK_BRANCHLIKELY; diff -rup ../combined.cleanish/gcc/config/mips/mips.h gcc/config/mips/mips.h --- ../combined.cleanish/gcc/config/mips/mips.h Mon Dec 16 14:45:40 2002 +++ gcc/config/mips/mips.h Tue Jan 7 22:13:16 2003 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and @@ -72,9 +72,10 @@ enum processor_type { PROCESSOR_R5400, PROCESSOR_R5500, PROCESSOR_R8000, - PROCESSOR_R4KC, - PROCESSOR_R5KC, - PROCESSOR_R20KC, + PROCESSOR_4KC, + PROCESSOR_5KC, + PROCESSOR_20KC, + PROCESSOR_M4K, PROCESSOR_SR71000, PROCESSOR_SB1 }; @@ -351,6 +352,7 @@ extern void sbss_section PARAMS ((void) #define ISA_MIPS3 (mips_isa == 3) #define ISA_MIPS4 (mips_isa == 4) #define ISA_MIPS32 (mips_isa == 32) +#define ISA_MIPS32R2 (mips_isa == 33) #define ISA_MIPS64 (mips_isa == 64) /* Architecture target defines. */ @@ -359,8 +361,8 @@ extern void sbss_section PARAMS ((void) #define TARGET_MIPS4100 (mips_arch == PROCESSOR_R4100) #define TARGET_MIPS4120 (mips_arch == PROCESSOR_R4120) #define TARGET_MIPS4300 (mips_arch == PROCESSOR_R4300) -#define TARGET_MIPS4KC (mips_arch == PROCESSOR_R4KC) -#define TARGET_MIPS5KC (mips_arch == PROCESSOR_R5KC) +#define TARGET_MIPS4KC (mips_arch == PROCESSOR_4KC) +#define TARGET_MIPS5KC (mips_arch == PROCESSOR_5KC) #define TARGET_MIPS5400 (mips_arch == PROCESSOR_R5400) #define TARGET_MIPS5500 (mips_arch == PROCESSOR_R5500) #define TARGET_SB1 (mips_arch == PROCESSOR_SB1) @@ -458,6 +460,11 @@ extern void sbss_section PARAMS ((void) builtin_define ("__mips=32"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ } \ + else if (ISA_MIPS32R2) \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32R2"); \ + } \ else if (ISA_MIPS64) \ { \ builtin_define ("__mips=64"); \ @@ -707,13 +714,17 @@ extern void sbss_section PARAMS ((void) # if MIPS_ISA_DEFAULT == 32 # define MULTILIB_ISA_DEFAULT "mips32" # else -# if MIPS_ISA_DEFAULT == 64 -# define MULTILIB_ISA_DEFAULT "mips64" +# if MIPS_ISA_DEFAULT == 33 +# define MULTILIB_ISA_DEFAULT "mips32r2" # else -# define MULTILIB_ISA_DEFAULT "mips1" -# endif +# if MIPS_ISA_DEFAULT == 64 +# define MULTILIB_ISA_DEFAULT "mips64" +# else +# define MULTILIB_ISA_DEFAULT "mips1" +# endif +# endif +# endif # endif -# endif # endif # endif # endif @@ -770,6 +781,7 @@ extern void sbss_section PARAMS ((void) || TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -806,6 +818,7 @@ extern void sbss_section PARAMS ((void) /* ISA has the conditional move instructions introduced in mips4. */ #define ISA_HAS_CONDMOVE ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS5500 \ && !TARGET_MIPS16) @@ -817,6 +830,7 @@ extern void sbss_section PARAMS ((void) branch on CC, and move (both FP and non-FP) on CC. */ #define ISA_HAS_8CC (ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) /* This is a catch all for the other new mips4 instructions: indexed load and @@ -832,6 +846,7 @@ extern void sbss_section PARAMS ((void) /* ISA has integer multiply-accumulate instructions, madd and msub. */ #define ISA_HAS_MADD_MSUB ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -843,6 +858,7 @@ extern void sbss_section PARAMS ((void) /* ISA has count leading zeroes/ones instruction (not implemented). */ #define ISA_HAS_CLZ_CLO ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -879,22 +895,25 @@ extern void sbss_section PARAMS ((void) ) /* ISA has 32-bit rotate right instruction. */ -#define ISA_HAS_ROTR_SI (TARGET_MIPS5400 \ - || TARGET_MIPS5500 \ - || TARGET_SR71K \ - ) +#define ISA_HAS_ROTR_SI (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + || TARGET_MIPS5400 \ + || TARGET_MIPS5500 \ + || TARGET_SR71K \ + )) -/* ISA has 32-bit rotate right instruction. */ +/* ISA has 64-bit rotate right instruction. */ #define ISA_HAS_ROTR_DI (TARGET_64BIT \ + && !TARGET_MIPS16 \ && (TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || TARGET_SR71K \ )) - /* ISA has data prefetch instruction. */ #define ISA_HAS_PREFETCH ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -903,6 +922,11 @@ extern void sbss_section PARAMS ((void) also requires TARGET_DOUBLE_FLOAT. */ #define ISA_HAS_TRUNC_W (!ISA_MIPS1) +/* ISA includes the MIPS32r2 seb and seh instructions. */ +#define ISA_HAS_SEB_SEH (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + )) + /* CC1_SPEC causes -mips3 and -mips4 to set -mfp64 and -mgp64; -mips1 or -mips2 sets -mfp32 and -mgp32. This can be overridden by an explicit -mfp32, -mfp64, -mgp32 or -mgp64. -mfp64 sets MASK_FLOAT64 in @@ -1066,7 +1090,8 @@ extern int mips_abi; #undef ASM_SPEC #define ASM_SPEC "\ -%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}\ +%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \ +%{mips32} %{mips32r2} %{mips64} \ %{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \ %(subtarget_asm_optimizing_spec) \ %(subtarget_asm_debugging_spec) \ @@ -1123,7 +1148,7 @@ extern int mips_abi; #ifndef LINK_SPEC #define LINK_SPEC "\ %(endian_spec) \ -%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ +%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{shared} %{non_shared}" #endif /* LINK_SPEC defined */ diff -rup ../combined.cleanish/gcc/config/mips/mips.md gcc/config/mips/mips.md --- ../combined.cleanish/gcc/config/mips/mips.md Mon Jan 6 18:09:17 2003 +++ gcc/config/mips/mips.md Tue Jan 7 22:13:52 2003 @@ -1,6 +1,6 @@ ;; Mips.md Machine Description for MIPS based processors ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +;; 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ;; Contributed by A. Lichnewsky, lich@inria.inria.fr ;; Changes by Michael Meissner, meissner@osf.org ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -1808,6 +1808,7 @@ || TARGET_MIPS5400 || TARGET_MIPS5500 || ISA_MIPS32 + || ISA_MIPS32R2 || ISA_MIPS64) return \"mul\\t%0,%1,%2\"; return \"mult\\t%0,%1,%2\"; @@ -4379,6 +4380,13 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_SEB_SEH) + { + emit_insn (gen_extendhisi2_hw (operands[0], + force_reg (HImode, operands[1]))); + DONE; + } + if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4394,6 +4402,14 @@ move\\t%0,%z4\\n\\ } }") +(define_insn "extendhisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] + "ISA_HAS_SEB_SEH" + "seh\\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + (define_insn "extendhisi2_internal" [(set (match_operand:SI 0 "register_operand" "=d,d") (sign_extend:SI (match_operand:HI 1 "memory_operand" "R,m")))] @@ -4441,6 +4457,12 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_SEB_SEH) + { + emit_insn (gen_extendqisi2_hw (operands[0], + force_reg (QImode, operands[1]))); + DONE; + } if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4456,6 +4478,14 @@ move\\t%0,%z4\\n\\ } }") +(define_insn "extendqisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] + "ISA_HAS_SEB_SEH" + "seb\\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + (define_insn "extendqisi2_insn" [(set (match_operand:SI 0 "register_operand" "=d,d") (sign_extend:SI (match_operand:QI 1 "memory_operand" "R,m")))] diff -rup ../combined.cleanish/gcc/config/mips/netbsd.h gcc/config/mips/netbsd.h --- ../combined.cleanish/gcc/config/mips/netbsd.h Sun Nov 10 10:28:39 2002 +++ gcc/config/mips/netbsd.h Tue Jan 7 22:13:22 2003 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems. - Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 + Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -94,6 +94,8 @@ Boston, MA 02111-1307, USA. */ builtin_define ("__mips=4"); \ else if (ISA_MIPS32) \ builtin_define ("__mips=32"); \ + else if (ISA_MIPS32R2) \ + builtin_define ("__mips=32"); \ else if (ISA_MIPS64) \ builtin_define ("__mips=64"); \ \ @@ -153,7 +155,7 @@ Boston, MA 02111-1307, USA. */ "%{EL:-m elf32lmip} \ %{EB:-m elf32bmip} \ %(endian_spec) \ - %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ + %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \ %(netbsd_link_spec)" diff -rup ../combined.cleanish/gcc/config/mips/t-isa3264 gcc/config/mips/t-isa3264 --- ../combined.cleanish/gcc/config/mips/t-isa3264 Sat Aug 17 06:04:39 2002 +++ gcc/config/mips/t-isa3264 Tue Jan 7 09:52:04 2003 @@ -33,8 +33,8 @@ TARGET_LIBGCC2_CFLAGS = -G 0 # Build the libraries for both hard and soft floating point -MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips64 -MULTILIB_DIRNAMES = soft-float el eb mips32 mips64 +MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips32r2/mips64 +MULTILIB_DIRNAMES = soft-float el eb mips32 mips32r2 mips64 MULTILIB_MATCHES = EL=mel EB=meb EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o diff -rup ../combined.cleanish/gcc/doc/invoke.texi gcc/doc/invoke.texi --- ../combined.cleanish/gcc/doc/invoke.texi Mon Jan 6 13:55:39 2003 +++ gcc/doc/invoke.texi Tue Jan 7 09:52:05 2003 @@ -1,12 +1,12 @@ @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -@c 2000, 2001, 2002 Free Software Foundation, Inc. +@c 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @ignore @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, -1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or @@ -481,7 +481,8 @@ in the following sections. -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd @gol -mgas -mgp32 -mgp64 @gol -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol --mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol +-mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol +-mlong64 -mlong32 -mlong-calls -mmemcpy @gol -mmips-as -mmips-tfile -mno-abicalls @gol -mno-embedded-data -mno-uninit-const-in-rodata @gol -mno-embedded-pic -mno-gpopt -mno-long-calls @gol @@ -7298,13 +7299,19 @@ These @samp{-m} options are defined for @item -march=@var{arch} @opindex march Generate code that will run on @var{arch}, which can be the name of a -generic MIPS ISA, or the name of a particular processor. The ISA names -are: @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, @samp{mips32} -and @samp{mips64}. The processor names are: @samp{r2000}, -@samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{vr4100}, @samp{vr4300}, -@samp{r4400}, @samp{r4600}, @samp{r4650}, @samp{vr5000}, @samp{r6000}, -@samp{r8000}, @samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, -@samp{orion}, and @samp{sb1}. The special value @samp{from-abi} selects the +generic MIPS ISA, or the name of a particular processor. +The ISA names are: +@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, +@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. +The processor names are: +@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, +@samp{m4k}, +@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, +@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, +@samp{orion}, +@samp{sb1}, +@samp{vr4100}, @samp{vr4300}, and @samp{vr5000}. +The special value @samp{from-abi} selects the most compatible architecture for the selected ABI (that is, @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. @@ -7363,6 +7370,10 @@ Equivalent to @samp{-march=mips4}. @opindex mips32 Equivalent to @samp{-march=mips32}. +@item -mips32r2 +@opindex mips32r2 +Equivalent to @samp{-march=mips32r2}. + @item -mips64 @opindex mips64 Equivalent to @samp{-march=mips64}. From gcc-patches-return-75225-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 07:52:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5870 invoked by alias); 8 Jan 2003 07:52:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5781 invoked from network); 8 Jan 2003 07:52:28 -0000 Received: from unknown (HELO dellpi.pinski.fam) (66.161.181.231) by 209.249.29.67 with SMTP; 8 Jan 2003 07:52:28 -0000 Received: from physics.uc.edu (IDENT:pinskia@localhost.pinski.fam [127.0.0.1]) by dellpi.pinski.fam (8.12.2/8.12.1) with ESMTP id h087pxoQ023159; Wed, 8 Jan 2003 02:52:01 -0500 (EST) Date: Tue, 7 Jan 2003 23:52:00 -0800 Subject: Re: speeding up parts of gcc by using ffs Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Andrew Pinski , gcc@gcc.gnu.org, apinski@apple.com To: gcc-patches@gcc.gnu.org From: Andrew Pinski In-Reply-To: <87ptraf9sp.fsf@egil.codesourcery.com> Message-Id: <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> Content-Transfer-Encoding: 7bit Here is the first patch for using ffs{,l,ll} in gcc, will be posting the rest by Monday. This adds ffsl and ffsll to libiberty, and also adds the ffs's to the libiberty.a. Thanks, Andrew Pinski apinski@apple.com pinskia@physics.uc.edu On Monday, Jan 6, 2003, at 09:49 US/Pacific, Zack Weinberg wrote: > Andrew Pinski writes: > >> A follow of the comments I received, I have only right now added the >> simple cases of HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT and >> HOST_BITS_PER_INT == HOST_BITS_PER_LONG. I might implement the other >> part of the patch for when HOST_BITS_PER_WIDE_INT == >> HOST_BITS_PER_LONG_LONG and HOST_BITS_PER_WIDE_INT == >> HOST_BITS_PER_LONG but this might take some time because I have to add >> some more builtins but it will clean things up. > > I'm not enthusiastic about all the #ifdefs. > > glibc provides ffsl and ffsll which take 'long' and 'long long' > respectively; may I suggest that you follow these steps: > > 1) put ffsl and ffsll into libiberty. > 2) have hwint.h #define ffs_hwi and ffs_hwidesti appropriately > 3) use ffs/ffsl/ffsll/ffs_hwi throughout the compiler > 4) create __builtin_ffsl and __builtin_ffsll > > zw ChangeLog: 2003-01-07 Andrew Pinski * Makefile.in (ffsll.o): special rule for long long warning. (CFILES): add ffsl.c and ffsll.c. (CONFIGURED_OFILES): add ffsl.o and ffsll.o. (NEEDED): add ffs, ffsl, and ffsll. * aclocal.m4 include ../config/accross.m4 for AC_C_BIGENDIAN_CROSS, and AC_COMPILE_CHECK_SIZEOF. (libiberty_AC_C_LONG_LONG) copied from gcc's gcc_AC_C_LONG_LONG. * configure.in (AC_C_BIGENDIAN_CROSS) use it. (libiberty_AC_C_LONG_LONG) use it. (AC_COMPILE_CHECK_SIZEOF) use it. Probe the size of int, long, and long long/__int64 if we have them. Check for ffsl and ffsll. * configure regenerate. (LIB_AC_PROG_CC) add ac_libiberty_warn_long_long_cflags. * config.in regenerate. * ffsl.c new file. * ffsll.c new file. Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libiberty/Makefile.in,v retrieving revision 1.78 diff -u -d -b -w -b -B -u -r1.78 Makefile.in --- Makefile.in 22 Nov 2002 20:01:07 -0000 1.78 +++ Makefile.in 8 Jan 2003 07:32:39 -0000 @@ -122,15 +122,22 @@ else true; fi $(COMPILE.c) $< $(OUTPUT_OPTION) +#special case ffsll.o because of extra warnings will show up other wise +ffsll.o: ffsll.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) @ac_libiberty_warn_long_long_cflags@ $(PICFLAG) $< -o pic/$@; \ + else true; fi + $(COMPILE.c) @ac_libiberty_warn_long_long_cflags@ $< $(OUTPUT_OPTION) + # NOTE: If you add new files to the library, add them to this list # (alphabetical), and add them to REQUIRED_OFILES, or # CONFIGURED_OFILES and funcs in configure.in. CFILES = alloca.c argv.c asprintf.c atexit.c \ basename.c bcmp.c bcopy.c bsearch.c bzero.c \ - calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ - cplus-dem.c \ + calloc.c choose-temp.c clock.c concat.c \ + cp-demangle.c cplus-dem.c \ dyn-string.c \ - fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c \ + fdmatch.c ffs.c ffsl.c ffsll.c fibheap.c floatformat.c fnmatch.c\ getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \ hashtab.c hex.c \ index.c insque.c \ @@ -176,7 +183,7 @@ basename.o bcmp.o bcopy.o bsearch.o bzero.o \ calloc.o clock.o copysign.o \ _doprnt.o \ - ffs.o \ + ffs.o ffsl.o ffsll.o \ getcwd.o getpagesize.o \ index.o insque.o \ memchr.o memcmp.o memcpy.o memmove.o memset.o mkstemps.o \ @@ -287,7 +294,7 @@ # can't use anything encumbering. NEEDED = atexit calloc memchr memcmp memcpy memmove memset rename strchr \ strerror strncmp strrchr strstr strtol strtoul tmpnam vfprintf vprintf \ - vfork waitpid bcmp bcopy bzero + vfork waitpid bcmp bcopy bzero ffs ffsl ffsll needed-list: Makefile rm -f needed-list; touch needed-list; \ for f in $(NEEDED); do \ Index: aclocal.m4 =================================================================== RCS file: /cvs/gcc/gcc/libiberty/aclocal.m4,v retrieving revision 1.5 diff -u -d -b -w -b -B -u -r1.5 aclocal.m4 --- aclocal.m4 31 Dec 2001 23:23:49 -0000 1.5 +++ aclocal.m4 8 Jan 2003 07:32:39 -0000 @@ -1,3 +1,5 @@ +sinclude(../config/accross.m4) + dnl See whether strncmp reads past the end of its string parameters. dnl On some versions of SunOS4 at least, strncmp reads a word at a time dnl but erroneously reads past the end of strings. This can cause @@ -107,6 +109,7 @@ if test $ac_cv_prog_gcc = yes; then GCC=yes ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic' + ac_libiberty_warn_long_long_cflags='-Wno-long-long' dnl Check whether -g works, even if CFLAGS is set, in case the package dnl plays around with CFLAGS (such as to build both debugging and dnl normal versions of a library), tasteless as that idea is. @@ -124,9 +127,11 @@ else GCC= ac_libiberty_warn_cflags= + ac_libiberty_warn_long_long_cflags= test "${CFLAGS+set}" = set || CFLAGS="-g" fi AC_SUBST(ac_libiberty_warn_cflags) +AC_SUBST(ac_libiberty_warn_long_long_cflags) ]) # Work around a bug in autoheader. This can go away when we switch to @@ -188,4 +193,27 @@ STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown]) +]) + +dnl Checking for long long. +dnl By Caolan McNamara +dnl Added check for __int64, Zack Weinberg +dnl +AC_DEFUN([libiberty_AC_C_LONG_LONG], +[AC_CACHE_CHECK(for long long int, ac_cv_c_long_long, + [AC_TRY_COMPILE(,[long long int i;], + ac_cv_c_long_long=yes, + ac_cv_c_long_long=no)]) + if test $ac_cv_c_long_long = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, + [Define if your compiler supports the \`long long' type.]) + fi +AC_CACHE_CHECK(for __int64, ac_cv_c___int64, + [AC_TRY_COMPILE(,[__int64 i;], + ac_cv_c___int64=yes, + ac_cv_c___int64=no)]) + if test $ac_cv_c___int64 = yes; then + AC_DEFINE(HAVE___INT64, 1, + [Define if your compiler supports the \`__int64' type.]) + fi ]) Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libiberty/configure.in,v retrieving revision 1.52 diff -u -d -b -w -b -B -u -r1.52 configure.in --- configure.in 1 Jul 2002 05:38:50 -0000 1.52 +++ configure.in 8 Jan 2003 07:32:39 -0000 @@ -145,6 +145,9 @@ AC_HEADER_SYS_WAIT AC_HEADER_TIME + +AC_C_BIGENDIAN_CROSS + libiberty_AC_DECLARE_ERRNO AC_CHECK_TYPE(uintptr_t, unsigned long) @@ -154,6 +158,18 @@ AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.]) fi +libiberty_AC_C_LONG_LONG + +AC_COMPILE_CHECK_SIZEOF(int) +AC_COMPILE_CHECK_SIZEOF(long) + +if test $ac_cv_c_long_long = yes; then + AC_COMPILE_CHECK_SIZEOF(long long) +fi +if test $ac_cv_c___int64 = yes; then + AC_COMPILE_CHECK_SIZEOF(__int64) +fi + AC_TYPE_PID_T # This is the list of functions which libiberty will provide if they @@ -200,6 +216,14 @@ funcs="$funcs vprintf" funcs="$funcs vsprintf" funcs="$funcs waitpid" +funcs="$funcs ffsl" + +if test $ac_cv_c_long_long = yes; then + funcs="$funcs ffsll" +fi +if test $ac_cv_c___int64 = yes; then + funcs="$funcs ffsll" +fi # Also in the old function.def file: alloca, vfork, getopt. @@ -216,7 +240,7 @@ AC_CHECK_FUNCS(strcasecmp setenv strchr strdup strncasecmp strrchr strstr) AC_CHECK_FUNCS(strtod strtol strtoul tmpnam vasprintf vfprintf vprintf) AC_CHECK_FUNCS(vsprintf waitpid getrusage on_exit psignal strerror strsignal) - AC_CHECK_FUNCS(sysconf times sbrk gettimeofday ffs) + AC_CHECK_FUNCS(sysconf times sbrk gettimeofday ffs ffsl ffsll) AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) Index: ffsl.c =================================================================== RCS file: ffsl.c diff -N ffsl.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ffsl.c 8 Jan 2003 07:32:39 -0000 @@ -0,0 +1,31 @@ +/* ffsl -- Find the first bit set in the parameter + +@deftypefn Supplemental int ffsl (long @var{valu}) + +Find the first (least significant) bit set in @var{valu}. Bits are +numbered from right to left, starting with bit 1 (corresponding to the +value 1). If @var{valu} is zero, zero is returned. + +@end deftypefn + +*/ + +#include "config.h" + +int +ffsl (valu) + register long valu; +{ +#if SIZEOF_LONG == SIZEOF_INT + extern int ffs(); + return ffs(valu); +#else +#if SIZEOF_LONG == SIZEOF_LONG_LONG || SIZEOF_LONG == SIZEOF___INT64 + extern int ffs(); + return ffsll(valu); +#else + #error Do not know what size long is. +#endif +#endif +} + Index: ffsll.c =================================================================== RCS file: ffsll.c diff -N ffsll.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ffsll.c 8 Jan 2003 07:32:39 -0000 @@ -0,0 +1,75 @@ +/* ffsll -- Find the first bit set in the parameter + +@deftypefn Supplemental int ffsll (int @var{valu}) + +Find the first (least significant) bit set in @var{valu}. Bits are +numbered from right to left, starting with bit 1 (corresponding to the +value 1). If @var{valu} is zero, zero is returned. + +@end deftypefn + +*/ + +#include "config.h" + +#if defined(HAVE_LONG_LONG) +#define NEED_FFSLL +typedef long long ll; +#define SIZEOF_LL SIZEOF_LONG_LONG + +#else +#if defined(HAVE___INT64) +#define NEED_FFSLL +typedef __int64 ll; +#define SIZEOF_LL SIZEOF___INT64 + +#endif +#endif + +#if defined(NEED_FFSLL) + +union ll_ints { + ll longlongs; + struct { +#if defined(WORDS_BIGENDIAN) + int hi; + int low; +#else + int low; + int hi; +#endif + } ints; +}; + +int ffs (); + +int +ffsll (valu) + register ll valu; +{ +#if SIZEOF_LL == SIZEOF_INT*2 + ll x = valu & -valu; + union ll_ints temp; + union ll_ints temp1; + int add = 0; + int word; + temp.longlongs = valu; + temp1.longlongs = x; + if(temp1.ints.hi!=0) + word = temp.ints.low; + else + word = temp.ints.hi, add = 32; + return add + ffs (word); +#else + int bit_num = 0; + if(valu==0) + return 0; + while((valu&1)!=0) + bit_num ++, valu >>= 1; + + return bit_num; +#endif + +} + +#endif From gcc-patches-return-75226-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 08:17:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10026 invoked by alias); 8 Jan 2003 08:17:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7048 invoked from network); 8 Jan 2003 08:12:31 -0000 Received: from unknown (HELO mms1.broadcom.com) (63.70.210.58) by 209.249.29.67 with SMTP; 8 Jan 2003 08:12:31 -0000 Received: from 63.70.210.1 by mms1.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Wed, 08 Jan 2003 00:11:49 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id AAA07501; Wed, 8 Jan 2003 00:12:07 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h088C9ER014430; Wed, 8 Jan 2003 00:12:09 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id AAA25692; Wed, 8 Jan 2003 00:12:05 -0800 (PST) To: "Richard Sandiford" cc: echristo@redhat.com, gcc-patches@gcc.gnu.org Subject: Re: [mips patch' rfa] Add MIPS32 Release 2 support. References: From: cgd@broadcom.com Date: 08 Jan 2003 00:12:05 -0800 In-Reply-To: cgd@broadcom.com's message of "07 Jan 2003 22:38:00 -0800" Message-ID: Lines: 584 MIME-Version: 1.0 X-WSS-ID: 120502CF790451-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit At 07 Jan 2003 22:38:00 -0800, Chris G. Demetriou wrote: > As before, adjusted for feedback. One oustanding issue: > > __mips=32 or __mips=33 for MIPS32r2. > [ ... ] Actually, thinking about this more gave me a better idea. No more user-exposed 32r2 at all, separate define to indicate n level, for the stanards ISAs. I'd also be willing to say "__mips_isa_rev". Richard, Eric, what do you think? chris -- 2003-01-07 Chris Demetriou * config.gcc (mipsisa32r2-*-elf*, mipsisa32r2el-*-elf*): New targets, to support MIPS32 Release 2 (MIPS32R2) configurations. * config/mips/mips.h (enum processor_type): Rename PROCESSOR_R4KC to PROCESSOR_4KC, PROCESSOR_R5KC to PROCESSOR_5KC, and PROCESSOR_R20KC to PROCESSOR_20KC. Add PROCESSOR_M4K. (TARGET_MIPS4KC, TARGET_MIPS5KC): Update for the renaming. (ISA_MIPS32R2): New define. (GENERATE_MULT3_SI, ISA_HAS_CONDMOVE, ISA_HAS_8CC) (ISA_HAS_MADD_MSUB, ISA_HAS_CLZ_CLO) (ISA_HAS_PREFETCH): Add support for MIPS32R2. (MIPS_ISA_DEFAULT): Likewise. Also, fix indentation. (TARGET_CPU_CPP_BUILTINS): Add support for MIPS32R2. Add new predefine __mips_arch_rev for MIPS32, MIPS32R2, and MIPS64. (ISA_HAS_ROTR_SI): Add support for MIPS32R2, and avoid if compiling MIPS16 code. (ISA_HAS_ROTR_DI): Do not use if compiling MIPS16 code, and fix comment. (ISA_HAS_SEB_SEH): New define. (ASM_SPEC, LINK_SPEC): Pass -mips32r2 to assembler and linker. * config/mips/mips.c (mips_cpu_info_table): Adjust for enum processor_type value renaming. Add support for MIPS32R2. Clean up comments, and move "sb1" entry with other MIPS64 CPU entries. (override_options): Reimplement -mipsN option handling so that it will work correctly for -mips32r2. Avoid branch-likely instructions on MIPS32R2. * config/mips/mips.md (mulsi3_mult3): Add support for MIPS32R2. (extendhisi2): Use extendhisi2_hw if ISA_HAS_SEB_SEH. (extendqisi2): Use extendqisi2_hw if ISA_HAS_SEB_SEH. (extendhisi2_hw, extendqisi2_hw): New. * config/mips/netbsd.h (TARGET_CPU_CPP_BUILTINS): Add support for MIPS32R2. Add new predefine __mips_arch_rev for MIPS32, MIPS32R2, and MIPS64. (LINK_SPEC): Pass -mips32r2 to linker. * config/mips/t-isa3264: Built -mips32r2 multilibs. * doc/invoke.texi (MIPS Options): Add -mips32r2, add support for mips32r2 in the -march description. Alphabetically sort CPU names in the -march description. Add long-missed -mips32 and -mips64 to MIPS option summary. * config.gcc: Update copyright years to include 2003. * config/mips/mips.c: Likewise. * config/mips/mips.h: Likewise. * config/mips/mips.md: Likewise. * config/mips/netbsd.h: Likewise. * doc/invoke.texi: Likewise. diff -rup ../combined.cleanish/gcc/config.gcc gcc/config.gcc --- ../combined.cleanish/gcc/config.gcc Mon Jan 6 18:08:43 2003 +++ gcc/config.gcc Tue Jan 7 09:51:27 2003 @@ -1,5 +1,5 @@ # GCC build-, host- and target-specific configuration file. -# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. #This file is part of GCC. @@ -1832,6 +1832,11 @@ mipsisa32-*-elf* | mipsisa32el-*-elf*) tmake_file=mips/t-isa3264 tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_EABI" ;; +mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*) + tm_file="${tm_file} mips/elf.h" + tmake_file=mips/t-isa3264 + tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_EABI" + ;; mipsisa64-*-elf* | mipsisa64el-*-elf*) tm_file="${tm_file} mips/elf.h" tmake_file=mips/t-isa3264 diff -rup ../combined.cleanish/gcc/config/mips/mips.c gcc/config/mips/mips.c --- ../combined.cleanish/gcc/config/mips/mips.c Thu Dec 19 20:30:51 2002 +++ gcc/config/mips/mips.c Tue Jan 7 13:22:36 2003 @@ -1,6 +1,6 @@ /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -583,8 +583,9 @@ const struct mips_cpu_info mips_cpu_info { "mips2", PROCESSOR_R6000, 2 }, { "mips3", PROCESSOR_R4000, 3 }, { "mips4", PROCESSOR_R8000, 4 }, - { "mips32", PROCESSOR_R4KC, 32 }, - { "mips64", PROCESSOR_R5KC, 64 }, + { "mips32", PROCESSOR_4KC, 32 }, + { "mips32r2", PROCESSOR_M4K, 33 }, + { "mips64", PROCESSOR_5KC, 64 }, /* MIPS I */ { "r3000", PROCESSOR_R3000, 1 }, @@ -611,18 +612,18 @@ const struct mips_cpu_info mips_cpu_info { "vr5400", PROCESSOR_R5400, 4 }, { "vr5500", PROCESSOR_R5500, 4 }, - - /* MIPS 32 */ - { "4kc", PROCESSOR_R4KC, 32 }, - { "4kp", PROCESSOR_R4KC, 32 }, /* = 4kc */ - - /* MIPS 64 */ - { "5kc", PROCESSOR_R5KC, 64 }, - { "20kc", PROCESSOR_R20KC, 64 }, - { "sr71000", PROCESSOR_SR71000, 64 }, - - /* Broadcom SB-1 CPU core */ + /* MIPS32 */ + { "4kc", PROCESSOR_4KC, 32 }, + { "4kp", PROCESSOR_4KC, 32 }, /* = 4kc */ + + /* MIPS32 Release 2 */ + { "m4k", PROCESSOR_M4K, 33 }, + + /* MIPS64 */ + { "5kc", PROCESSOR_5KC, 64 }, + { "20kc", PROCESSOR_20KC, 64 }, { "sb1", PROCESSOR_SB1, 64 }, + { "sr71000", PROCESSOR_SR71000, 64 }, /* End marker */ { 0, 0, 0 } @@ -5130,28 +5131,31 @@ override_options () if (mips_isa_string != 0) { /* Handle -mipsN. */ - int level = atoi (mips_isa_string); - if (level == 16) + + if (strcmp (mips_isa_string, "16") == 0) { /* -mips16 specifies an ASE rather than a processor, so don't change mips_arch here. -mno-mips16 overrides -mips16. */ if (mips_no_mips16_string == NULL) target_flags |= MASK_MIPS16; } - else if (mips_arch_info != 0) + else { + char *whole_isa_str = concat ("mips", mips_isa_string, NULL); + const struct mips_cpu_info *isa_info; + + isa_info = mips_parse_cpu ("-mips option", whole_isa_str); + free (whole_isa_str); + /* -march takes precedence over -mipsN, since it is more descriptive. There's no harm in specifying both as long as the ISA levels are the same. */ - if (mips_isa != level) - error ("-mips%d conflicts with the other architecture options, which specify a MIPS%d processor", - level, mips_isa); - } - else - { - mips_set_architecture (mips_cpu_info_from_isa (level)); - if (mips_arch_info == 0) - error ("bad value (%s) for -mips switch", mips_isa_string); + if (mips_arch_info != 0 && mips_isa != isa_info->isa) + error ("-mips%s conflicts with the other architecture options, which specify a MIPS%d processor", + mips_isa_string, mips_isa); + + /* Set architecture based on the given option. */ + mips_set_architecture (isa_info); } } @@ -5268,7 +5272,7 @@ override_options () of the [MIPS32 and MIPS64] architecture." Therefore, we do not issue those instructions unless instructed to do so by -mbranch-likely. */ - if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS64)) + if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64)) target_flags |= MASK_BRANCHLIKELY; else target_flags &= ~MASK_BRANCHLIKELY; diff -rup ../combined.cleanish/gcc/config/mips/mips.h gcc/config/mips/mips.h --- ../combined.cleanish/gcc/config/mips/mips.h Mon Dec 16 14:45:40 2002 +++ gcc/config/mips/mips.h Wed Jan 8 00:07:49 2003 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and @@ -72,9 +72,10 @@ enum processor_type { PROCESSOR_R5400, PROCESSOR_R5500, PROCESSOR_R8000, - PROCESSOR_R4KC, - PROCESSOR_R5KC, - PROCESSOR_R20KC, + PROCESSOR_4KC, + PROCESSOR_5KC, + PROCESSOR_20KC, + PROCESSOR_M4K, PROCESSOR_SR71000, PROCESSOR_SB1 }; @@ -351,6 +352,7 @@ extern void sbss_section PARAMS ((void) #define ISA_MIPS3 (mips_isa == 3) #define ISA_MIPS4 (mips_isa == 4) #define ISA_MIPS32 (mips_isa == 32) +#define ISA_MIPS32R2 (mips_isa == 33) #define ISA_MIPS64 (mips_isa == 64) /* Architecture target defines. */ @@ -359,8 +361,8 @@ extern void sbss_section PARAMS ((void) #define TARGET_MIPS4100 (mips_arch == PROCESSOR_R4100) #define TARGET_MIPS4120 (mips_arch == PROCESSOR_R4120) #define TARGET_MIPS4300 (mips_arch == PROCESSOR_R4300) -#define TARGET_MIPS4KC (mips_arch == PROCESSOR_R4KC) -#define TARGET_MIPS5KC (mips_arch == PROCESSOR_R5KC) +#define TARGET_MIPS4KC (mips_arch == PROCESSOR_4KC) +#define TARGET_MIPS5KC (mips_arch == PROCESSOR_5KC) #define TARGET_MIPS5400 (mips_arch == PROCESSOR_R5400) #define TARGET_MIPS5500 (mips_arch == PROCESSOR_R5500) #define TARGET_SB1 (mips_arch == PROCESSOR_SB1) @@ -456,11 +458,19 @@ extern void sbss_section PARAMS ((void) else if (ISA_MIPS32) \ { \ builtin_define ("__mips=32"); \ + builtin_define ("__mips_arch_rev=1"); \ + builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ + } \ + else if (ISA_MIPS32R2) \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("__mips_arch_rev=2"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ } \ else if (ISA_MIPS64) \ { \ builtin_define ("__mips=64"); \ + builtin_define ("__mips_arch_rev=1"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS64"); \ } \ \ @@ -707,13 +717,17 @@ extern void sbss_section PARAMS ((void) # if MIPS_ISA_DEFAULT == 32 # define MULTILIB_ISA_DEFAULT "mips32" # else -# if MIPS_ISA_DEFAULT == 64 -# define MULTILIB_ISA_DEFAULT "mips64" +# if MIPS_ISA_DEFAULT == 33 +# define MULTILIB_ISA_DEFAULT "mips32r2" # else -# define MULTILIB_ISA_DEFAULT "mips1" -# endif +# if MIPS_ISA_DEFAULT == 64 +# define MULTILIB_ISA_DEFAULT "mips64" +# else +# define MULTILIB_ISA_DEFAULT "mips1" +# endif +# endif +# endif # endif -# endif # endif # endif # endif @@ -770,6 +784,7 @@ extern void sbss_section PARAMS ((void) || TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -806,6 +821,7 @@ extern void sbss_section PARAMS ((void) /* ISA has the conditional move instructions introduced in mips4. */ #define ISA_HAS_CONDMOVE ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS5500 \ && !TARGET_MIPS16) @@ -817,6 +833,7 @@ extern void sbss_section PARAMS ((void) branch on CC, and move (both FP and non-FP) on CC. */ #define ISA_HAS_8CC (ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) /* This is a catch all for the other new mips4 instructions: indexed load and @@ -832,6 +849,7 @@ extern void sbss_section PARAMS ((void) /* ISA has integer multiply-accumulate instructions, madd and msub. */ #define ISA_HAS_MADD_MSUB ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -843,6 +861,7 @@ extern void sbss_section PARAMS ((void) /* ISA has count leading zeroes/ones instruction (not implemented). */ #define ISA_HAS_CLZ_CLO ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -879,22 +898,25 @@ extern void sbss_section PARAMS ((void) ) /* ISA has 32-bit rotate right instruction. */ -#define ISA_HAS_ROTR_SI (TARGET_MIPS5400 \ - || TARGET_MIPS5500 \ - || TARGET_SR71K \ - ) +#define ISA_HAS_ROTR_SI (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + || TARGET_MIPS5400 \ + || TARGET_MIPS5500 \ + || TARGET_SR71K \ + )) -/* ISA has 32-bit rotate right instruction. */ +/* ISA has 64-bit rotate right instruction. */ #define ISA_HAS_ROTR_DI (TARGET_64BIT \ + && !TARGET_MIPS16 \ && (TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || TARGET_SR71K \ )) - /* ISA has data prefetch instruction. */ #define ISA_HAS_PREFETCH ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -903,6 +925,11 @@ extern void sbss_section PARAMS ((void) also requires TARGET_DOUBLE_FLOAT. */ #define ISA_HAS_TRUNC_W (!ISA_MIPS1) +/* ISA includes the MIPS32r2 seb and seh instructions. */ +#define ISA_HAS_SEB_SEH (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + )) + /* CC1_SPEC causes -mips3 and -mips4 to set -mfp64 and -mgp64; -mips1 or -mips2 sets -mfp32 and -mgp32. This can be overridden by an explicit -mfp32, -mfp64, -mgp32 or -mgp64. -mfp64 sets MASK_FLOAT64 in @@ -1066,7 +1093,8 @@ extern int mips_abi; #undef ASM_SPEC #define ASM_SPEC "\ -%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}\ +%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \ +%{mips32} %{mips32r2} %{mips64} \ %{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \ %(subtarget_asm_optimizing_spec) \ %(subtarget_asm_debugging_spec) \ @@ -1123,7 +1151,7 @@ extern int mips_abi; #ifndef LINK_SPEC #define LINK_SPEC "\ %(endian_spec) \ -%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ +%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{shared} %{non_shared}" #endif /* LINK_SPEC defined */ diff -rup ../combined.cleanish/gcc/config/mips/mips.md gcc/config/mips/mips.md --- ../combined.cleanish/gcc/config/mips/mips.md Mon Jan 6 18:09:17 2003 +++ gcc/config/mips/mips.md Tue Jan 7 22:13:52 2003 @@ -1,6 +1,6 @@ ;; Mips.md Machine Description for MIPS based processors ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +;; 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ;; Contributed by A. Lichnewsky, lich@inria.inria.fr ;; Changes by Michael Meissner, meissner@osf.org ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -1808,6 +1808,7 @@ || TARGET_MIPS5400 || TARGET_MIPS5500 || ISA_MIPS32 + || ISA_MIPS32R2 || ISA_MIPS64) return \"mul\\t%0,%1,%2\"; return \"mult\\t%0,%1,%2\"; @@ -4379,6 +4380,13 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_SEB_SEH) + { + emit_insn (gen_extendhisi2_hw (operands[0], + force_reg (HImode, operands[1]))); + DONE; + } + if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4394,6 +4402,14 @@ move\\t%0,%z4\\n\\ } }") +(define_insn "extendhisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] + "ISA_HAS_SEB_SEH" + "seh\\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + (define_insn "extendhisi2_internal" [(set (match_operand:SI 0 "register_operand" "=d,d") (sign_extend:SI (match_operand:HI 1 "memory_operand" "R,m")))] @@ -4441,6 +4457,12 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_SEB_SEH) + { + emit_insn (gen_extendqisi2_hw (operands[0], + force_reg (QImode, operands[1]))); + DONE; + } if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4456,6 +4478,14 @@ move\\t%0,%z4\\n\\ } }") +(define_insn "extendqisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] + "ISA_HAS_SEB_SEH" + "seb\\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + (define_insn "extendqisi2_insn" [(set (match_operand:SI 0 "register_operand" "=d,d") (sign_extend:SI (match_operand:QI 1 "memory_operand" "R,m")))] diff -rup ../combined.cleanish/gcc/config/mips/netbsd.h gcc/config/mips/netbsd.h --- ../combined.cleanish/gcc/config/mips/netbsd.h Sun Nov 10 10:28:39 2002 +++ gcc/config/mips/netbsd.h Wed Jan 8 00:08:08 2003 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems. - Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 + Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -93,9 +93,20 @@ Boston, MA 02111-1307, USA. */ else if (ISA_MIPS4) \ builtin_define ("__mips=4"); \ else if (ISA_MIPS32) \ - builtin_define ("__mips=32"); \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("__mips_arch_rev=1"); \ + } \ + else if (ISA_MIPS32R2) \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("__mips_arch_rev=2"); \ + } \ else if (ISA_MIPS64) \ - builtin_define ("__mips=64"); \ + { \ + builtin_define ("__mips=64"); \ + builtin_define ("__mips_arch_rev=1"); \ + } \ \ if (TARGET_HARD_FLOAT) \ builtin_define ("__mips_hard_float"); \ @@ -153,7 +164,7 @@ Boston, MA 02111-1307, USA. */ "%{EL:-m elf32lmip} \ %{EB:-m elf32bmip} \ %(endian_spec) \ - %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ + %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \ %(netbsd_link_spec)" diff -rup ../combined.cleanish/gcc/config/mips/t-isa3264 gcc/config/mips/t-isa3264 --- ../combined.cleanish/gcc/config/mips/t-isa3264 Sat Aug 17 06:04:39 2002 +++ gcc/config/mips/t-isa3264 Tue Jan 7 09:52:04 2003 @@ -33,8 +33,8 @@ TARGET_LIBGCC2_CFLAGS = -G 0 # Build the libraries for both hard and soft floating point -MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips64 -MULTILIB_DIRNAMES = soft-float el eb mips32 mips64 +MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips32r2/mips64 +MULTILIB_DIRNAMES = soft-float el eb mips32 mips32r2 mips64 MULTILIB_MATCHES = EL=mel EB=meb EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o diff -rup ../combined.cleanish/gcc/doc/invoke.texi gcc/doc/invoke.texi --- ../combined.cleanish/gcc/doc/invoke.texi Mon Jan 6 13:55:39 2003 +++ gcc/doc/invoke.texi Tue Jan 7 09:52:05 2003 @@ -1,12 +1,12 @@ @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -@c 2000, 2001, 2002 Free Software Foundation, Inc. +@c 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @ignore @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, -1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or @@ -481,7 +481,8 @@ in the following sections. -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd @gol -mgas -mgp32 -mgp64 @gol -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol --mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol +-mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol +-mlong64 -mlong32 -mlong-calls -mmemcpy @gol -mmips-as -mmips-tfile -mno-abicalls @gol -mno-embedded-data -mno-uninit-const-in-rodata @gol -mno-embedded-pic -mno-gpopt -mno-long-calls @gol @@ -7298,13 +7299,19 @@ These @samp{-m} options are defined for @item -march=@var{arch} @opindex march Generate code that will run on @var{arch}, which can be the name of a -generic MIPS ISA, or the name of a particular processor. The ISA names -are: @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, @samp{mips32} -and @samp{mips64}. The processor names are: @samp{r2000}, -@samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{vr4100}, @samp{vr4300}, -@samp{r4400}, @samp{r4600}, @samp{r4650}, @samp{vr5000}, @samp{r6000}, -@samp{r8000}, @samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, -@samp{orion}, and @samp{sb1}. The special value @samp{from-abi} selects the +generic MIPS ISA, or the name of a particular processor. +The ISA names are: +@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, +@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. +The processor names are: +@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, +@samp{m4k}, +@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, +@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, +@samp{orion}, +@samp{sb1}, +@samp{vr4100}, @samp{vr4300}, and @samp{vr5000}. +The special value @samp{from-abi} selects the most compatible architecture for the selected ABI (that is, @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. @@ -7363,6 +7370,10 @@ Equivalent to @samp{-march=mips4}. @opindex mips32 Equivalent to @samp{-march=mips32}. +@item -mips32r2 +@opindex mips32r2 +Equivalent to @samp{-march=mips32r2}. + @item -mips64 @opindex mips64 Equivalent to @samp{-march=mips64}. From gcc-patches-return-75227-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 08:22:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11044 invoked by alias); 8 Jan 2003 08:22:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11030 invoked from network); 8 Jan 2003 08:22:39 -0000 Received: from unknown (HELO mailout02.sul.t-online.com) (194.25.134.17) by 209.249.29.67 with SMTP; 8 Jan 2003 08:22:39 -0000 Received: from fwd08.sul.t-online.de by mailout02.sul.t-online.com with smtp id 18WBTk-0001Hw-01; Wed, 08 Jan 2003 09:22:24 +0100 Received: from juist (520046482682-0001@[80.131.78.137]) by fmrl08.sul.t-online.com with esmtp id 18WBTd-0KvdnEC; Wed, 8 Jan 2003 09:22:17 +0100 Received: from falk by juist with local (Exim 3.36 #1 (Debian)) id 18WBTa-0006o8-00; Wed, 08 Jan 2003 09:22:14 +0100 To: Andrew Pinski Cc: gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, apinski@apple.com Subject: Re: speeding up parts of gcc by using ffs References: <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> From: Falk Hueffner Date: 08 Jan 2003 09:22:12 +0100 In-Reply-To: <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> Message-ID: <87d6n8dpaj.fsf@student.uni-tuebingen.de> Lines: 21 User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.5 (broccoli) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Sender: 520046482682-0001@t-dialin.net Andrew Pinski writes: > + extern int ffs(); Function declarators with empty parentheses are an obsolescent feature in C99, so I think they're better to be avoided. > +#else > + int bit_num = 0; > + if(valu==0) > + return 0; > + while((valu&1)!=0) > + bit_num ++, valu >>= 1; > + > + return bit_num; > +#endif This looks bogus to me. -- Falk From gcc-patches-return-75228-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 08:32:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21185 invoked by alias); 8 Jan 2003 08:32:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21158 invoked from network); 8 Jan 2003 08:32:48 -0000 Received: from unknown (HELO dellpi.pinski.fam) (66.161.181.231) by 209.249.29.67 with SMTP; 8 Jan 2003 08:32:48 -0000 Received: from physics.uc.edu (IDENT:pinskia@localhost.pinski.fam [127.0.0.1]) by dellpi.pinski.fam (8.12.2/8.12.1) with ESMTP id h088WNoQ015615; Wed, 8 Jan 2003 03:32:26 -0500 (EST) Date: Wed, 8 Jan 2003 00:32:26 -0800 Subject: Re: speeding up parts of gcc by using ffs Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Andrew Pinski , gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, apinski@apple.com To: Falk Hueffner From: Andrew Pinski In-Reply-To: <87d6n8dpaj.fsf@student.uni-tuebingen.de> Message-Id: Content-Transfer-Encoding: 7bit On Wednesday, Jan 8, 2003, at 00:22 US/Pacific, Falk Hueffner wrote: > Andrew Pinski writes: > >> + extern int ffs(); > > Function declarators with empty parentheses are an obsolescent feature > in C99, so I think they're better to be avoided. Well parts of gcc are still written in K&R C, this is one. Thanks, Andrew Pinski From gcc-patches-return-75229-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 08:38:01 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 24428 invoked by alias); 8 Jan 2003 08:38:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24375 invoked from network); 8 Jan 2003 08:37:56 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 8 Jan 2003 08:37:56 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 2F6311478D; Wed, 8 Jan 2003 09:37:44 +0100 (MET) To: Andrew Pinski Cc: gcc-patches@gcc.gnu.org, apinski@apple.com Subject: Re: speeding up parts of gcc by using ffs References: <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> From: Andreas Jaeger Date: Wed, 08 Jan 2003 09:37:38 +0100 In-Reply-To: <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> (Andrew Pinski's message of "Tue, 7 Jan 2003 23:52:00 -0800") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Please follow the GNU Coding Standards: Andrew Pinski writes: > Index: ffsl.c > =================================================================== > RCS file: ffsl.c > diff -N ffsl.c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ ffsl.c 8 Jan 2003 07:32:39 -0000 > @@ -0,0 +1,31 @@ > +/* ffsl -- Find the first bit set in the parameter > + > +@deftypefn Supplemental int ffsl (long @var{valu}) > + > +Find the first (least significant) bit set in @var{valu}. Bits are > +numbered from right to left, starting with bit 1 (corresponding to the > +value 1). If @var{valu} is zero, zero is returned. > + > +@end deftypefn > + > +*/ Shouldn't there be a copyright message? > + > +#include "config.h" > + > +int > +ffsl (valu) > + register long valu; > +{ > +#if SIZEOF_LONG == SIZEOF_INT > + extern int ffs(); > + return ffs(valu); A space before the open brace. > [...] > + if(temp1.ints.hi!=0) Add spaces: if (temp.1.ints.hi != 0) more of this in the rest, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75230-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 08:46:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26562 invoked by alias); 8 Jan 2003 08:46:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26521 invoked from network); 8 Jan 2003 08:46:13 -0000 Received: from unknown (HELO mailout08.sul.t-online.com) (194.25.134.20) by 209.249.29.67 with SMTP; 8 Jan 2003 08:46:13 -0000 Received: from fwd10.sul.t-online.de by mailout08.sul.t-online.com with smtp id 18WBqY-0007zy-08; Wed, 08 Jan 2003 09:45:58 +0100 Received: from juist (520046482682-0001@[80.131.78.137]) by fmrl10.sul.t-online.com with esmtp id 18WBqN-0aNgBcC; Wed, 8 Jan 2003 09:45:47 +0100 Received: from falk by juist with local (Exim 3.36 #1 (Debian)) id 18WBqJ-0006sz-00; Wed, 08 Jan 2003 09:45:44 +0100 To: Andrew Pinski Cc: gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, apinski@apple.com Subject: Re: speeding up parts of gcc by using ffs References: From: Falk Hueffner Date: 08 Jan 2003 09:45:42 +0100 In-Reply-To: Message-ID: <878yxwdo7d.fsf@student.uni-tuebingen.de> Lines: 16 User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.5 (broccoli) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Sender: 520046482682-0001@t-dialin.net Andrew Pinski writes: > On Wednesday, Jan 8, 2003, at 00:22 US/Pacific, Falk Hueffner wrote: > > Andrew Pinski writes: > > > >> + extern int ffs(); > > > > Function declarators with empty parentheses are an obsolescent feature > > in C99, so I think they're better to be avoided. > > Well parts of gcc are still written in K&R C, this is one. Hmm, didn't think of that. Perhaps you could uses PARAMS(()). -- Falk From gcc-patches-return-75231-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 12:02:27 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22407 invoked by alias); 8 Jan 2003 12:02:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22355 invoked from network); 8 Jan 2003 12:02:18 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by 209.249.29.67 with SMTP; 8 Jan 2003 12:02:18 -0000 Received: by fw-cam.cambridge.arm.com; id MAA23405; Wed, 8 Jan 2003 12:02:06 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma022189; Wed, 8 Jan 03 12:00:58 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id MAA14730; Wed, 8 Jan 2003 12:00:57 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h08C0vt11536; Wed, 8 Jan 2003 12:00:57 GMT Message-Id: <200301081200.h08C0vt11536@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: gcc-patches@gcc.gnu.org cc: Richard.Earnshaw@arm.com Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: PATCH ARM: Clean out dead XFmode support Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_-20599706020" Date: Wed, 08 Jan 2003 12:00:57 +0000 From: Richard Earnshaw This is a multipart MIME message. --==_Exmh_-20599706020 Content-Type: text/plain; charset=us-ascii This patch cleans up the code that was added a long time ago to support XFmode instructions on the FPA, but was never enabled for various reasons. It also deletes a few patterns that have been commented out for a long while, because it was better to use library routines than the always-emulated FPA instructions. built on arm-elf (and tested on a FPA emulation). 2003-01-08 Richard Earnshaw * arm.h (ENABLE_XF_PATTERNS): Delete. * arm.md (addxf3, subxf3, mulxf3, divxf3, modxf3, negxf2, absxf2) (sqrtxf2, floatsixf2, fix_truncxfsi2, truncxfsf2, truncxfdf2) (extendsfxf2, extenddfxf2, movxf, cmpxf, cmpxf_insn) (cmpxf_trap): Delete. (movxf_hard_insn): Remove test of ENABLE_XF_PATTERNS. --==_Exmh_-20599706020 Content-Type: text/x-patch ; name="no-fpaxf.patch"; charset=us-ascii Content-Description: no-fpaxf.patch Content-Disposition: attachment; filename="no-fpaxf.patch" Index: arm.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.h,v retrieving revision 1.170 diff -p -r1.170 arm.h *** arm.h 1 Jan 2003 12:26:55 -0000 1.170 --- arm.h 8 Jan 2003 11:40:31 -0000 *************** extern int arm_is_6_or_7; *** 641,660 **** /* This is required to ensure that push insns always push a word. */ #define PROMOTE_FUNCTION_ARGS - /* For the ARM: - I think I have added all the code to make this work. Unfortunately, - early releases of the floating point emulation code on RISCiX used a - different format for extended precision numbers. On my RISCiX box there - is a bug somewhere which causes the machine to lock up when running enquire - with long doubles. There is the additional aspect that Norcroft C - treats long doubles as doubles and we ought to remain compatible. - Perhaps someone with an FPA coprocessor and not running RISCiX would like - to try this someday. */ - /* #define LONG_DOUBLE_TYPE_SIZE 96 */ - - /* Disable XFmode patterns in md file */ - #define ENABLE_XF_PATTERNS 0 - /* Define this if most significant bit is lowest numbered in instructions that operate on numbered bit-fields. */ #define BITS_BIG_ENDIAN 0 --- 641,646 ---- Index: arm.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.md,v retrieving revision 1.114 diff -p -r1.114 arm.md *** arm.md 16 Dec 2002 18:20:56 -0000 1.114 --- arm.md 8 Jan 2003 11:40:32 -0000 *************** *** 24,32 **** ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. - ;; There are patterns in this file to support XFmode arithmetic. - ;; Unfortunately RISC iX doesn't work well with these so they are disabled. - ;; (See arm.h) ;;--------------------------------------------------------------------------- ;; Constants --- 24,29 ---- *************** *** 153,159 **** ; mult a multiply instruction ; block blockage insn, this blocks all functional units ; float a floating point arithmetic operation (subject to expansion) - ; fdivx XFmode floating point division ; fdivd DFmode floating point division ; fdivs SFmode floating point division ; fmul Floating point multiply --- 150,155 ---- *************** *** 856,873 **** (set_attr "predicable" "yes")] ) - (define_insn "addxf3" - [(set (match_operand:XF 0 "s_register_operand" "=f,f") - (plus:XF (match_operand:XF 1 "s_register_operand" "f,f") - (match_operand:XF 2 "fpu_add_operand" "fG,H")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "@ - adf%?e\\t%0, %1, %2 - suf%?e\\t%0, %1, #%N2" - [(set_attr "type" "farith") - (set_attr "predicable" "yes")] - ) - (define_expand "subdi3" [(parallel [(set (match_operand:DI 0 "s_register_operand" "") --- 852,857 ---- *************** *** 1119,1136 **** [(set_attr "type" "farith") (set_attr "predicable" "yes")] ) - - (define_insn "subxf3" - [(set (match_operand:XF 0 "s_register_operand" "=f,f") - (minus:XF (match_operand:XF 1 "fpu_rhs_operand" "f,G") - (match_operand:XF 2 "fpu_rhs_operand" "fG,f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "@ - suf%?e\\t%0, %1, %2 - rsf%?e\\t%0, %2, %1" - [(set_attr "type" "farith") - (set_attr "predicable" "yes")] - ) ;; Multiplication insns --- 1103,1108 ---- *************** *** 1415,1430 **** [(set_attr "type" "fmul") (set_attr "predicable" "yes")] ) - - (define_insn "mulxf3" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (mult:XF (match_operand:XF 1 "s_register_operand" "f") - (match_operand:XF 2 "fpu_rhs_operand" "fG")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "muf%?e\\t%0, %1, %2" - [(set_attr "type" "fmul") - (set_attr "predicable" "yes")] - ) ;; Division insns --- 1387,1392 ---- *************** *** 1485,1502 **** [(set_attr "type" "fdivd") (set_attr "predicable" "yes")] ) - - (define_insn "divxf3" - [(set (match_operand:XF 0 "s_register_operand" "=f,f") - (div:XF (match_operand:XF 1 "fpu_rhs_operand" "f,G") - (match_operand:XF 2 "fpu_rhs_operand" "fG,f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "@ - dvf%?e\\t%0, %1, %2 - rdf%?e\\t%0, %2, %1" - [(set_attr "type" "fdivx") - (set_attr "predicable" "yes")] - ) ;; Modulo insns --- 1447,1452 ---- *************** *** 1553,1568 **** [(set_attr "type" "fdivd") (set_attr "predicable" "yes")] ) - - (define_insn "modxf3" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (mod:XF (match_operand:XF 1 "s_register_operand" "f") - (match_operand:XF 2 "fpu_rhs_operand" "fG")))] - "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "rmf%?e\\t%0, %1, %2" - [(set_attr "type" "fdivx") - (set_attr "predicable" "yes")] - ) ;; Boolean and,ior,xor insns --- 1503,1508 ---- *************** *** 2793,2807 **** (set_attr "predicable" "yes")] ) - (define_insn "negxf2" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (neg:XF (match_operand:XF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "mnf%?e\\t%0, %1" - [(set_attr "type" "ffarith") - (set_attr "predicable" "yes")] - ) - ;; abssi2 doesn't really clobber the condition codes if a different register ;; is being set. To keep things simple, assume during rtl manipulations that ;; it does, but tell the final scan operator the truth. Similarly for --- 2733,2738 ---- *************** *** 2863,2877 **** (set_attr "predicable" "yes")] ) - (define_insn "absxf2" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (abs:XF (match_operand:XF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "abs%?e\\t%0, %1" - [(set_attr "type" "ffarith") - (set_attr "predicable" "yes")] - ) - (define_insn "sqrtsf2" [(set (match_operand:SF 0 "s_register_operand" "=f") (sqrt:SF (match_operand:SF 1 "s_register_operand" "f")))] --- 2794,2799 ---- *************** *** 2900,2982 **** (set_attr "predicable" "yes")] ) - (define_insn "sqrtxf2" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (sqrt:XF (match_operand:XF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "sqt%?e\\t%0, %1" - [(set_attr "type" "float_em") - (set_attr "predicable" "yes")] - ) - - ;; SIN COS TAN and family are always emulated, so it's probably better - ;; to always call a library function. - ;(define_insn "sinsf2" - ; [(set (match_operand:SF 0 "s_register_operand" "=f") - ; (unspec:SF [(match_operand:SF 1 "s_register_operand" "f")] - ; UNSPEC_SIN))] - ; "TARGET_ARM && TARGET_HARD_FLOAT" - ; "sin%?s\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "sindf2" - ; [(set (match_operand:DF 0 "s_register_operand" "=f") - ; (unspec:DF [(match_operand:DF 1 "s_register_operand" "f")] - ; UNSPEC_SIN))] - ; "TARGET_ARM && TARGET_HARD_FLOAT" - ; "sin%?d\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "*sindf_esfdf" - ; [(set (match_operand:DF 0 "s_register_operand" "=f") - ; (unspec:DF [(float_extend:DF - ; (match_operand:SF 1 "s_register_operand" "f"))] - ; UNSPEC_SIN))] - ; "TARGET_ARM && TARGET_HARD_FLOAT" - ; "sin%?d\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "sinxf2" - ; [(set (match_operand:XF 0 "s_register_operand" "=f") - ; (unspec:XF [(match_operand:XF 1 "s_register_operand" "f")] - ; UNSPEC_SIN))] - ; "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - ; "sin%?e\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "cossf2" - ; [(set (match_operand:SF 0 "s_register_operand" "=f") - ; (unspec:SF [(match_operand:SF 1 "s_register_operand" "f")] - ; UNSPEC_COS))] - ; "TARGET_ARM && TARGET_HARD_FLOAT" - ; "cos%?s\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "cosdf2" - ; [(set (match_operand:DF 0 "s_register_operand" "=f") - ; (unspec:DF [(match_operand:DF 1 "s_register_operand" "f")] - ; UNSPEC_COS))] - ; "TARGET_ARM && TARGET_HARD_FLOAT" - ; "cos%?d\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "*cosdf_esfdf" - ; [(set (match_operand:DF 0 "s_register_operand" "=f") - ; (unspec:DF [(float_extend:DF - ; (match_operand:SF 1 "s_register_operand" "f"))] - ; UNSPEC_COS))] - ; "TARGET_ARM && TARGET_HARD_FLOAT" - ; "cos%?d\\t%0, %1" - ;[(set_attr "type" "float_em")]) - ; - ;(define_insn "cosxf2" - ; [(set (match_operand:XF 0 "s_register_operand" "=f") - ; (unspec:XF [(match_operand:XF 1 "s_register_operand" "f")] - ; UNSEPC_COS))] - ; "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - ; "cos%?e\\t%0, %1" - ;[(set_attr "type" "float_em")]) - (define_insn_and_split "one_cmpldi2" [(set (match_operand:DI 0 "s_register_operand" "=&r,&r") (not:DI (match_operand:DI 1 "s_register_operand" "?r,0")))] --- 2822,2827 ---- *************** *** 3060,3074 **** (set_attr "predicable" "yes")] ) - (define_insn "floatsixf2" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (float:XF (match_operand:SI 1 "s_register_operand" "r")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "flt%?e\\t%0, %1" - [(set_attr "type" "r_2_f") - (set_attr "predicable" "yes")] - ) - (define_insn "fix_truncsfsi2" [(set (match_operand:SI 0 "s_register_operand" "=r") (fix:SI (match_operand:SF 1 "s_register_operand" "f")))] --- 2905,2910 ---- *************** *** 3087,3101 **** (set_attr "predicable" "yes")] ) - (define_insn "fix_truncxfsi2" - [(set (match_operand:SI 0 "s_register_operand" "=r") - (fix:SI (match_operand:XF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "fix%?z\\t%0, %1" - [(set_attr "type" "f_2_r") - (set_attr "predicable" "yes")] - ) - ;; Truncation insns (define_insn "truncdfsf2" --- 2923,2928 ---- *************** *** 3107,3132 **** [(set_attr "type" "ffarith") (set_attr "predicable" "yes")] ) - - (define_insn "truncxfsf2" - [(set (match_operand:SF 0 "s_register_operand" "=f") - (float_truncate:SF - (match_operand:XF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "mvf%?s\\t%0, %1" - [(set_attr "type" "ffarith") - (set_attr "predicable" "yes")] - ) - - (define_insn "truncxfdf2" - [(set (match_operand:DF 0 "s_register_operand" "=f") - (float_truncate:DF - (match_operand:XF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "mvf%?d\\t%0, %1" - [(set_attr "type" "ffarith") - (set_attr "predicable" "yes")] - ) ;; Zero and sign extension instructions. --- 2934,2939 ---- *************** *** 3858,3882 **** [(set_attr "type" "ffarith") (set_attr "predicable" "yes")] ) - - (define_insn "extendsfxf2" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (float_extend:XF (match_operand:SF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "mvf%?e\\t%0, %1" - [(set_attr "type" "ffarith") - (set_attr "predicable" "yes")] - ) - - (define_insn "extenddfxf2" - [(set (match_operand:XF 0 "s_register_operand" "=f") - (float_extend:XF (match_operand:DF 1 "s_register_operand" "f")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "mvf%?e\\t%0, %1" - [(set_attr "type" "ffarith") - (set_attr "predicable" "yes")] - ) - ;; Move insns (including loads and stores) --- 3665,3670 ---- *************** *** 5173,5191 **** ) ! (define_expand "movxf" ! [(set (match_operand:XF 0 "general_operand" "") ! (match_operand:XF 1 "general_operand" ""))] ! "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" ! "") ! ! ;; Even when the XFmode patterns aren't enabled, we enable this after ! ;; reloading so that we can push floating point registers in the prologue. (define_insn "*movxf_hard_insn" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,f,f,m,f,r,r") (match_operand:XF 1 "general_operand" "fG,H,m,f,r,f,r"))] ! "TARGET_ARM && TARGET_HARD_FLOAT && (ENABLE_XF_PATTERNS || reload_completed)" "* switch (which_alternative) { --- 4961,4975 ---- ) ! ;; Saving and restoring the floating point registers in the prologue should ! ;; be done in XFmode, even though we don't support that for anything else ! ;; (Well, strictly it's 'internal representation', but that's effectively ! ;; XFmode). (define_insn "*movxf_hard_insn" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,f,f,m,f,r,r") (match_operand:XF 1 "general_operand" "fG,H,m,f,r,f,r"))] ! "TARGET_ARM && TARGET_HARD_FLOAT && reload_completed" "* switch (which_alternative) { *************** *** 5652,5668 **** " ) - (define_expand "cmpxf" - [(match_operand:XF 0 "s_register_operand" "") - (match_operand:XF 1 "fpu_rhs_operand" "")] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - " - arm_compare_op0 = operands[0]; - arm_compare_op1 = operands[1]; - DONE; - " - ) - (define_insn "*arm_cmpsi_insn" [(set (reg:CC CC_REGNUM) (compare:CC (match_operand:SI 0 "s_register_operand" "r,r") --- 5436,5441 ---- *************** *** 5761,5778 **** (set_attr "type" "f_2_r")] ) - (define_insn "*cmpxf_insn" - [(set (reg:CCFP CC_REGNUM) - (compare:CCFP (match_operand:XF 0 "s_register_operand" "f,f") - (match_operand:XF 1 "fpu_add_operand" "fG,H")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "@ - cmf%?\\t%0, %1 - cnf%?\\t%0, #%N1" - [(set_attr "conds" "set") - (set_attr "type" "f_2_r")] - ) - (define_insn "*cmpsf_trap" [(set (reg:CCFPE CC_REGNUM) (compare:CCFPE (match_operand:SF 0 "s_register_operand" "f,f") --- 5534,5539 ---- *************** *** 5817,5834 **** (match_operand:SF 1 "s_register_operand" "f"))))] "TARGET_ARM && TARGET_HARD_FLOAT" "cmf%?e\\t%0, %1" - [(set_attr "conds" "set") - (set_attr "type" "f_2_r")] - ) - - (define_insn "*cmpxf_trap" - [(set (reg:CCFPE CC_REGNUM) - (compare:CCFPE (match_operand:XF 0 "s_register_operand" "f,f") - (match_operand:XF 1 "fpu_add_operand" "fG,H")))] - "TARGET_ARM && ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT" - "@ - cmf%?e\\t%0, %1 - cnf%?e\\t%0, #%N1" [(set_attr "conds" "set") (set_attr "type" "f_2_r")] ) --- 5578,5583 ---- --==_Exmh_-20599706020-- From gcc-patches-return-75232-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 12:23:51 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 31636 invoked by alias); 8 Jan 2003 12:23:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 31617 invoked from network); 8 Jan 2003 12:23:48 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 8 Jan 2003 12:23:48 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 612CF40C1; Wed, 8 Jan 2003 13:23:36 +0100 (CET) Date: Wed, 8 Jan 2003 13:23:36 +0100 From: Josef Zlomek To: gcc-patches@gcc.gnu.org Subject: Re: [patch] add necessary dependencies Message-ID: <20030108122336.GA27233@artax.karlin.mff.cuni.cz> References: <20030105144156.GA16943@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030105144156.GA16943@artax.karlin.mff.cuni.cz> User-Agent: Mutt/1.3.28i Hi, basic-block.h includes partition.h and needs some definitions from hard-reg-set.h which was not included from basic-block.h. The dependencies were not specified in Makefile.in. This patch adds the dependencies and the include. (I forgot to include hard-reg-set.h in last patch) Bootstrapped mainline i386 (pentium 4). Josef Wed Jan 8 13:23:31 CET 2003 Josef Zlomek * Makefile.in (PARTITION_H): New. (BASIC_BLOCK_H): Added hard-reg-set.h and $(PARTITION_H). * basic-block.h: Include hard-reg-set.h. Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v retrieving revision 1.963 diff -c -3 -p -r1.963 Makefile.in *** Makefile.in 7 Jan 2003 17:05:05 -0000 1.963 --- Makefile.in 8 Jan 2003 11:44:48 -0000 *************** HASHTAB_H = $(srcdir)/../include/hasht *** 254,259 **** --- 254,260 ---- OBSTACK_H = $(srcdir)/../include/obstack.h SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h FIBHEAP_H = $(srcdir)/../include/fibheap.h + PARTITION_H = $(srcdir)/../include/partition.h # Default native SYSTEM_HEADER_DIR, to be overridden by targets. NATIVE_SYSTEM_HEADER_DIR = /usr/include *************** RTL_H = $(RTL_BASE_H) genrtl.h *** 576,582 **** PARAMS_H = params.h params.def TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ location.h ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h DEMANGLE_H = $(srcdir)/../include/demangle.h RECOG_H = recog.h EXPR_H = expr.h --- 577,584 ---- PARAMS_H = params.h params.def TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ location.h ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \ ! hard-reg-set.h DEMANGLE_H = $(srcdir)/../include/demangle.h RECOG_H = recog.h EXPR_H = expr.h Index: basic-block.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/basic-block.h,v retrieving revision 1.163 diff -c -3 -p -r1.163 basic-block.h *** basic-block.h 19 Dec 2002 02:59:15 -0000 1.163 --- basic-block.h 8 Jan 2003 11:44:48 -0000 *************** Software Foundation, 59 Temple Place - S *** 26,31 **** --- 26,32 ---- #include "sbitmap.h" #include "varray.h" #include "partition.h" + #include "hard-reg-set.h" /* Head of register set linked list. */ typedef bitmap_head regset_head; From gcc-patches-return-75233-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 12:25:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32103 invoked by alias); 8 Jan 2003 12:25:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 30991 invoked from network); 8 Jan 2003 12:22:27 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 8 Jan 2003 12:22:27 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h08CMEF21740 for ; Wed, 8 Jan 2003 07:22:14 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WFCR-0000al-00 for ; Wed, 08 Jan 2003 07:20:47 -0500 Date: Wed, 8 Jan 2003 07:20:47 -0500 To: gcc-patches@gcc.gnu.org Subject: (patch) More #if 0 removal. Message-ID: <20030108122047.GA2275@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode The following two #if 0 blocks seem clearly dead to me. The things they comment out are not refered to anywhere else, at all. I'll wait for approval, though. * decl.c: Remove some #if 0 code. Index: decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v retrieving revision 1.981 diff -u -r1.981 decl.c --- decl.c 3 Jan 2003 23:13:09 -0000 1.981 +++ decl.c 8 Jan 2003 12:20:46 -0000 @@ -5391,15 +5391,6 @@ return NULL_TREE; } -#if 0 -void -set_current_level_tags_transparency (tags_transparent) - int tags_transparent; -{ - current_binding_level->tag_transparent = tags_transparent; -} -#endif - /* Given a type, find the tag that was defined for it and return the tag name. Otherwise return 0. However, the value can never be 0 in the cases in which this is used. @@ -7184,11 +7175,6 @@ tree decl; register tree type, tem; tree context; - -#if 0 - /* See code below that used this. */ - int init_written = initialized; -#endif /* This should only be done once on the top most decl. */ if (have_extern_spec) From gcc-patches-return-75234-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 12:50:08 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10065 invoked by alias); 8 Jan 2003 12:50:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10041 invoked from network); 8 Jan 2003 12:50:04 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 8 Jan 2003 12:50:04 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 5964D14ABA; Wed, 8 Jan 2003 13:49:52 +0100 (MET) To: Josef Zlomek Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] add necessary dependencies References: <20030105144156.GA16943@artax.karlin.mff.cuni.cz> <20030108122336.GA27233@artax.karlin.mff.cuni.cz> From: Andreas Jaeger Date: Wed, 08 Jan 2003 13:49:50 +0100 In-Reply-To: <20030108122336.GA27233@artax.karlin.mff.cuni.cz> (Josef Zlomek's message of "Wed, 8 Jan 2003 13:23:36 +0100") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Josef Zlomek writes: > Hi, > > basic-block.h includes partition.h and needs some definitions > from hard-reg-set.h which was not included from basic-block.h. > The dependencies were not specified in Makefile.in. > This patch adds the dependencies and the include. > (I forgot to include hard-reg-set.h in last patch) > > Bootstrapped mainline i386 (pentium 4). I would consider this as obvious, Andreas > Josef > > > Wed Jan 8 13:23:31 CET 2003 Josef Zlomek > > * Makefile.in (PARTITION_H): New. > (BASIC_BLOCK_H): Added hard-reg-set.h and $(PARTITION_H). > * basic-block.h: Include hard-reg-set.h. > > Index: Makefile.in > =================================================================== > RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v > retrieving revision 1.963 > diff -c -3 -p -r1.963 Makefile.in > *** Makefile.in 7 Jan 2003 17:05:05 -0000 1.963 > --- Makefile.in 8 Jan 2003 11:44:48 -0000 > *************** HASHTAB_H = $(srcdir)/../include/hasht > *** 254,259 **** > --- 254,260 ---- > OBSTACK_H = $(srcdir)/../include/obstack.h > SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h > FIBHEAP_H = $(srcdir)/../include/fibheap.h > + PARTITION_H = $(srcdir)/../include/partition.h > > # Default native SYSTEM_HEADER_DIR, to be overridden by targets. > NATIVE_SYSTEM_HEADER_DIR = /usr/include > *************** RTL_H = $(RTL_BASE_H) genrtl.h > *** 576,582 **** > PARAMS_H = params.h params.def > TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ > location.h > ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h > DEMANGLE_H = $(srcdir)/../include/demangle.h > RECOG_H = recog.h > EXPR_H = expr.h > --- 577,584 ---- > PARAMS_H = params.h params.def > TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ > location.h > ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \ > ! hard-reg-set.h > DEMANGLE_H = $(srcdir)/../include/demangle.h > RECOG_H = recog.h > EXPR_H = expr.h > Index: basic-block.h > =================================================================== > RCS file: /cvs/gcc/gcc/gcc/basic-block.h,v > retrieving revision 1.163 > diff -c -3 -p -r1.163 basic-block.h > *** basic-block.h 19 Dec 2002 02:59:15 -0000 1.163 > --- basic-block.h 8 Jan 2003 11:44:48 -0000 > *************** Software Foundation, 59 Temple Place - S > *** 26,31 **** > --- 26,32 ---- > #include "sbitmap.h" > #include "varray.h" > #include "partition.h" > + #include "hard-reg-set.h" > > /* Head of register set linked list. */ > typedef bitmap_head regset_head; > -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75235-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 13:00:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16476 invoked by alias); 8 Jan 2003 13:00:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16395 invoked from network); 8 Jan 2003 13:00:00 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 8 Jan 2003 13:00:00 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id 11ACC40C1; Wed, 8 Jan 2003 13:59:48 +0100 (CET) Date: Wed, 8 Jan 2003 13:59:47 +0100 From: Josef Zlomek To: Andreas Jaeger Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] add necessary dependencies Message-ID: <20030108125947.GA1416@artax.karlin.mff.cuni.cz> References: <20030105144156.GA16943@artax.karlin.mff.cuni.cz> <20030108122336.GA27233@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i > > Hi, > > > > basic-block.h includes partition.h and needs some definitions > > from hard-reg-set.h which was not included from basic-block.h. > > The dependencies were not specified in Makefile.in. > > This patch adds the dependencies and the include. > > (I forgot to include hard-reg-set.h in last patch) > > > > Bootstrapped mainline i386 (pentium 4). > > I would consider this as obvious, Alright, I'll commit it then as obvious. Josef > > Wed Jan 8 13:23:31 CET 2003 Josef Zlomek > > > > * Makefile.in (PARTITION_H): New. > > (BASIC_BLOCK_H): Added hard-reg-set.h and $(PARTITION_H). > > * basic-block.h: Include hard-reg-set.h. > > > > Index: Makefile.in > > =================================================================== > > RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v > > retrieving revision 1.963 > > diff -c -3 -p -r1.963 Makefile.in > > *** Makefile.in 7 Jan 2003 17:05:05 -0000 1.963 > > --- Makefile.in 8 Jan 2003 11:44:48 -0000 > > *************** HASHTAB_H = $(srcdir)/../include/hasht > > *** 254,259 **** > > --- 254,260 ---- > > OBSTACK_H = $(srcdir)/../include/obstack.h > > SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h > > FIBHEAP_H = $(srcdir)/../include/fibheap.h > > + PARTITION_H = $(srcdir)/../include/partition.h > > > > # Default native SYSTEM_HEADER_DIR, to be overridden by targets. > > NATIVE_SYSTEM_HEADER_DIR = /usr/include > > *************** RTL_H = $(RTL_BASE_H) genrtl.h > > *** 576,582 **** > > PARAMS_H = params.h params.def > > TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ > > location.h > > ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h > > DEMANGLE_H = $(srcdir)/../include/demangle.h > > RECOG_H = recog.h > > EXPR_H = expr.h > > --- 577,584 ---- > > PARAMS_H = params.h params.def > > TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \ > > location.h > > ! BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \ > > ! hard-reg-set.h > > DEMANGLE_H = $(srcdir)/../include/demangle.h > > RECOG_H = recog.h > > EXPR_H = expr.h > > Index: basic-block.h > > =================================================================== > > RCS file: /cvs/gcc/gcc/gcc/basic-block.h,v > > retrieving revision 1.163 > > diff -c -3 -p -r1.163 basic-block.h > > *** basic-block.h 19 Dec 2002 02:59:15 -0000 1.163 > > --- basic-block.h 8 Jan 2003 11:44:48 -0000 > > *************** Software Foundation, 59 Temple Place - S > > *** 26,31 **** > > --- 26,32 ---- > > #include "sbitmap.h" > > #include "varray.h" > > #include "partition.h" > > + #include "hard-reg-set.h" > > > > /* Head of register set linked list. */ > > typedef bitmap_head regset_head; From gcc-patches-return-75236-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 13:09:48 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20383 invoked by alias); 8 Jan 2003 13:09:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20071 invoked from network); 8 Jan 2003 13:07:11 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 8 Jan 2003 13:07:11 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h08D6xk21333 for ; Wed, 8 Jan 2003 08:06:59 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WFtj-00041s-00 for ; Wed, 08 Jan 2003 08:05:31 -0500 Date: Wed, 8 Jan 2003 08:05:31 -0500 To: gcc-patches@gcc.gnu.org Subject: Protect java/java-tree.h against multiple inclusion Message-ID: <20030108130531.GA15489@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Ran into this while trying to do some other cleanups on the Java front end. * java-tree.h: Protect against multiple inclusion. Index: java-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/java-tree.h,v retrieving revision 1.165 diff -u -r1.165 java-tree.h --- java-tree.h 1 Jan 2003 15:10:01 -0000 1.165 +++ java-tree.h 8 Jan 2003 13:05:05 -0000 @@ -26,6 +26,9 @@ /* Hacked by Per Bothner February 1996. */ +#ifndef GCC_JAVA_TREE_H +#define GCC_JAVA_TREE_H + #include "hashtab.h" /* Java language-specific tree codes. */ @@ -1753,3 +1756,4 @@ }; #undef DEBUG_JAVA_BINDING_LEVELS +#endif /* ! GCC_JAVA_TREE_H */ From gcc-patches-return-75237-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 13:25:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25208 invoked by alias); 8 Jan 2003 13:25:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 24898 invoked from network); 8 Jan 2003 13:22:34 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by sources.redhat.com with SMTP; 8 Jan 2003 13:22:34 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-18.rdu.redhat.com [172.16.50.18]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 79867ABAF8; Wed, 8 Jan 2003 13:22:32 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h08DMxx07566; Wed, 8 Jan 2003 13:22:59 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15900.9779.342863.908931@cuddles.cambridge.redhat.com> Date: Wed, 8 Jan 2003 13:22:59 +0000 (GMT) To: Nathanael Nerode Cc: gcc-patches@gcc.gnu.org Subject: Protect java/java-tree.h against multiple inclusion In-Reply-To: <20030108130531.GA15489@doctormoo> References: <20030108130531.GA15489@doctormoo> Nathanael Nerode writes: > Ran into this while trying to do some other cleanups on the Java front end. > > * java-tree.h: Protect against multiple inclusion. OK. From gcc-patches-return-75238-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 13:29:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27231 invoked by alias); 8 Jan 2003 13:29:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26593 invoked from network); 8 Jan 2003 13:26:30 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.169) by sources.redhat.com with SMTP; 8 Jan 2003 13:26:30 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h08DQSF27859 for ; Wed, 8 Jan 2003 08:26:28 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WGCb-0004Ga-00 for ; Wed, 08 Jan 2003 08:25:01 -0500 Date: Wed, 8 Jan 2003 08:25:01 -0500 To: gcc-patches@gcc.gnu.org Subject: (ping) delete gcc.hlp Message-ID: <20030108132501.GA16384@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode This one's still awaiting review: Delete gcc.hlp http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00165.html From gcc-patches-return-75239-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 14:01:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14940 invoked by alias); 8 Jan 2003 14:01:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14888 invoked from network); 8 Jan 2003 14:01:14 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 8 Jan 2003 14:01:14 -0000 Received: from localhost (IDENT:LPVwcsxxD6GY9D9feICWAHd8n08K5ncO@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h08E11lU010997 for ; Wed, 8 Jan 2003 09:01:01 -0500 Date: Wed, 08 Jan 2003 09:00:53 -0500 (EST) Message-Id: <20030108.090053.71110251.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.h: Allow CONST and HIGH in CONSTANT_ADDRESS_P. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.1, Required: 5 X-Spam-Tests: UPPERCASE_25_50,UNIFIED_PATCH X-Spam-Report: SPAM: -3.1 hits, 5 required; SPAM: * 1.9 -- BODY: message body is 25-50% uppercase SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to allow CONST and HIGH in CONSTANT_ADDRESS_P. With the patch, for example, a byte access to memory that used to be done by mov.l er0,er2 add.l #__ctype_+1,er2 mov.b @er2,r2l is now done by mov.b @(__ctype_+1,er0),r2l Testing with newlib shows better code is generated in general. Tested on h8300 port. Committed. Kazu Hirata 2003-01-08 Kazu Hirata * config/h8300/h8300.h (CONSTANT_ADDRESS_P): Allow CONST and HIGH on all variants. Index: h8300.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.h,v retrieving revision 1.129 diff -u -r1.129 h8300.h --- h8300.h 1 Jan 2003 12:26:56 -0000 1.129 +++ h8300.h 8 Jan 2003 13:35:28 -0000 @@ -802,8 +802,7 @@ /* We handle signed and unsigned offsets here. */ \ && INTVAL (X) > (TARGET_H8300 ? -0x10000 : -0x1000000) \ && INTVAL (X) < (TARGET_H8300 ? 0x10000 : 0x1000000)) \ - || ((GET_CODE (X) == HIGH || GET_CODE (X) == CONST) \ - && TARGET_H8300)) + || (GET_CODE (X) == HIGH || GET_CODE (X) == CONST)) /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ From gcc-patches-return-75240-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 14:02:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17014 invoked by alias); 8 Jan 2003 14:02:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16929 invoked from network); 8 Jan 2003 14:02:43 -0000 Received: from unknown (HELO mail.cs.umass.edu) (128.119.243.168) by 209.249.29.67 with SMTP; 8 Jan 2003 14:02:43 -0000 Received: from localhost (IDENT:zW8ChkCtzusHXPmOiuSfeXZwn9Pbw7Bb@loki.cs.umass.edu [128.119.243.168]) by mail.cs.umass.edu (8.12.6/8.12.5) with ESMTP id h08E2UlU011197 for ; Wed, 8 Jan 2003 09:02:30 -0500 Date: Wed, 08 Jan 2003 09:02:21 -0500 (EST) Message-Id: <20030108.090221.122599668.kazu@cs.umass.edu> To: gcc-patches@gcc.gnu.org Subject: [patch] h8300.c: A minor clean up. From: Kazu Hirata Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Checked: This message probably not SPAM X-Spam-Score: -3.9, Required: 5 X-Spam-Tests: DOUBLE_CAPSWORD,UNIFIED_PATCH X-Spam-Report: SPAM: -3.9 hits, 5 required; SPAM: * 1.1 -- BODY: A word in all caps repeated on the line SPAM: * -5.0 -- BODY: Contains what looks like a patch from diff -u X-Scanned-By: MIMEDefang 2.26 (www . roaringpenguin . com / mimedefang) Hi, Attached is a patch to clean up code to output logical operations. Tested on h8300 port. Committed. Kazu Hirata 2003-01-08 Kazu Hirata * config/h8300/h8300.c (output_logical_op): Replace byte/word extraction of det with b0, b1, w0, w2, etc. (compute_logical_op_length): Likewise. (compute_logical_op_cc): Likewise. Index: h8300.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v retrieving revision 1.200 diff -u -r1.200 h8300.c --- h8300.c 7 Jan 2003 16:02:20 -0000 1.200 +++ h8300.c 8 Jan 2003 13:36:22 -0000 @@ -2064,6 +2064,8 @@ /* Break up DET into pieces. */ const unsigned HOST_WIDE_INT b0 = (det >> 0) & 0xff; const unsigned HOST_WIDE_INT b1 = (det >> 8) & 0xff; + const unsigned HOST_WIDE_INT b2 = (det >> 16) & 0xff; + const unsigned HOST_WIDE_INT b3 = (det >> 24) & 0xff; const unsigned HOST_WIDE_INT w0 = (det >> 0) & 0xffff; const unsigned HOST_WIDE_INT w1 = (det >> 16) & 0xffff; int lower_half_easy_p = 0; @@ -2092,8 +2094,8 @@ case HImode: /* First, see if we can finish with one insn. */ if ((TARGET_H8300H || TARGET_H8300S) - && ((det & 0x00ff) != 0) - && ((det & 0xff00) != 0)) + && b0 != 0 + && b1 != 0) { sprintf (insn_buf, "%s.w\t%%T2,%%T0", opname); output_asm_insn (insn_buf, operands); @@ -2101,13 +2103,13 @@ else { /* Take care of the lower byte. */ - if ((det & 0x00ff) != 0) + if (b0 != 0) { sprintf (insn_buf, "%s\t%%s2,%%s0", opname); output_asm_insn (insn_buf, operands); } /* Take care of the upper byte. */ - if ((det & 0xff00) != 0) + if (b1 != 0) { sprintf (insn_buf, "%s\t%%t2,%%t0", opname); output_asm_insn (insn_buf, operands); @@ -2146,46 +2148,46 @@ 1) the special insn (in case of AND or XOR), 2) the word-wise insn, and 3) The byte-wise insn. */ - if ((det & 0x0000ffff) == 0x0000ffff + if (w0 == 0xffff && (TARGET_H8300 ? (code == AND) : (code != IOR))) output_asm_insn ((code == AND) ? "sub.w\t%f0,%f0" : "not.w\t%f0", operands); else if ((TARGET_H8300H || TARGET_H8300S) - && ((det & 0x000000ff) != 0) - && ((det & 0x0000ff00) != 0)) + && (b0 != 0) + && (b1 != 0)) { sprintf (insn_buf, "%s.w\t%%f2,%%f0", opname); output_asm_insn (insn_buf, operands); } else { - if ((det & 0x000000ff) != 0) + if (b0 != 0) { sprintf (insn_buf, "%s\t%%w2,%%w0", opname); output_asm_insn (insn_buf, operands); } - if ((det & 0x0000ff00) != 0) + if (b1 != 0) { sprintf (insn_buf, "%s\t%%x2,%%x0", opname); output_asm_insn (insn_buf, operands); } } - if ((det & 0xffff0000) == 0xffff0000 + if ((w1 == 0xffff) && (TARGET_H8300 ? (code == AND) : (code != IOR))) output_asm_insn ((code == AND) ? "sub.w\t%e0,%e0" : "not.w\t%e0", operands); else if ((TARGET_H8300H || TARGET_H8300S) && code == AND - && (det & 0xffff0000) == 0xff000000) + && w1 == 0xff00) { output_asm_insn ("extu.w\t%e0", operands); } else if (TARGET_H8300H || TARGET_H8300S) { - if ((det & 0xffff0000) != 0) + if (w1 != 0) { sprintf (insn_buf, "%s.w\t%%e2,%%e0", opname); output_asm_insn (insn_buf, operands); @@ -2193,12 +2195,12 @@ } else { - if ((det & 0x00ff0000) != 0) + if (b2 != 0) { sprintf (insn_buf, "%s\t%%y2,%%y0", opname); output_asm_insn (insn_buf, operands); } - if ((det & 0xff000000) != 0) + if (b3 != 0) { sprintf (insn_buf, "%s\t%%z2,%%z0", opname); output_asm_insn (insn_buf, operands); @@ -2229,6 +2231,8 @@ /* Break up DET into pieces. */ const unsigned HOST_WIDE_INT b0 = (det >> 0) & 0xff; const unsigned HOST_WIDE_INT b1 = (det >> 8) & 0xff; + const unsigned HOST_WIDE_INT b2 = (det >> 16) & 0xff; + const unsigned HOST_WIDE_INT b3 = (det >> 24) & 0xff; const unsigned HOST_WIDE_INT w0 = (det >> 0) & 0xffff; const unsigned HOST_WIDE_INT w1 = (det >> 16) & 0xffff; int lower_half_easy_p = 0; @@ -2241,8 +2245,8 @@ case HImode: /* First, see if we can finish with one insn. */ if ((TARGET_H8300H || TARGET_H8300S) - && ((det & 0x00ff) != 0) - && ((det & 0xff00) != 0)) + && b0 != 0 + && b1 != 0) { if (REG_P (operands[2])) length += 2; @@ -2252,11 +2256,11 @@ else { /* Take care of the lower byte. */ - if ((det & 0x00ff) != 0) + if (b0 != 0) length += 2; /* Take care of the upper byte. */ - if ((det & 0xff00) != 0) + if (b1 != 0) length += 2; } break; @@ -2294,48 +2298,48 @@ 1) the special insn (in case of AND or XOR), 2) the word-wise insn, and 3) The byte-wise insn. */ - if ((det & 0x0000ffff) == 0x0000ffff + if (w0 == 0xffff && (TARGET_H8300 ? (code == AND) : (code != IOR))) { length += 2; } else if ((TARGET_H8300H || TARGET_H8300S) - && ((det & 0x000000ff) != 0) - && ((det & 0x0000ff00) != 0)) + && (b0 != 0) + && (b1 != 0)) { length += 4; } else { - if ((det & 0x000000ff) != 0) + if (b0 != 0) length += 2; - if ((det & 0x0000ff00) != 0) + if (b1 != 0) length += 2; } - if ((det & 0xffff0000) == 0xffff0000 + if (w1 == 0xffff && (TARGET_H8300 ? (code == AND) : (code != IOR))) { length += 2; } else if ((TARGET_H8300H || TARGET_H8300S) && code == AND - && (det & 0xffff0000) == 0xff000000) + && w1 == 0xff00) { length += 2; } else if (TARGET_H8300H || TARGET_H8300S) { - if ((det & 0xffff0000) != 0) + if (w1 != 0) length += 4; } else { - if ((det & 0x00ff0000) != 0) + if (b2 != 0) length += 2; - if ((det & 0xff000000) != 0) + if (b3 != 0) length += 2; } } @@ -2375,8 +2379,8 @@ case HImode: /* First, see if we can finish with one insn. */ if ((TARGET_H8300H || TARGET_H8300S) - && ((det & 0x00ff) != 0) - && ((det & 0xff00) != 0)) + && b0 != 0 + && b1 != 0) { cc = CC_SET_ZNV; } From gcc-patches-return-75241-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 14:54:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10030 invoked by alias); 8 Jan 2003 14:54:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6344 invoked from network); 8 Jan 2003 14:52:06 -0000 Received: from unknown (HELO mozart.inet.co.th) (203.150.14.100) by 209.249.29.67 with SMTP; 8 Jan 2003 14:52:06 -0000 Received: from TruPPP0D147.inet.co.th (IDENT:xrRcGCE1+/VeMQN/7IhNJLSlb+0KT58a@TruPPP0D147.inet.co.th [203.151.127.147]) by mozart.inet.co.th (8.9.1a/8.9.0) with ESMTP id VAA25002 for ; Wed, 8 Jan 2003 21:51:49 +0700 (GMT+0700) Date: Wed, 8 Jan 2003 21:56:35 +0700 (ICT) From: Kriang Lerdsuwanakij X-X-Sender: Reply-To: To: Subject: [C++ PATCH, committed] Fix PR9030 (main trunk version) Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi This is the version of PR9030 bug fix that I have committed to the main trunk. The approved version doesn't apply cleanly due to some surrounding code changes after new parser merge. Here are the changes I made in this version: - Use push_nested_class instead of pushclass. - The push_access_scope call in regenerate_decl_from_template use the wrong context. The correct context should be the already tsubst'ed one. - The ARG argument of push_access_scope is no longer used and removed. Tested on i686-pc-linux-gnu with no regressions. --Kriang 2003-01-07 Kriang Lerdsuwanakij PR c++/9030 * decl.c (make_typename_type): Check access only when tf_error. (make_unbound_class_template): Likewise. * pt.c (saved_access_scope): New variable. (push_access_scope_real): New function. (push_access_scope): Likewise. (pop_access_scope): Likewise. (tsubst_default_argument): Use them. (instantiate_template): Likewise. (regenerate_decl_from_template): Likewise. (instantiate_decl): Likewise. (get_mostly_instantiated_function_type): Likewise. 2002-01-07 Kriang Lerdsuwanakij PR c++/9030 * g++.dg/template/friend12.C: New test. * g++.dg/template/friend13.C: Likewise. * g++.old-deja/g++.eh/spec6.C: Add missing error message. * g++.old-deja/g++.other/defarg1.C: Change expected error message. diff -cprN gcc-main-save/gcc/cp/decl.c gcc-main-new/gcc/cp/decl.c *** gcc-main-save/gcc/cp/decl.c Tue Jan 7 21:21:51 2003 --- gcc-main-new/gcc/cp/decl.c Tue Jan 7 21:18:56 2003 *************** make_typename_type (context, name, compl *** 5671,5680 **** return error_mark_node; } ! if (complain & tf_parsing) ! type_access_control (context, tmpl); ! else ! enforce_access (context, tmpl); return lookup_template_class (tmpl, TREE_OPERAND (fullname, 1), --- 5671,5683 ---- return error_mark_node; } ! if (complain & tf_error) ! { ! if (complain & tf_parsing) ! type_access_control (context, tmpl); ! else ! enforce_access (context, tmpl); ! } return lookup_template_class (tmpl, TREE_OPERAND (fullname, 1), *************** make_typename_type (context, name, compl *** 5703,5712 **** return error_mark_node; } ! if (complain & tf_parsing) ! type_access_control (context, t); ! else ! enforce_access (context, t); if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl)) t = TREE_TYPE (t); --- 5706,5718 ---- return error_mark_node; } ! if (complain & tf_error) ! { ! if (complain & tf_parsing) ! type_access_control (context, t); ! else ! enforce_access (context, t); ! } if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl)) t = TREE_TYPE (t); *************** make_unbound_class_template (context, na *** 5774,5783 **** return error_mark_node; } ! if (complain & tf_parsing) ! type_access_control (context, tmpl); ! else ! enforce_access (context, tmpl); return tmpl; } --- 5780,5792 ---- return error_mark_node; } ! if (complain & tf_error) ! { ! if (complain & tf_parsing) ! type_access_control (context, tmpl); ! else ! enforce_access (context, tmpl); ! } return tmpl; } diff -cprN gcc-main-save/gcc/cp/pt.c gcc-main-new/gcc/cp/pt.c *** gcc-main-save/gcc/cp/pt.c Tue Jan 7 21:22:15 2003 --- gcc-main-new/gcc/cp/pt.c Wed Jan 8 20:48:17 2003 *************** static size_t inline_parm_levels_used; *** 67,72 **** --- 67,74 ---- static GTY(()) tree current_tinst_level; + static GTY(()) tree saved_access_scope; + /* A map from local variable declarations in the body of the template presently being instantiated to the corresponding instantiated local variables. */ *************** static htab_t local_specializations; *** 88,93 **** --- 90,98 ---- #define GTB_IGNORE_TYPE 2 /* We don't need to try to unify the current type with the desired type. */ + static void push_access_scope_real PARAMS ((tree, tree, tree)); + static void push_access_scope PARAMS ((tree)); + static void pop_access_scope PARAMS ((tree)); static int resolve_overloaded_unification PARAMS ((tree, tree, tree, tree, unification_kind_t, int)); static int try_one_overload PARAMS ((tree, tree, tree, tree, tree, *************** static int invalid_nontype_parm_type_p P *** 168,173 **** --- 173,252 ---- static int eq_local_specializations (const void *, const void *); static tree template_for_substitution (tree); + /* Make the current scope suitable for access checking when we are + processing T. T can be FUNCTION_DECL for instantiated function + template, TEMPLATE_DECL for uninstantiated one, or VAR_DECL for + static member variable (need by instantiate_decl). ARGS is the + template argument for TEMPLATE_DECL. If CONTEXT is not NULL_TREE, + this is used instead of the context of T. */ + + void + push_access_scope_real (t, args, context) + tree t, args, context; + { + if (TREE_CODE (t) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (t)) + { + /* When we are processing specialization `foo' for code like + + template typename U::Inner foo (); + class Outer { + struct Inner {}; + friend Outer::Inner foo (); + }; + + `T' is a TEMPLATE_DECL, but `Outer' is only a friend of one of + its specialization. We can get the FUNCTION_DECL with the right + information because this specialization has already been + registered by the friend declaration above. */ + + if (DECL_FUNCTION_TEMPLATE_P (t) && args) + { + tree full_args = tsubst_template_arg_vector + (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t)), args, tf_none); + tree spec = NULL_TREE; + if (full_args != error_mark_node) + spec = retrieve_specialization (t, full_args); + if (spec) + t = spec; + } + + saved_access_scope = tree_cons + (NULL_TREE, current_function_decl, saved_access_scope); + current_function_decl = t; + } + + if (!context) + context = DECL_CONTEXT (t); + if (context && TYPE_P (context)) + push_nested_class (context, 2); + } + + /* Like push_access_scope_real, but always uses DECL_CONTEXT. */ + + void + push_access_scope (t) + tree t; + { + push_access_scope_real (t, NULL_TREE, NULL_TREE); + } + + /* Restore the scope set up by push_access_scope. T is the node we + are processing. */ + + void + pop_access_scope (t) + tree t; + { + if (DECL_CLASS_SCOPE_P (t)) + pop_nested_class (); + + if (TREE_CODE (t) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (t)) + { + current_function_decl = TREE_VALUE (saved_access_scope); + saved_access_scope = TREE_CHAIN (saved_access_scope); + } + } + /* Do any processing required when DECL (a member template declaration) is finished. Returns the TEMPLATE_DECL corresponding to DECL, unless it is a specialization, in which case the DECL *************** tsubst_default_argument (fn, type, arg) *** 5733,5746 **** ??? current_class_type affects a lot more than name lookup. This is very fragile. Fortunately, it will go away when we do 2-phase name binding properly. */ ! if (DECL_CLASS_SCOPE_P (fn)) ! pushclass (DECL_CONTEXT (fn), 2); arg = tsubst_expr (arg, DECL_TI_ARGS (fn), tf_error | tf_warning, NULL_TREE); ! if (DECL_CLASS_SCOPE_P (fn)) ! popclass (); /* Make sure the default argument is reasonable. */ arg = check_default_argument (type, arg); --- 5812,5825 ---- ??? current_class_type affects a lot more than name lookup. This is very fragile. Fortunately, it will go away when we do 2-phase name binding properly. */ ! ! /* FN is already the desired FUNCTION_DECL. */ ! push_access_scope (fn); arg = tsubst_expr (arg, DECL_TI_ARGS (fn), tf_error | tf_warning, NULL_TREE); ! pop_access_scope (fn); /* Make sure the default argument is reasonable. */ arg = check_default_argument (type, arg); *************** instantiate_template (tmpl, targ_ptr) *** 7873,7889 **** } /* Make sure that we can see identifiers, and compute access ! correctly. */ ! if (DECL_CLASS_SCOPE_P (gen_tmpl)) ! pushclass (tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr, tf_error, ! gen_tmpl), 1); /* substitute template parameters */ fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl), targ_ptr, tf_error, gen_tmpl); ! if (DECL_CLASS_SCOPE_P (gen_tmpl)) ! popclass (); /* The DECL_TI_TEMPLATE should always be the immediate parent template, not the most general template. */ --- 7952,7968 ---- } /* Make sure that we can see identifiers, and compute access ! correctly. The desired FUNCTION_DECL for FNDECL may or may not be ! created earlier. Let push_access_scope_real figure that out. */ ! push_access_scope_real ! (gen_tmpl, targ_ptr, tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr, ! tf_error, gen_tmpl)); /* substitute template parameters */ fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl), targ_ptr, tf_error, gen_tmpl); ! pop_access_scope (gen_tmpl); /* The DECL_TI_TEMPLATE should always be the immediate parent template, not the most general template. */ *************** fn_type_unification (fn, explicit_targs, *** 7955,7961 **** int result; my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0); ! fntype = TREE_TYPE (fn); if (explicit_targs) { --- 8034,8040 ---- int result; my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0); ! fntype = TREE_TYPE (fn); if (explicit_targs) { *************** regenerate_decl_from_template (decl, tmp *** 9977,9982 **** --- 10056,10062 ---- instantiation of a specialization, which it isn't: it's a full instantiation. */ gen_tmpl = most_general_template (tmpl); + push_access_scope_real (gen_tmpl, args, DECL_CONTEXT (decl)); unregistered = unregister_specialization (decl, gen_tmpl); /* If the DECL was not unregistered then something peculiar is *************** regenerate_decl_from_template (decl, tmp *** 9984,9995 **** register_specialization for it. */ my_friendly_assert (unregistered, 0); - if (DECL_CLASS_SCOPE_P (decl)) - /* Make sure that we can see identifiers, and compute access - correctly, for the class members used in the declaration of - this static variable or function. */ - push_nested_class (DECL_CONTEXT (decl), 2); - /* Do the substitution to get the new declaration. */ new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE); --- 10064,10069 ---- *************** regenerate_decl_from_template (decl, tmp *** 10010,10018 **** DECL_INITIAL (decl) = NULL_TREE; } ! /* Pop the class context we pushed above. */ ! if (DECL_CLASS_SCOPE_P (decl)) ! pop_nested_class (); /* The immediate parent of the new template is still whatever it was before, even though tsubst sets DECL_TI_TEMPLATE up as the most --- 10084,10090 ---- DECL_INITIAL (decl) = NULL_TREE; } ! pop_access_scope (decl); /* The immediate parent of the new template is still whatever it was before, even though tsubst sets DECL_TI_TEMPLATE up as the most *************** instantiate_decl (d, defer_ok) *** 10218,10226 **** tree type = TREE_TYPE (gen); /* Make sure that we can see identifiers, and compute access ! correctly. */ ! if (DECL_CLASS_SCOPE_P (d)) ! pushclass (DECL_CONTEXT (d), 1); if (TREE_CODE (gen) == FUNCTION_DECL) { --- 10290,10298 ---- tree type = TREE_TYPE (gen); /* Make sure that we can see identifiers, and compute access ! correctly. D is already the target FUNCTION_DECL with the ! right context. */ ! push_access_scope (d); if (TREE_CODE (gen) == FUNCTION_DECL) { *************** instantiate_decl (d, defer_ok) *** 10235,10242 **** } tsubst (type, gen_args, tf_error | tf_warning, d); ! if (DECL_CLASS_SCOPE_P (d)) ! popclass (); } if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d) --- 10307,10313 ---- } tsubst (type, gen_args, tf_error | tf_warning, d); ! pop_access_scope (d); } if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d) *************** get_mostly_instantiated_function_type (d *** 10597,10604 **** partial substitution here. It depends only on outer template parameters, regardless of whether the innermost level is specialized or not. */ ! if (DECL_CLASS_SCOPE_P (decl)) ! pushclass (DECL_CONTEXT (decl), 1); /* Now, do the (partial) substitution to figure out the appropriate function type. */ --- 10668,10674 ---- partial substitution here. It depends only on outer template parameters, regardless of whether the innermost level is specialized or not. */ ! push_access_scope (decl); /* Now, do the (partial) substitution to figure out the appropriate function type. */ *************** get_mostly_instantiated_function_type (d *** 10611,10618 **** TREE_VEC_LENGTH (partial_args)--; tparms = tsubst_template_parms (tparms, partial_args, tf_error); ! if (DECL_CLASS_SCOPE_P (decl)) ! popclass (); } return fn_type; --- 10681,10687 ---- TREE_VEC_LENGTH (partial_args)--; tparms = tsubst_template_parms (tparms, partial_args, tf_error); ! pop_access_scope (decl); } return fn_type; diff -cprN gcc-main-save/gcc/testsuite/g++.dg/template/friend12.C gcc-main-new/gcc/testsuite/g++.dg/template/friend12.C *** gcc-main-save/gcc/testsuite/g++.dg/template/friend12.C Thu Jan 1 07:00:00 1970 --- gcc-main-new/gcc/testsuite/g++.dg/template/friend12.C Tue Jan 7 21:13:00 2003 *************** *** 0 **** --- 1,24 ---- + // { dg-do compile } + + // Origin: Wolfgang Bangerth + + // PR 9030. Perform access checking to parameter and return type of + // function template correctly when the template is friend. + + template class Outer { + private: + struct Inner {}; + + template + friend typename Outer::Inner foo (); + }; + + template + typename Outer::Inner + foo () { + return typename Outer::Inner(); + } + + void f() { + foo(); + } diff -cprN gcc-main-save/gcc/testsuite/g++.dg/template/friend13.C gcc-main-new/gcc/testsuite/g++.dg/template/friend13.C *** gcc-main-save/gcc/testsuite/g++.dg/template/friend13.C Thu Jan 1 07:00:00 1970 --- gcc-main-new/gcc/testsuite/g++.dg/template/friend13.C Tue Jan 7 21:13:00 2003 *************** *** 0 **** --- 1,21 ---- + // { dg-do compile } + + // Perform access checking to parameter and return type of + // function template correctly when only specialization is friend. + + template + typename T::Inner + foo () { + return typename T::Inner(); + } + + class Outer { + private: + struct Inner {}; + + friend Outer::Inner foo (); + }; + + void f() { + foo(); + } diff -cprN gcc-main-save/gcc/testsuite/g++.old-deja/g++.eh/spec6.C gcc-main-new/gcc/testsuite/g++.old-deja/g++.eh/spec6.C *** gcc-main-save/gcc/testsuite/g++.old-deja/g++.eh/spec6.C Tue Jan 7 21:24:15 2003 --- gcc-main-new/gcc/testsuite/g++.old-deja/g++.eh/spec6.C Tue Jan 7 21:13:00 2003 *************** template void fnx(T *) throw(T) *** 25,31 **** void fx() { fnx((int *)0); ! fnx((void *)0); } // [except.spec] 2, exception specifiers must be the same set of types (but --- 25,31 ---- void fx() { fnx((int *)0); ! fnx((void *)0); // ERROR - instantiated from here } // [except.spec] 2, exception specifiers must be the same set of types (but From gcc-patches-return-75242-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 15:04:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12221 invoked by alias); 8 Jan 2003 15:04:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12213 invoked from network); 8 Jan 2003 15:04:13 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 8 Jan 2003 15:04:13 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 8FFD414AC9 for ; Wed, 8 Jan 2003 16:04:01 +0100 (MET) To: gcc-patches@gcc.gnu.org Subject: Re: gcc_AC_INITFINI_ARRAY References: <200212010212.gB12CNnC029636@whitebox.local> <20030107210326.GJ12992@redhat.com> X-Yow: Hmmm.. A hash-singer and a cross-eyed guy were SLEEPING on a deserted island, when... From: Andreas Schwab Date: Wed, 08 Jan 2003 16:03:59 +0100 In-Reply-To: <20030107210326.GJ12992@redhat.com> (Richard Henderson's message of "Tue, 7 Jan 2003 13:03:26 -0800") Message-ID: Lines: 48 User-Agent: Gnus/5.090007 (Oort Gnus v0.07) Emacs/21.3.50 (ia64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Richard Henderson writes: |> On Sun, Dec 01, 2002 at 03:12:23AM +0100, Andreas Schwab wrote: |> > * configure.in: Restore CFLAGS before gcc_AC_INITFINI_ARRAY. |> > Move --enable-initfini-array check ... |> > * aclocal.m4 (gcc_AC_INITFINI_ARRAY): ... here. Define |> > HAVE_INITFINI_ARRAY also when --enable-initfini-array is given. |> > Don't AC_SUBST gcc_cv_initfinit_array. Use AC_TRY_RUN. |> > * configure: Rebuild. |> |> Applied. Unfortunately this contains a typo, checked this in to fix it. Andreas. 2003-01-08 Andreas Schwab * aclocal.m4 (gcc_AC_INITFINI_ARRAY): Fix spelling of cache variable. * configure: Regenerated. --- gcc/aclocal.m4.~1.63.~ 2003-01-08 15:42:45.000000000 +0100 +++ gcc/aclocal.m4 2003-01-08 15:55:31.000000000 +0100 @@ -1631,14 +1631,14 @@ AC_DEFUN(gcc_AC_INITFINI_ARRAY, [ --enable-initfini-array use .init_array/.fini_array sections], [], [ AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support, - gcc_cv_initfinit_array, [dnl + gcc_cv_initfini_array, [dnl AC_TRY_RUN([ static int x = -1; int main (void) { return x; } int foo (void) { x = 0; } int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;], - [gcc_cv_initfinit_array=yes], [gcc_cv_initfinit_array=no], - [gcc_cv_initfinit_array=no])]) + [gcc_cv_initfini_array=yes], [gcc_cv_initfini_array=no], + [gcc_cv_initfini_array=no])]) enable_initfini_array=$gcc_cv_initfini_array ]) if test $enable_initfini_array = yes; then -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." From gcc-patches-return-75243-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 15:24:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22073 invoked by alias); 8 Jan 2003 15:24:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21380 invoked from network); 8 Jan 2003 15:21:48 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 8 Jan 2003 15:21:48 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h08FLYk05755 for ; Wed, 8 Jan 2003 10:21:34 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WHzv-0007R3-00 for ; Wed, 08 Jan 2003 10:20:03 -0500 Date: Wed, 8 Jan 2003 10:20:02 -0500 To: gcc-patches@gcc.gnu.org Subject: ANSIfy cp/decl.c Message-ID: <20030108152002.GA28561@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Successfully bootstrapped on i686-pc-linux-gnu. OK to commit? * decl.c: ANSIfy function declarations. Index: decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v retrieving revision 1.981 diff -u -r1.981 decl.c --- decl.c 3 Jan 2003 23:13:09 -0000 1.981 +++ decl.c 8 Jan 2003 15:19:57 -0000 @@ -52,104 +52,105 @@ #include "diagnostic.h" #include "debug.h" -static tree grokparms PARAMS ((tree)); -static const char *redeclaration_error_message PARAMS ((tree, tree)); +static tree grokparms (tree); +static const char *redeclaration_error_message (tree, tree); -static void push_binding_level PARAMS ((struct cp_binding_level *, int, - int)); -static void pop_binding_level PARAMS ((void)); -static void suspend_binding_level PARAMS ((void)); -static void resume_binding_level PARAMS ((struct cp_binding_level *)); -static struct cp_binding_level *make_binding_level PARAMS ((void)); -static void declare_namespace_level PARAMS ((void)); -static int decl_jump_unsafe PARAMS ((tree)); -static void storedecls PARAMS ((tree)); -static void require_complete_types_for_parms PARAMS ((tree)); -static int ambi_op_p PARAMS ((enum tree_code)); -static int unary_op_p PARAMS ((enum tree_code)); -static tree store_bindings PARAMS ((tree, tree)); -static tree lookup_tag_reverse PARAMS ((tree, tree)); -static void push_local_name PARAMS ((tree)); -static void warn_extern_redeclared_static PARAMS ((tree, tree)); -static tree grok_reference_init PARAMS ((tree, tree, tree)); -static tree grokfndecl PARAMS ((tree, tree, tree, tree, int, - enum overload_flags, tree, - tree, int, int, int, int, int, int, tree)); -static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree)); -static tree follow_tag_typedef PARAMS ((tree)); -static tree lookup_tag PARAMS ((enum tree_code, tree, - struct cp_binding_level *, int)); +static void push_binding_level (struct cp_binding_level *, int, + int); +static void pop_binding_level (void); +static void suspend_binding_level (void); +static void resume_binding_level (struct cp_binding_level *); +static struct cp_binding_level *make_binding_level (void); +static void declare_namespace_level (void); +static int decl_jump_unsafe (tree); +static void storedecls (tree); +static void require_complete_types_for_parms (tree); +static int ambi_op_p (enum tree_code); +static int unary_op_p (enum tree_code); +static tree store_bindings (tree, tree); +static tree lookup_tag_reverse (tree, tree); +static void push_local_name (tree); +static void warn_extern_redeclared_static (tree, tree); +static tree grok_reference_init (tree, tree, tree); +static tree grokfndecl (tree, tree, tree, tree, int, + enum overload_flags, tree, + tree, int, int, int, int, int, int, tree); +static tree grokvardecl (tree, tree, RID_BIT_TYPE *, int, int, tree); +static tree follow_tag_typedef (tree); +static tree lookup_tag (enum tree_code, tree, + struct cp_binding_level *, int); static void set_identifier_type_value_with_scope - PARAMS ((tree, tree, struct cp_binding_level *)); -static void record_unknown_type PARAMS ((tree, const char *)); -static tree builtin_function_1 PARAMS ((const char *, tree, tree, int, - enum built_in_class, const char *, - tree)); -static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree)); -static int member_function_or_else PARAMS ((tree, tree, enum overload_flags)); -static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int, - int)); -static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct cp_binding_level*)); -static void check_for_uninitialized_const_var PARAMS ((tree)); -static hashval_t typename_hash PARAMS ((const void *)); -static int typename_compare PARAMS ((const void *, const void *)); -static void push_binding PARAMS ((tree, tree, struct cp_binding_level*)); -static int add_binding PARAMS ((tree, tree)); -static void pop_binding PARAMS ((tree, tree)); -static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *)); -static tree find_binding PARAMS ((tree, tree)); -static tree select_decl PARAMS ((tree, int)); -static int lookup_flags PARAMS ((int, int)); -static tree qualify_lookup PARAMS ((tree, int)); -static tree record_builtin_java_type PARAMS ((const char *, int)); -static const char *tag_name PARAMS ((enum tag_types code)); -static void find_class_binding_level PARAMS ((void)); -static struct cp_binding_level *innermost_nonclass_level PARAMS ((void)); -static void warn_about_implicit_typename_lookup PARAMS ((tree, tree)); -static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *)); -static int walk_globals_r PARAMS ((tree, void *)); -static int walk_vtables_r PARAMS ((tree, void*)); -static void add_decl_to_level PARAMS ((tree, struct cp_binding_level *)); -static tree make_label_decl PARAMS ((tree, int)); -static void use_label PARAMS ((tree)); -static void check_previous_goto_1 PARAMS ((tree, struct cp_binding_level *, tree, - const char *, int)); -static void check_previous_goto PARAMS ((struct named_label_use_list *)); -static void check_switch_goto PARAMS ((struct cp_binding_level *)); -static void check_previous_gotos PARAMS ((tree)); -static void pop_label PARAMS ((tree, tree)); -static void pop_labels PARAMS ((tree)); -static void maybe_deduce_size_from_array_init PARAMS ((tree, tree)); -static void layout_var_decl PARAMS ((tree)); -static void maybe_commonize_var PARAMS ((tree)); + (tree, tree, struct cp_binding_level *); +static void record_unknown_type (tree, const char *); +static tree builtin_function_1 (const char *, tree, tree, int, + enum built_in_class, const char *, + tree); +static tree build_library_fn_1 (tree, enum tree_code, tree); +static int member_function_or_else (tree, tree, enum overload_flags); +static void bad_specifiers (tree, const char *, int, int, int, int, + int); +static tree maybe_process_template_type_declaration + (tree, int, struct cp_binding_level*); +static void check_for_uninitialized_const_var (tree); +static hashval_t typename_hash (const void *); +static int typename_compare (const void *, const void *); +static void push_binding (tree, tree, struct cp_binding_level*); +static int add_binding (tree, tree); +static void pop_binding (tree, tree); +static tree local_variable_p_walkfn (tree *, int *, void *); +static tree find_binding (tree, tree); +static tree select_decl (tree, int); +static int lookup_flags (int, int); +static tree qualify_lookup (tree, int); +static tree record_builtin_java_type (const char *, int); +static const char *tag_name (enum tag_types code); +static void find_class_binding_level (void); +static struct cp_binding_level *innermost_nonclass_level (void); +static void warn_about_implicit_typename_lookup (tree, tree); +static int walk_namespaces_r (tree, walk_namespaces_fn, void *); +static int walk_globals_r (tree, void*); +static int walk_vtables_r (tree, void*); +static void add_decl_to_level (tree, struct cp_binding_level *); +static tree make_label_decl (tree, int); +static void use_label (tree); +static void check_previous_goto_1 (tree, struct cp_binding_level *, tree, + const char *, int); +static void check_previous_goto (struct named_label_use_list *); +static void check_switch_goto (struct cp_binding_level *); +static void check_previous_gotos (tree); +static void pop_label (tree, tree); +static void pop_labels (tree); +static void maybe_deduce_size_from_array_init (tree, tree); +static void layout_var_decl (tree); +static void maybe_commonize_var (tree); static tree check_initializer (tree, tree, int); -static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *)); -static void save_function_data PARAMS ((tree)); -static void check_function_type PARAMS ((tree, tree)); -static void begin_constructor_body PARAMS ((void)); -static void finish_constructor_body PARAMS ((void)); -static void begin_destructor_body PARAMS ((void)); -static void finish_destructor_body PARAMS ((void)); -static tree create_array_type_for_decl PARAMS ((tree, tree, tree)); -static tree get_atexit_node PARAMS ((void)); -static tree get_dso_handle_node PARAMS ((void)); -static tree start_cleanup_fn PARAMS ((void)); -static void end_cleanup_fn PARAMS ((void)); -static tree cp_make_fname_decl PARAMS ((tree, int)); -static void initialize_predefined_identifiers PARAMS ((void)); -static tree check_special_function_return_type - PARAMS ((special_function_kind, tree, tree)); -static tree push_cp_library_fn PARAMS ((enum tree_code, tree)); -static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree)); -static void store_parm_decls PARAMS ((tree)); -static int cp_missing_noreturn_ok_p PARAMS ((tree)); +static void make_rtl_for_nonlocal_decl (tree, tree, const char *); +static void save_function_data (tree); +static void check_function_type (tree, tree); +static void begin_constructor_body (void); +static void finish_constructor_body (void); +static void begin_destructor_body (void); +static void finish_destructor_body (void); +static tree create_array_type_for_decl (tree, tree, tree); +static tree get_atexit_node (void); +static tree get_dso_handle_node (void); +static tree start_cleanup_fn (void); +static void end_cleanup_fn (void); +static tree cp_make_fname_decl (tree, int); +static void initialize_predefined_identifiers (void); +static tree check_special_function_return_type + (special_function_kind, tree, tree); +static tree push_cp_library_fn (enum tree_code, tree); +static tree build_cp_library_fn (tree, enum tree_code, tree); +static void store_parm_decls (tree); +static int cp_missing_noreturn_ok_p (tree); static void initialize_local_var (tree, tree); static void expand_static_init (tree, tree); static tree next_initializable_field (tree); static tree reshape_init (tree, tree *); #if defined (DEBUG_BINDING_LEVELS) -static void indent PARAMS ((void)); +static void indent (void); #endif /* Erroneous argument lists can use this *IFF* they do not modify it. */ @@ -464,7 +465,7 @@ static int is_class_level = 0; static void -indent () +indent (void) { register unsigned i; @@ -473,12 +474,12 @@ } #endif /* defined(DEBUG_BINDING_LEVELS) */ -static tree pushdecl_with_scope PARAMS ((tree, struct cp_binding_level *)); +static tree pushdecl_with_scope (tree, struct cp_binding_level *); static void -push_binding_level (newlevel, tag_transparent, keep) - struct cp_binding_level *newlevel; - int tag_transparent, keep; +push_binding_level (struct cp_binding_level *newlevel, + int tag_transparent, + int keep) { /* Add this level to the front of the chain (stack) of levels that are active. */ @@ -503,7 +504,7 @@ CLASS_BINDING_LEVEL appropriately. */ static void -find_class_binding_level () +find_class_binding_level (void) { struct cp_binding_level *level = current_binding_level; @@ -516,7 +517,7 @@ } static void -pop_binding_level () +pop_binding_level (void) { if (global_binding_level) { @@ -552,7 +553,7 @@ } static void -suspend_binding_level () +suspend_binding_level (void) { if (class_binding_level) current_binding_level = class_binding_level; @@ -582,8 +583,7 @@ } static void -resume_binding_level (b) - struct cp_binding_level *b; +resume_binding_level (struct cp_binding_level* b) { /* Resuming binding levels is meant only for namespaces, and those cannot nest into classes. */ @@ -605,7 +605,7 @@ static struct cp_binding_level * -make_binding_level () +make_binding_level (void) { /* NOSTRICT */ return (struct cp_binding_level *) ggc_alloc (sizeof (struct cp_binding_level)); @@ -614,7 +614,7 @@ /* Nonzero if we are currently in the global binding level. */ int -global_bindings_p () +global_bindings_p (void) { return current_binding_level == global_binding_level; } @@ -622,7 +622,7 @@ /* Return the innermost binding level that is not for a class scope. */ static struct cp_binding_level * -innermost_nonclass_level () +innermost_nonclass_level (void) { struct cp_binding_level *b; @@ -640,7 +640,7 @@ also include a class whose context is toplevel. */ int -toplevel_bindings_p () +toplevel_bindings_p (void) { struct cp_binding_level *b = innermost_nonclass_level (); @@ -652,7 +652,7 @@ such a class, etc. */ int -namespace_bindings_p () +namespace_bindings_p (void) { struct cp_binding_level *b = innermost_nonclass_level (); @@ -664,8 +664,7 @@ or not to create a BLOCK. */ void -keep_next_level (keep) - int keep; +keep_next_level (int keep) { keep_next_level_flag = keep; } @@ -673,7 +672,7 @@ /* Nonzero if the current level needs to have a BLOCK made. */ int -kept_level_p () +kept_level_p (void) { return (current_binding_level->blocks != NULL_TREE || current_binding_level->keep @@ -683,7 +682,7 @@ } static void -declare_namespace_level () +declare_namespace_level (void) { current_binding_level->namespace_p = 1; } @@ -692,7 +691,7 @@ parameters. */ int -template_parm_scope_p () +template_parm_scope_p (void) { return current_binding_level->template_parms_p; } @@ -702,8 +701,7 @@ explicit scope qualifications. */ tmpl_spec_kind -current_tmpl_spec_kind (n_class_scopes) - int n_class_scopes; +current_tmpl_spec_kind (int n_class_scopes) { int n_template_parm_scopes = 0; int seen_specialization_p = 0; @@ -787,8 +785,7 @@ } void -set_class_shadows (shadows) - tree shadows; +set_class_shadows (tree shadows) { class_binding_level->class_shadowed = shadows; } @@ -798,8 +795,7 @@ not for that of tags. */ void -pushlevel (tag_transparent) - int tag_transparent; +pushlevel (int tag_transparent) { struct cp_binding_level *newlevel; @@ -828,8 +824,7 @@ scope, create a new binding level. */ void -maybe_push_cleanup_level (type) - tree type; +maybe_push_cleanup_level (tree type) { if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type) && current_binding_level->more_cleanups_ok == 0) @@ -845,8 +840,7 @@ created. */ void -begin_scope (sk) - scope_kind sk; +begin_scope (scope_kind sk) { pushlevel (0); @@ -883,7 +877,7 @@ /* Exit the current scope. */ void -finish_scope () +finish_scope (void) { poplevel (0, 0, 0); } @@ -902,10 +896,9 @@ level at which this declaration is being bound. */ static void -push_binding (id, decl, level) - tree id; - tree decl; - struct cp_binding_level* level; +push_binding (tree id, + tree decl, + struct cp_binding_level* level) { tree binding; @@ -937,9 +930,7 @@ responsibility of the caller to check that inserting this name is valid here. Returns nonzero if the new binding was successful. */ static int -add_binding (id, decl) - tree id; - tree decl; +add_binding (tree id, tree decl) { tree binding = IDENTIFIER_BINDING (id); int ok = 1; @@ -1006,9 +997,8 @@ /* Add DECL to the list of things declared in B. */ static void -add_decl_to_level (decl, b) - tree decl; - struct cp_binding_level *b; +add_decl_to_level (tree decl, + struct cp_binding_level* b) { if (TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)) @@ -1037,10 +1027,7 @@ through a using-declaration. */ void -push_local_binding (id, decl, flags) - tree id; - tree decl; - int flags; +push_local_binding (tree id, tree decl, int flags) { struct cp_binding_level *b; @@ -1078,9 +1065,7 @@ binding was successful. */ int -push_class_binding (id, decl) - tree id; - tree decl; +push_class_binding (tree id, tree decl) { int result = 1; tree binding = IDENTIFIER_BINDING (id); @@ -1144,9 +1129,7 @@ for ID. */ static void -pop_binding (id, decl) - tree id; - tree decl; +pop_binding (tree id, tree decl) { tree binding; @@ -1191,9 +1174,7 @@ in a valid manner, and issue any appropriate warnings or errors. */ static void -pop_label (label, old_value) - tree label; - tree old_value; +pop_label (tree label, tree old_value) { if (!processing_template_decl && doing_semantic_analysis_p ()) { @@ -1215,8 +1196,7 @@ function. */ static void -pop_labels (block) - tree block; +pop_labels (tree block) { struct named_label_list *link; @@ -1250,10 +1230,7 @@ them into the BLOCK. */ tree -poplevel (keep, reverse, functionbody) - int keep; - int reverse; - int functionbody; +poplevel (int keep, int reverse, int functionbody) { register tree link; /* The chain of decls was accumulated in reverse order. @@ -1567,8 +1544,7 @@ so that the block can be reinserted where appropriate. */ void -delete_block (block) - tree block; +delete_block (tree block) { tree t; if (current_binding_level->blocks == block) @@ -1591,8 +1567,7 @@ to handle the BLOCK node inside the BIND_EXPR. */ void -insert_block (block) - tree block; +insert_block (tree block) { TREE_USED (block) = 1; current_binding_level->blocks @@ -1603,8 +1578,7 @@ (the one we are currently in). */ void -set_block (block) - tree block ATTRIBUTE_UNUSED; +set_block (tree block ATTRIBUTE_UNUSED ) { /* The RTL expansion machinery requires us to provide this callback, but it is not applicable in function-at-a-time mode. */ @@ -1614,7 +1588,7 @@ /* Do a pushlevel for class declarations. */ void -pushlevel_class () +pushlevel_class (void) { register struct cp_binding_level *newlevel; @@ -1645,7 +1619,7 @@ /* ...and a poplevel for class declarations. */ void -poplevel_class () +poplevel_class (void) { register struct cp_binding_level *level = class_binding_level; tree shadowed; @@ -1720,7 +1694,7 @@ for any names in enclosing classes. */ void -clear_identifier_class_values () +clear_identifier_class_values (void) { tree t; @@ -1736,9 +1710,7 @@ /* Returns nonzero if T is a virtual function table. */ int -vtable_decl_p (t, data) - tree t; - void *data ATTRIBUTE_UNUSED; +vtable_decl_p (tree t, void* data ATTRIBUTE_UNUSED ) { return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t)); } @@ -1747,9 +1719,7 @@ functions. */ int -vtype_decl_p (t, data) - tree t; - void *data ATTRIBUTE_UNUSED; +vtype_decl_p (tree t, void *data ATTRIBUTE_UNUSED ) { return (TREE_CODE (t) == TYPE_DECL && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE @@ -1759,8 +1729,7 @@ /* Return the declarations that are members of the namespace NS. */ tree -cp_namespace_decls (ns) - tree ns; +cp_namespace_decls (tree ns) { return NAMESPACE_LEVEL (ns)->names; } @@ -1776,9 +1745,7 @@ to F returns a nonzero value, return a nonzero value. */ static int -walk_vtables_r (namespace, data) - tree namespace; - void *data; +walk_vtables_r (tree namespace, void* data) { struct walk_globals_data* wgd = (struct walk_globals_data *) data; walk_globals_fn f = wgd->f; @@ -1810,10 +1777,7 @@ itself, calling F for each. The DATA is passed to F as well. */ static int -walk_namespaces_r (namespace, f, data) - tree namespace; - walk_namespaces_fn f; - void *data; +walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data) { int result = 0; tree current = NAMESPACE_LEVEL (namespace)->namespaces; @@ -1830,9 +1794,7 @@ F as well. */ int -walk_namespaces (f, data) - walk_namespaces_fn f; - void *data; +walk_namespaces (walk_namespaces_fn f, void* data) { return walk_namespaces_r (global_namespace, f, data); } @@ -1842,9 +1804,7 @@ to F returns a nonzero value, return a nonzero value. */ static int -walk_globals_r (namespace, data) - tree namespace; - void *data; +walk_globals_r (tree namespace, void* data) { struct walk_globals_data* wgd = (struct walk_globals_data *) data; walk_globals_pred p = wgd->p; @@ -1891,9 +1851,7 @@ wrapup_global_declarations for this NAMESPACE. */ int -wrapup_globals_for_namespace (namespace, data) - tree namespace; - void *data; +wrapup_globals_for_namespace (tree namespace, void* data) { tree globals = cp_namespace_decls (namespace); int len = NAMESPACE_LEVEL (namespace)->names_size; @@ -1930,8 +1888,7 @@ static int no_print_builtins = 0; void -print_binding_level (lvl) - struct cp_binding_level *lvl; +print_binding_level (struct cp_binding_level* lvl) { tree t; int i = 0, len; @@ -2031,8 +1988,7 @@ } void -print_other_binding_stack (stack) - struct cp_binding_level *stack; +print_other_binding_stack (struct cp_binding_level *stack) { struct cp_binding_level *level; for (level = stack; level != global_binding_level; level = level->level_chain) @@ -2045,7 +2001,7 @@ } void -print_binding_stack () +print_binding_stack (void) { struct cp_binding_level *b; fprintf (stderr, "current_binding_level="); @@ -2082,9 +2038,7 @@ of bindings. Returns the binding found, or NULL_TREE. */ static tree -find_binding (name, scope) - tree name; - tree scope; +find_binding (tree name, tree scope) { tree iter, prev = NULL_TREE; @@ -2116,9 +2070,7 @@ If no binding is found, make a new one. */ tree -binding_for_name (name, scope) - tree name; - tree scope; +binding_for_name (tree name, tree scope) { tree b = IDENTIFIER_NAMESPACE_BINDINGS (name); tree result; @@ -2148,9 +2100,7 @@ namespace_binding may or may not be a list of CPLUS_BINDINGS. */ tree -namespace_binding (name, scope) - tree name; - tree scope; +namespace_binding (tree name, tree scope) { tree b = IDENTIFIER_NAMESPACE_BINDINGS (name); if (b == NULL_TREE) @@ -2169,10 +2119,7 @@ of global_namespace is attempted, try to optimize it. */ void -set_namespace_binding (name, scope, val) - tree name; - tree scope; - tree val; +set_namespace_binding (tree name, tree scope, tree val) { tree b; @@ -2196,8 +2143,7 @@ select a name that is unique to this compilation unit. */ void -push_namespace (name) - tree name; +push_namespace (tree name) { tree d = NULL_TREE; int need_new = 1; @@ -2265,7 +2211,7 @@ /* Pop from the scope of the current namespace. */ void -pop_namespace () +pop_namespace (void) { my_friendly_assert (current_namespace != global_namespace, 20010801); current_namespace = CP_DECL_CONTEXT (current_namespace); @@ -2277,8 +2223,7 @@ nested within another namespace. */ void -push_nested_namespace (ns) - tree ns; +push_nested_namespace (tree ns) { if (ns == global_namespace) push_to_top_level (); @@ -2293,8 +2238,7 @@ entered with push_nested_namespace. */ void -pop_nested_namespace (ns) - tree ns; +pop_nested_namespace (tree ns) { while (ns != global_namespace) { @@ -2314,8 +2258,7 @@ struct saved_scope *scope_chain; static tree -store_bindings (names, old_bindings) - tree names, old_bindings; +store_bindings (tree names, tree old_bindings) { tree t; tree search_bindings = old_bindings; @@ -2357,8 +2300,7 @@ } void -maybe_push_to_top_level (pseudo) - int pseudo; +maybe_push_to_top_level (int pseudo) { struct saved_scope *s; struct cp_binding_level *b; @@ -2421,13 +2363,13 @@ } void -push_to_top_level () +push_to_top_level (void) { maybe_push_to_top_level (0); } void -pop_from_top_level () +pop_from_top_level (void) { struct saved_scope *s = scope_chain; tree t; @@ -2470,10 +2412,9 @@ the type that ID maps to. */ static void -set_identifier_type_value_with_scope (id, type, b) - tree id; - tree type; - struct cp_binding_level *b; +set_identifier_type_value_with_scope (tree id, + tree type, + struct cp_binding_level* b) { if (!b->namespace_p) { @@ -2496,9 +2437,7 @@ /* As set_identifier_type_value_with_scope, but using current_binding_level. */ void -set_identifier_type_value (id, type) - tree id; - tree type; +set_identifier_type_value (tree id, tree type) { set_identifier_type_value_with_scope (id, type, current_binding_level); } @@ -2506,8 +2445,7 @@ /* Return the type associated with id. */ tree -identifier_type_value (id) - tree id; +identifier_type_value (tree id) { /* There is no type with that name, anywhere. */ if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE) @@ -2528,7 +2466,7 @@ We don't pop past namespaces, as they might be valid. */ void -pop_everything () +pop_everything (void) { #ifdef DEBUG_BINDING_LEVELS fprintf (stderr, "XXX entering pop_everything ()\n"); @@ -2555,10 +2493,9 @@ processing. */ static tree -maybe_process_template_type_declaration (type, globalize, b) - tree type; - int globalize; - struct cp_binding_level* b; +maybe_process_template_type_declaration (tree type, + int globalize, + struct cp_binding_level* b) { tree decl = TYPE_NAME (type); @@ -2621,9 +2558,7 @@ the TYPE_DECL for TYPE. */ tree -create_implicit_typedef (name, type) - tree name; - tree type; +create_implicit_typedef (tree name, tree type) { tree decl; @@ -2641,8 +2576,7 @@ /* Remember a local name for name-mangling purposes. */ static void -push_local_name (decl) - tree decl; +push_local_name (tree decl) { size_t i, nelts; tree t, name; @@ -2680,9 +2614,7 @@ The latter is needed for implicit declarations. */ void -pushtag (name, type, globalize) - tree name, type; - int globalize; +pushtag (tree name, tree type, int globalize) { register struct cp_binding_level *b; @@ -2805,7 +2737,7 @@ anonymous structs and unions. */ tree -make_anon_name () +make_anon_name (void) { char buf[32]; @@ -2817,7 +2749,7 @@ This keeps dbxout from getting confused. */ void -clear_anon_tags () +clear_anon_tags (void) { register struct cp_binding_level *b; register tree tags; @@ -2852,8 +2784,7 @@ `const int&'. */ int -decls_match (newdecl, olddecl) - tree newdecl, olddecl; +decls_match (tree newdecl, tree olddecl) { int types_match; @@ -2956,8 +2887,7 @@ the user's control. */ static void -warn_extern_redeclared_static (newdecl, olddecl) - tree newdecl, olddecl; +warn_extern_redeclared_static (tree newdecl, tree olddecl) { static const char *const explicit_extern_static_warning = "`%D' was declared `extern' and later `static'"; @@ -3002,8 +2932,7 @@ Otherwise, return 0. */ int -duplicate_decls (newdecl, olddecl) - tree newdecl, olddecl; +duplicate_decls (tree newdecl, tree olddecl) { unsigned olddecl_uid = DECL_UID (olddecl); int olddecl_friend = 0, types_match = 0; @@ -3761,8 +3690,7 @@ to agree with what X says. */ tree -pushdecl (x) - tree x; +pushdecl (tree x) { register tree t; register tree name; @@ -4208,9 +4136,7 @@ caller to set DECL_CONTEXT properly. */ static tree -pushdecl_with_scope (x, level) - tree x; - struct cp_binding_level *level; +pushdecl_with_scope (tree x, struct cp_binding_level* level) { register struct cp_binding_level *b; tree function_decl = current_function_decl; @@ -4238,8 +4164,7 @@ if appropriate. */ tree -pushdecl_namespace_level (x) - tree x; +pushdecl_namespace_level (tree x) { register struct cp_binding_level *b = current_binding_level; register tree t; @@ -4284,8 +4209,7 @@ if appropriate. */ tree -pushdecl_top_level (x) - tree x; +pushdecl_top_level (tree x) { push_to_top_level (); x = pushdecl_namespace_level (x); @@ -4296,8 +4220,7 @@ /* Make the declaration of X appear in CLASS scope. */ void -pushdecl_class_level (x) - tree x; +pushdecl_class_level (tree x) { tree name; @@ -4329,8 +4252,7 @@ DECL, or a modified version thereof. */ tree -maybe_push_decl (decl) - tree decl; +maybe_push_decl (tree decl) { tree type = TREE_TYPE (decl); @@ -4359,9 +4281,7 @@ under the name NAME. */ void -push_class_level_binding (name, x) - tree name; - tree x; +push_class_level_binding (tree name, tree x) { tree binding; /* The class_binding_level will be NULL if x is a template @@ -4440,9 +4360,7 @@ scope, a using decl might extend any previous bindings). */ tree -push_using_decl (scope, name) - tree scope; - tree name; +push_using_decl (tree scope, tree name) { tree decl; @@ -4465,8 +4383,7 @@ TREE_LIST otherwise. */ tree -push_using_directive (used) - tree used; +push_using_directive (tree used) { tree ud = current_binding_level->using_directives; tree iter, ancestor; @@ -4506,9 +4423,7 @@ it's always DECL (and never something that's not a _DECL). */ tree -push_overloaded_decl (decl, flags) - tree decl; - int flags; +push_overloaded_decl (tree decl, int flags) { tree name = DECL_NAME (decl); tree old; @@ -4624,8 +4539,7 @@ as a function of type int (). Print a warning if appropriate. */ tree -implicitly_declare (functionid) - tree functionid; +implicitly_declare (tree functionid) { register tree decl; @@ -4661,8 +4575,7 @@ where the identifier should go. */ static const char * -redeclaration_error_message (newdecl, olddecl) - tree newdecl, olddecl; +redeclaration_error_message (tree newdecl, tree olddecl) { if (TREE_CODE (newdecl) == TYPE_DECL) { @@ -4738,9 +4651,7 @@ /* Create a new label, named ID. */ static tree -make_label_decl (id, local_p) - tree id; - int local_p; +make_label_decl (tree id, int local_p) { tree decl; @@ -4770,8 +4681,7 @@ this use is valid. */ static void -use_label (decl) - tree decl; +use_label (tree decl) { if (named_label_uses == NULL || named_label_uses->names_in_scope != current_binding_level->names @@ -4795,8 +4705,7 @@ labels, and complain about them at the end of a function.) */ tree -lookup_label (id) - tree id; +lookup_label (tree id) { tree decl; struct named_label_list *ent; @@ -4835,8 +4744,7 @@ /* Declare a local label named ID. */ tree -declare_local_label (id) - tree id; +declare_local_label (tree id) { tree decl; @@ -4858,8 +4766,7 @@ DECL. Returns 2 if it's also a real problem. */ static int -decl_jump_unsafe (decl) - tree decl; +decl_jump_unsafe (tree decl) { if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)) return 0; @@ -4883,12 +4790,11 @@ context; FILE and LINE are the source position of the jump or 0. */ static void -check_previous_goto_1 (decl, level, names, file, line) - tree decl; - struct cp_binding_level *level; - tree names; - const char *file; - int line; +check_previous_goto_1 (tree decl, + struct cp_binding_level* level, + tree names, + const char* file, + int line) { int identified = 0; int saw_eh = 0; @@ -4949,8 +4855,7 @@ } static void -check_previous_goto (use) - struct named_label_use_list *use; +check_previous_goto (struct named_label_use_list* use) { check_previous_goto_1 (use->label_decl, use->binding_level, use->names_in_scope, use->filename_o_goto, @@ -4958,8 +4863,7 @@ } static void -check_switch_goto (level) - struct cp_binding_level *level; +check_switch_goto (struct cp_binding_level* level) { check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0); } @@ -4968,8 +4872,7 @@ are OK. Called by define_label. */ static void -check_previous_gotos (decl) - tree decl; +check_previous_gotos (tree decl) { struct named_label_use_list **usep; @@ -4993,8 +4896,7 @@ finish_goto_stmt. */ void -check_goto (decl) - tree decl; +check_goto (tree decl) { int identified = 0; tree bad; @@ -5054,10 +4956,7 @@ Otherwise return 0. */ tree -define_label (filename, line, name) - const char *filename; - int line; - tree name; +define_label (const char* filename, int line, tree name) { tree decl = lookup_label (name); struct named_label_list *ent; @@ -5123,8 +5022,7 @@ SWITCH_STMT is the switch statement being parsed. */ void -push_switch (switch_stmt) - tree switch_stmt; +push_switch (tree switch_stmt) { struct cp_switch *p = (struct cp_switch *) xmalloc (sizeof (struct cp_switch)); @@ -5136,7 +5034,7 @@ } void -pop_switch () +pop_switch (void) { struct cp_switch *cs; @@ -5150,9 +5048,7 @@ is a bad place for one. */ tree -finish_case_label (low_value, high_value) - tree low_value; - tree high_value; +finish_case_label (tree low_value, tree high_value) { tree cond, r; register struct cp_binding_level *p; @@ -5204,7 +5100,7 @@ store the result back using `storedecls' or you will lose. */ tree -getdecls () +getdecls (void) { return current_binding_level->names; } @@ -5212,7 +5108,7 @@ /* Return the list of type-tags (for structs, etc) of the current level. */ tree -gettags () +gettags (void) { return current_binding_level->tags; } @@ -5222,8 +5118,7 @@ after they are modified in the light of any missing parameters. */ static void -storedecls (decls) - tree decls; +storedecls (tree decls) { current_binding_level->names = decls; } @@ -5231,8 +5126,7 @@ /* Similarly, store the list of tags of the current level. */ void -storetags (tags) - tree tags; +storetags (tree tags) { current_binding_level->tags = tags; } @@ -5261,8 +5155,7 @@ Return null for this case. */ static tree -follow_tag_typedef (type) - tree type; +follow_tag_typedef (tree type) { tree original; @@ -5290,11 +5183,10 @@ reported. */ static tree -lookup_tag (form, name, binding_level, thislevel_only) - enum tree_code form; - tree name; - struct cp_binding_level *binding_level; - int thislevel_only; +lookup_tag (enum tree_code form, + tree name, + struct cp_binding_level* binding_level, + int thislevel_only) { register struct cp_binding_level *level; /* Nonzero if, we should look past a template parameter level, even @@ -5391,15 +5283,6 @@ return NULL_TREE; } -#if 0 -void -set_current_level_tags_transparency (tags_transparent) - int tags_transparent; -{ - current_binding_level->tag_transparent = tags_transparent; -} -#endif - /* Given a type, find the tag that was defined for it and return the tag name. Otherwise return 0. However, the value can never be 0 in the cases in which this is used. @@ -5408,9 +5291,7 @@ done when replacing anonymous tags with real tag names. */ static tree -lookup_tag_reverse (type, name) - tree type; - tree name; +lookup_tag_reverse (tree type, tree name) { register struct cp_binding_level *level; @@ -5433,8 +5314,7 @@ /* Look up NAME in the NAMESPACE. */ tree -lookup_namespace_name (namespace, name) - tree namespace, name; +lookup_namespace_name (tree namespace, tree name) { tree val; tree template_id = NULL_TREE; @@ -5513,8 +5393,7 @@ /* Hash a TYPENAME_TYPE. K is really of type `tree'. */ static hashval_t -typename_hash (k) - const void * k; +typename_hash (const void* k) { hashval_t hash; tree t = (tree) k; @@ -5528,9 +5407,7 @@ /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */ static int -typename_compare (k1, k2) - const void * k1; - const void * k2; +typename_compare (const void * k1, const void * k2) { tree t1; tree t2; @@ -5561,11 +5438,7 @@ static GTY ((param_is (union tree_node))) htab_t typename_htab; tree -build_typename_type (context, name, fullname, base_type) - tree context; - tree name; - tree fullname; - tree base_type; +build_typename_type (tree context, tree name, tree fullname, tree base_type) { tree t; tree d; @@ -5608,9 +5481,7 @@ complain about errors, otherwise be quiet. */ tree -make_typename_type (context, name, complain) - tree context, name; - tsubst_flags_t complain; +make_typename_type (tree context, tree name, tsubst_flags_t complain) { tree fullname; @@ -5745,9 +5616,7 @@ that occur. */ tree -make_unbound_class_template (context, name, complain) - tree context, name; - tsubst_flags_t complain; +make_unbound_class_template (tree context, tree name, tsubst_flags_t complain) { tree t; tree d; @@ -5800,9 +5669,7 @@ /* Select the right _DECL from multiple choices. */ static tree -select_decl (binding, flags) - tree binding; - int flags; +select_decl (tree binding, int flags) { tree val; val = BINDING_VALUE (binding); @@ -5835,10 +5702,7 @@ of the namespaces we've considered in it. */ tree -unqualified_namespace_lookup (name, flags, spacesp) - tree name; - int flags; - tree *spacesp; +unqualified_namespace_lookup (tree name, int flags, tree* spacesp) { tree b = make_node (CPLUS_BINDING); tree initial = current_decl_namespace (); @@ -5904,8 +5768,7 @@ /* Combine prefer_type and namespaces_only into flags. */ static int -lookup_flags (prefer_type, namespaces_only) - int prefer_type, namespaces_only; +lookup_flags (int prefer_type, int namespaces_only) { if (namespaces_only) return LOOKUP_PREFER_NAMESPACES; @@ -5920,9 +5783,7 @@ ignore it or not. Subroutine of lookup_name_real. */ static tree -qualify_lookup (val, flags) - tree val; - int flags; +qualify_lookup (tree val, int flags) { if (val == NULL_TREE) return val; @@ -5939,9 +5800,7 @@ that. */ static void -warn_about_implicit_typename_lookup (typename, binding) - tree typename; - tree binding; +warn_about_implicit_typename_lookup (tree typename, tree binding) { tree subtype = TREE_TYPE (TREE_TYPE (typename)); tree name = DECL_NAME (typename); @@ -6159,24 +6018,19 @@ } tree -lookup_name_nonclass (name) - tree name; +lookup_name_nonclass (tree name) { return lookup_name_real (name, 0, 1, 0, LOOKUP_COMPLAIN); } tree -lookup_function_nonclass (name, args) - tree name; - tree args; +lookup_function_nonclass (tree name, tree args) { return lookup_arg_dependent (name, lookup_name_nonclass (name), args); } tree -lookup_name (name, prefer_type) - tree name; - int prefer_type; +lookup_name (tree name, int prefer_type) { return lookup_name_real (name, prefer_type, 0, 0, LOOKUP_COMPLAIN); } @@ -6185,8 +6039,7 @@ binding level. */ tree -lookup_name_current_level (name) - tree name; +lookup_name_current_level (tree name) { struct cp_binding_level *b; tree t = NULL_TREE; @@ -6224,8 +6077,7 @@ /* Like lookup_name_current_level, but for types. */ tree -lookup_type_current_level (name) - tree name; +lookup_type_current_level (tree name) { register tree t = NULL_TREE; @@ -6256,10 +6108,9 @@ up the builtin type. TYPE is the _TYPE node for the builtin type. */ void -record_builtin_type (rid_index, name, type) - enum rid rid_index; - const char *name; - tree type; +record_builtin_type (enum rid rid_index, + const char* name, + tree type) { tree rname = NULL_TREE, tname = NULL_TREE; tree tdecl = NULL_TREE; @@ -6300,9 +6151,7 @@ * otherwise it is the negative of the size of one of the other types. */ static tree -record_builtin_java_type (name, size) - const char *name; - int size; +record_builtin_java_type (const char* name, int size) { tree type, decl; if (size > 0) @@ -6333,9 +6182,7 @@ /* Push a type into the namespace so that the back-ends ignore it. */ static void -record_unknown_type (type, name) - tree type; - const char *name; +record_unknown_type (tree type, const char* name) { tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type)); /* Make sure the "unknown type" typedecl gets ignored for debug info. */ @@ -6363,7 +6210,7 @@ /* Create all the predefined identifiers. */ static void -initialize_predefined_identifiers () +initialize_predefined_identifiers (void) { const predefined_identifier *pid; @@ -6404,7 +6251,7 @@ Make definitions for built-in primitive functions. */ void -cxx_init_decl_processing () +cxx_init_decl_processing (void) { tree void_ftype; tree void_ftype_ptr; @@ -6612,8 +6459,7 @@ ERROR_MARK node which should be replaced later. */ tree -cp_fname_init (name) - const char *name; +cp_fname_init (const char* name) { tree domain = NULL_TREE; tree type; @@ -6647,9 +6493,7 @@ lazily at the point of first use, so we musn't push the decl now. */ static tree -cp_make_fname_decl (id, type_dep) - tree id; - int type_dep; +cp_make_fname_decl (tree id, int type_dep) { const char *const name = (type_dep && processing_template_decl ? NULL : fname_as_string (type_dep)); @@ -6693,14 +6537,13 @@ list. */ static tree -builtin_function_1 (name, type, context, code, class, libname, attrs) - const char *name; - tree type; - tree context; - int code; - enum built_in_class class; - const char *libname; - tree attrs; +builtin_function_1 (const char* name, + tree type, + tree context, + int code, + enum built_in_class class, + const char* libname, + tree attrs) { tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type); DECL_BUILT_IN_CLASS (decl) = class; @@ -6747,13 +6590,12 @@ list. */ tree -builtin_function (name, type, code, class, libname, attrs) - const char *name; - tree type; - int code; - enum built_in_class class; - const char *libname; - tree attrs; +builtin_function (const char* name, + tree type, + int code, + enum built_in_class class, + const char* libname, + tree attrs) { /* All builtins that don't begin with an '_' should additionally go in the 'std' namespace. */ @@ -6772,10 +6614,7 @@ function. Not called directly. */ static tree -build_library_fn_1 (name, operator_code, type) - tree name; - enum tree_code operator_code; - tree type; +build_library_fn_1 (tree name, enum tree_code operator_code, tree type) { tree fn = build_lang_decl (FUNCTION_DECL, name, type); DECL_EXTERNAL (fn) = 1; @@ -6792,9 +6631,7 @@ callers should unset TREE_NOTHROW. */ tree -build_library_fn (name, type) - tree name; - tree type; +build_library_fn (tree name, tree type) { return build_library_fn_1 (name, ERROR_MARK, type); } @@ -6802,10 +6639,7 @@ /* Returns the _DECL for a library function with C++ linkage. */ static tree -build_cp_library_fn (name, operator_code, type) - tree name; - enum tree_code operator_code; - tree type; +build_cp_library_fn (tree name, enum tree_code operator_code, tree type) { tree fn = build_library_fn_1 (name, operator_code, type); TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type); @@ -6819,9 +6653,7 @@ IDENTIFIER_NODE. */ tree -build_library_fn_ptr (name, type) - const char *name; - tree type; +build_library_fn_ptr (const char* name, tree type) { return build_library_fn (get_identifier (name), type); } @@ -6830,9 +6662,7 @@ IDENTIFIER_NODE. */ tree -build_cp_library_fn_ptr (name, type) - const char *name; - tree type; +build_cp_library_fn_ptr (const char* name, tree type) { return build_cp_library_fn (get_identifier (name), ERROR_MARK, type); } @@ -6841,8 +6671,7 @@ be able to find it via IDENTIFIER_GLOBAL_VALUE. */ tree -push_library_fn (name, type) - tree name, type; +push_library_fn (tree name, tree type) { tree fn = build_library_fn (name, type); pushdecl_top_level (fn); @@ -6853,9 +6682,7 @@ will be found by normal lookup. */ static tree -push_cp_library_fn (operator_code, type) - enum tree_code operator_code; - tree type; +push_cp_library_fn (enum tree_code operator_code, tree type) { tree fn = build_cp_library_fn (ansi_opname (operator_code), operator_code, @@ -6868,8 +6695,7 @@ a FUNCTION_TYPE. */ tree -push_void_library_fn (name, parmtypes) - tree name, parmtypes; +push_void_library_fn (tree name, tree parmtypes) { tree type = build_function_type (void_type_node, parmtypes); return push_library_fn (name, type); @@ -6879,8 +6705,7 @@ and does not return. Used for __throw_foo and the like. */ tree -push_throw_library_fn (name, type) - tree name, type; +push_throw_library_fn (tree name, tree type) { tree fn = push_library_fn (name, type); TREE_THIS_VOLATILE (fn) = 1; @@ -6892,8 +6717,7 @@ attributes. */ void -cxx_insert_default_attributes (decl) - tree decl; +cxx_insert_default_attributes (tree decl) { if (!DECL_EXTERN_C_FUNCTION_P (decl)) return; @@ -6913,8 +6737,7 @@ union type.) */ void -fixup_anonymous_aggr (t) - tree t; +fixup_anonymous_aggr (tree t) { tree *q; @@ -6975,8 +6798,7 @@ Returns the type declared; or NULL_TREE if none. */ tree -check_tag_decl (declspecs) - tree declspecs; +check_tag_decl (tree declspecs) { int found_type = 0; int saw_friend = 0; @@ -7112,8 +6934,7 @@ Returns the TYPE declared -- or NULL_TREE if none. */ tree -shadow_tag (declspecs) - tree declspecs; +shadow_tag (tree declspecs) { tree t = check_tag_decl (declspecs); @@ -7145,8 +6966,7 @@ /* Decode a "typename", such as "int **", returning a ..._TYPE node. */ tree -groktypename (typename) - tree typename; +groktypename (tree typename) { tree specs, attrs; tree type; @@ -7176,20 +6996,16 @@ grokfield and not through here. */ tree -start_decl (declarator, declspecs, initialized, attributes, prefix_attributes) - tree declarator, declspecs; - int initialized; - tree attributes, prefix_attributes; +start_decl (tree declarator, + tree declspecs, + int initialized, + tree attributes, + tree prefix_attributes) { tree decl; register tree type, tem; tree context; -#if 0 - /* See code below that used this. */ - int init_written = initialized; -#endif - /* This should only be done once on the top most decl. */ if (have_extern_spec) { @@ -7362,8 +7178,7 @@ } void -start_decl_1 (decl) - tree decl; +start_decl_1 (tree decl) { tree type = TREE_TYPE (decl); int initialized = (DECL_INITIAL (decl) != NULL_TREE); @@ -7437,8 +7252,7 @@ Quotes on semantics can be found in ARM 8.4.3. */ static tree -grok_reference_init (decl, type, init) - tree decl, type, init; +grok_reference_init (tree decl, tree type, tree init) { tree tmp; @@ -7503,9 +7317,7 @@ situation we're in, update DECL accordingly. */ static void -maybe_deduce_size_from_array_init (decl, init) - tree decl; - tree init; +maybe_deduce_size_from_array_init (tree decl, tree init) { tree type = TREE_TYPE (decl); @@ -7547,8 +7359,7 @@ any appropriate error messages regarding the layout. */ static void -layout_var_decl (decl) - tree decl; +layout_var_decl (tree decl) { tree type = TREE_TYPE (decl); #if 0 @@ -7612,8 +7423,7 @@ instance of the variable at link-time. */ static void -maybe_commonize_var (decl) - tree decl; +maybe_commonize_var (tree decl) { /* Static data in a function with comdat linkage also has comdat linkage. */ @@ -7664,8 +7474,7 @@ /* Issue an error message if DECL is an uninitialized const variable. */ static void -check_for_uninitialized_const_var (decl) - tree decl; +check_for_uninitialized_const_var (tree decl) { tree type = TREE_TYPE (decl); @@ -8045,10 +7854,7 @@ /* If DECL is not a local variable, give it RTL. */ static void -make_rtl_for_nonlocal_decl (decl, init, asmspec) - tree decl; - tree init; - const char *asmspec; +make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) { int toplev = toplevel_bindings_p (); int defer_p; @@ -8133,8 +7939,7 @@ declaration into the surrounding scope. */ void -maybe_inject_for_scope_var (decl) - tree decl; +maybe_inject_for_scope_var (tree decl) { if (!DECL_NAME (decl)) return; @@ -8177,9 +7982,7 @@ /* Generate code to initialize DECL (a local variable). */ static void -initialize_local_var (decl, init) - tree decl; - tree init; +initialize_local_var (tree decl, tree init) { tree type = TREE_TYPE (decl); @@ -8256,10 +8059,7 @@ if the (init) syntax was used. */ void -cp_finish_decl (decl, init, asmspec_tree, flags) - tree decl, init; - tree asmspec_tree; - int flags; +cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags) { register tree type; tree ttype = NULL_TREE; @@ -8516,9 +8316,7 @@ /* This is here for a midend callback from c-common.c */ void -finish_decl (decl, init, asmspec_tree) - tree decl, init; - tree asmspec_tree; +finish_decl (tree decl, tree init, tree asmspec_tree) { cp_finish_decl (decl, init, asmspec_tree, 0); } @@ -8531,9 +8329,7 @@ variables. */ tree -declare_global_var (name, type) - tree name; - tree type; +declare_global_var (tree name, tree type) { tree decl; @@ -8554,7 +8350,7 @@ `__cxa_atexit' function specified in the IA64 C++ ABI. */ static tree -get_atexit_node () +get_atexit_node (void) { tree atexit_fndecl; tree arg_types; @@ -8617,7 +8413,7 @@ /* Returns the __dso_handle VAR_DECL. */ static tree -get_dso_handle_node () +get_dso_handle_node (void) { if (dso_handle_node) return dso_handle_node; @@ -8633,7 +8429,7 @@ to destroy some particular variable. */ static tree -start_cleanup_fn () +start_cleanup_fn (void) { static int counter = 0; int old_interface_only = interface_only; @@ -8699,7 +8495,7 @@ /* Finish the cleanup function begun by start_cleanup_fn. */ static void -end_cleanup_fn () +end_cleanup_fn (void) { expand_body (finish_function (0)); @@ -8710,8 +8506,7 @@ static storage duration. */ void -register_dtor_fn (decl) - tree decl; +register_dtor_fn (tree decl) { tree cleanup; tree compound_stmt; @@ -8766,9 +8561,7 @@ and destruction of DECL. */ static void -expand_static_init (decl, init) - tree decl; - tree init; +expand_static_init (tree decl, tree init) { tree oldstatic; @@ -8868,9 +8661,7 @@ /* Finish the declaration of a catch-parameter. */ tree -start_handler_parms (declspecs, declarator) - tree declspecs; - tree declarator; +start_handler_parms (tree declspecs, tree declarator) { tree decl; if (declspecs) @@ -8892,9 +8683,7 @@ 2 if there was no information (in which case assume 0 if DO_DEFAULT). */ int -complete_array_type (type, initial_value, do_default) - tree type, initial_value; - int do_default; +complete_array_type (tree type, tree initial_value, int do_default) { register tree maxindex = NULL_TREE; int value = 0; @@ -8989,9 +8778,7 @@ message to print in that case. Otherwise, quietly return 1. */ static int -member_function_or_else (ctype, cur_type, flags) - tree ctype, cur_type; - enum overload_flags flags; +member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags) { if (ctype && ctype != cur_type) { @@ -9012,10 +8799,13 @@ This is for ARM $7.1.2. */ static void -bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises) - tree object; - const char *type; - int virtualp, quals, friendp, raises, inlinep; +bad_specifiers (tree object, + const char* type, + int virtualp, + int quals, + int friendp, + int raises, + int inlinep) { if (virtualp) error ("`%D' declared as a `virtual' %s", object, type); @@ -9050,17 +8840,21 @@ applicable error messages. */ static tree -grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals, - raises, check, friendp, publicp, inlinep, funcdef_flag, - template_count, in_namespace) - tree ctype, type; - tree declarator; - tree orig_declarator; - int virtualp; - enum overload_flags flags; - tree quals, raises; - int check, friendp, publicp, inlinep, funcdef_flag, template_count; - tree in_namespace; +grokfndecl (tree ctype, + tree type, + tree declarator, + tree orig_declarator, + int virtualp, + enum overload_flags flags, + tree quals, + tree raises, + int check, + int friendp, + int publicp, + int inlinep, + int funcdef_flag, + int template_count, + tree in_namespace) { tree decl; int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE; @@ -9338,13 +9132,12 @@ the innermost enclosings scope. */ static tree -grokvardecl (type, name, specbits_in, initialized, constp, scope) - tree type; - tree name; - RID_BIT_TYPE *specbits_in; - int initialized; - int constp; - tree scope; +grokvardecl (tree type, + tree name, + RID_BIT_TYPE * specbits_in, + int initialized, + int constp, + tree scope) { tree decl; RID_BIT_TYPE specbits; @@ -9458,8 +9251,7 @@ TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */ tree -build_ptrmemfunc_type (type) - tree type; +build_ptrmemfunc_type (tree type) { tree field, fields; tree t; @@ -9536,9 +9328,7 @@ otherwise. */ int -check_static_variable_definition (decl, type) - tree decl; - tree type; +check_static_variable_definition (tree decl, tree type) { /* Motion 10 at San Diego: If a static const integral data member is initialized with an integral constant expression, the initializer @@ -9570,9 +9360,7 @@ name of the thing being declared. */ tree -compute_array_index_type (name, size) - tree name; - tree size; +compute_array_index_type (tree name, tree size) { tree itype; @@ -9700,8 +9488,7 @@ unqualified name, NULL_TREE is returned. */ tree -get_scope_of_declarator (declarator) - tree declarator; +get_scope_of_declarator (tree declarator) { if (!declarator) return NULL_TREE; @@ -9742,10 +9529,7 @@ with this type. */ static tree -create_array_type_for_decl (name, type, size) - tree name; - tree type; - tree size; +create_array_type_for_decl (tree name, tree type, tree size) { tree itype = NULL_TREE; const char* error_msg; @@ -9825,10 +9609,9 @@ special functions. */ static tree -check_special_function_return_type (sfk, type, optype) - special_function_kind sfk; - tree type; - tree optype; +check_special_function_return_type (special_function_kind sfk, + tree type, + tree optype) { switch (sfk) { @@ -9901,12 +9684,11 @@ should not be `S'. */ tree -grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) - tree declspecs; - tree declarator; - enum decl_context decl_context; - int initialized; - tree *attrlist; +grokdeclarator (tree declarator, + tree declspecs, + enum decl_context decl_context, + int initialized, + tree* attrlist) { RID_BIT_TYPE specbits; int nclasses = 0; @@ -12120,8 +11902,7 @@ is a parmlist. Otherwise, it is an exprlist. */ int -parmlist_is_exprlist (exprs) - tree exprs; +parmlist_is_exprlist (tree exprs) { if (exprs == NULL_TREE || TREE_PARMLIST (exprs)) return 0; @@ -12146,8 +11927,7 @@ function definition. */ static void -require_complete_types_for_parms (parms) - tree parms; +require_complete_types_for_parms (tree parms) { for (; parms; parms = TREE_CHAIN (parms)) { @@ -12164,8 +11944,7 @@ /* Returns nonzero if T is a local variable. */ int -local_variable_p (t) - tree t; +local_variable_p (tree t) { if ((TREE_CODE (t) == VAR_DECL /* A VAR_DECL with a context that is a _TYPE is a static data @@ -12184,8 +11963,7 @@ containing them is duplicated.) */ int -nonstatic_local_decl_p (t) - tree t; +nonstatic_local_decl_p (tree t) { return ((local_variable_p (t) && !TREE_STATIC (t)) || TREE_CODE (t) == LABEL_DECL @@ -12196,10 +11974,9 @@ function. */ static tree -local_variable_p_walkfn (tp, walk_subtrees, data) - tree *tp; - int *walk_subtrees ATTRIBUTE_UNUSED; - void *data ATTRIBUTE_UNUSED; +local_variable_p_walkfn (tree* tp, + int* walk_subtrees ATTRIBUTE_UNUSED , + void* data ATTRIBUTE_UNUSED ) { return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp)) ? *tp : NULL_TREE); @@ -12211,9 +11988,7 @@ DECL, if there is no DECL available. */ tree -check_default_argument (decl, arg) - tree decl; - tree arg; +check_default_argument (tree decl, tree arg) { tree var; tree decl_type; @@ -12295,8 +12070,7 @@ Also set last_function_parms to the chain of PARM_DECLs. */ static tree -grokparms (first_parm) - tree first_parm; +grokparms (tree first_parm) { tree result = NULL_TREE; tree decls = NULL_TREE; @@ -12433,8 +12207,7 @@ operator. */ int -copy_fn_p (d) - tree d; +copy_fn_p (tree d) { tree args; tree arg_type; @@ -12480,8 +12253,7 @@ /* Remember any special properties of member function DECL. */ -void grok_special_member_properties (decl) - tree decl; +void grok_special_member_properties (tree decl) { if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl)) ; /* Not special. */ @@ -12530,8 +12302,7 @@ if the class has a constructor of the form X(X). */ int -grok_ctor_properties (ctype, decl) - tree ctype, decl; +grok_ctor_properties (tree ctype, tree decl) { int ctor_parm = copy_fn_p (decl); @@ -12564,8 +12335,7 @@ /* An operator with this code is unary, but can also be binary. */ static int -ambi_op_p (code) - enum tree_code code; +ambi_op_p (enum tree_code code) { return (code == INDIRECT_REF || code == ADDR_EXPR @@ -12578,8 +12348,7 @@ /* An operator with this name can only be unary. */ static int -unary_op_p (code) - enum tree_code code; +unary_op_p (enum tree_code code) { return (code == TRUTH_NOT_EXPR || code == BIT_NOT_EXPR @@ -12590,9 +12359,7 @@ /* Do a little sanity-checking on how they declared their operator. */ void -grok_op_properties (decl, friendp) - tree decl; - int friendp; +grok_op_properties (tree decl, int friendp) { tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl)); tree argtype; @@ -12920,8 +12687,7 @@ } static const char * -tag_name (code) - enum tag_types code; +tag_name (enum tag_types code) { switch (code) { @@ -13163,9 +12929,7 @@ } tree -xref_tag_from_type (old, id, globalize) - tree old, id; - int globalize; +xref_tag_from_type (tree old, tree id, int globalize) { enum tag_types tag_kind; @@ -13187,9 +12951,7 @@ struct, or union. */ void -xref_basetypes (ref, binfo) - tree ref; - tree binfo; +xref_basetypes (tree ref, tree binfo) { /* In the declaration `A : X, Y, ... Z' we mark all the types (A, X, Y, ..., Z) so we can check for duplicates. */ @@ -13363,8 +13125,7 @@ may be used to declare the individual values as they are read. */ tree -start_enum (name) - tree name; +start_enum (tree name) { register tree enumtype = NULL_TREE; struct cp_binding_level *b = current_binding_level; @@ -13397,8 +13158,7 @@ ENUMTYPE is the type object and VALUES a list of name-value pairs. */ void -finish_enum (enumtype) - tree enumtype; +finish_enum (tree enumtype) { tree pair; tree minnode; @@ -13519,10 +13279,7 @@ Assignment of sequential values by default is handled here. */ void -build_enumerator (name, value, enumtype) - tree name; - tree value; - tree enumtype; +build_enumerator (tree name, tree value, tree enumtype) { tree decl; tree context; @@ -13641,9 +13398,7 @@ /* We're defining DECL. Make sure that it's type is OK. */ static void -check_function_type (decl, current_function_parms) - tree decl; - tree current_function_parms; +check_function_type (tree decl, tree current_function_parms) { tree fntype = TREE_TYPE (decl); tree return_type = complete_type (TREE_TYPE (fntype)); @@ -13700,9 +13455,7 @@ applied to it with the argument list [1, 2]. */ int -start_function (declspecs, declarator, attrs, flags) - tree declspecs, declarator, attrs; - int flags; +start_function (tree declspecs, tree declarator, tree attrs, int flags) { tree decl1; tree ctype = NULL_TREE; @@ -14062,8 +13815,7 @@ Also install to binding contour return value identifier, if any. */ static void -store_parm_decls (current_function_parms) - tree current_function_parms; +store_parm_decls (tree current_function_parms) { register tree fndecl = current_function_decl; register tree parm; @@ -14140,8 +13892,7 @@ when we want to generate RTL later we know what to do. */ static void -save_function_data (decl) - tree decl; +save_function_data (tree decl) { struct language_function *f; @@ -14181,7 +13932,7 @@ fully-constructed bases and members. */ static void -begin_constructor_body () +begin_constructor_body (void) { } @@ -14190,7 +13941,7 @@ members. */ static void -finish_constructor_body () +finish_constructor_body (void) { } @@ -14198,7 +13949,7 @@ vtable pointers and cleanups for bases and members. */ static void -begin_destructor_body () +begin_destructor_body (void) { tree if_stmt; tree compound_stmt; @@ -14245,7 +13996,7 @@ necessary. Do that now. */ static void -finish_destructor_body () +finish_destructor_body (void) { tree exprstmt; @@ -14287,7 +14038,7 @@ In other functions, this isn't necessary, but it doesn't hurt. */ tree -begin_function_body () +begin_function_body (void) { tree stmt; @@ -14322,8 +14073,7 @@ main() would also need to return 0. */ void -finish_function_body (compstmt) - tree compstmt; +finish_function_body (tree compstmt) { /* Close the block. */ finish_compound_stmt (0, compstmt); @@ -14347,8 +14097,7 @@ after the class definition is complete.) */ tree -finish_function (flags) - int flags; +finish_function (int flags) { register tree fndecl = current_function_decl; tree fntype, ctype = NULL_TREE; @@ -14546,8 +14295,7 @@ CHANGES TO CODE IN `grokfield'. */ tree -start_method (declspecs, declarator, attrlist) - tree declarator, declspecs, attrlist; +start_method (tree declspecs, tree declarator, tree attrlist) { tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0, &attrlist); @@ -14624,8 +14372,7 @@ DECL is the ..._DECL that `start_method' provided. */ tree -finish_method (decl) - tree decl; +finish_method (tree decl) { register tree fndecl = decl; tree old_initial; @@ -14677,8 +14424,7 @@ we can lay it out later, when and if its type becomes complete. */ void -maybe_register_incomplete_var (var) - tree var; +maybe_register_incomplete_var (tree var) { my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406); @@ -14705,8 +14451,7 @@ declaration, update them now. */ void -complete_vars (type) - tree type; +complete_vars (tree type) { tree *list = &incomplete_vars; @@ -14731,8 +14476,7 @@ here. */ tree -cxx_maybe_build_cleanup (decl) - tree decl; +cxx_maybe_build_cleanup (tree decl) { tree type = TREE_TYPE (decl); @@ -14770,7 +14514,7 @@ /* When a stmt has been parsed, this function is called. */ void -finish_stmt () +finish_stmt (void) { /* Always assume this statement was not an expression statement. If it actually was an expression statement, its our callers @@ -14782,8 +14526,7 @@ but turned out to be static. Update it accordingly. */ void -revert_static_member_fn (decl) - tree decl; +revert_static_member_fn (tree decl) { tree tmp; tree function = TREE_TYPE (decl); @@ -14809,8 +14552,7 @@ function. */ void -cxx_push_function_context (f) - struct function *f; +cxx_push_function_context (struct function * f) { struct language_function *p = ((struct language_function *) @@ -14830,8 +14572,7 @@ compiling the function. */ void -cxx_pop_function_context (f) - struct function *f; +cxx_pop_function_context (struct function * f) { f->language = 0; } @@ -14840,8 +14581,7 @@ one of the language-independent trees. */ enum cp_tree_node_structure_enum -cp_tree_node_structure (t) - union lang_tree_node *t; +cp_tree_node_structure (union lang_tree_node * t) { switch (TREE_CODE (&t->generic)) { @@ -14861,15 +14601,14 @@ the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */ tree -identifier_global_value (t) - tree t; +identifier_global_value (tree t) { return IDENTIFIER_GLOBAL_VALUE (t); } /* Build the void_list_node (void_type_node having been created). */ tree -build_void_list_node () +build_void_list_node (void) { tree t = build_tree_list (NULL_TREE, void_type_node); TREE_PARMLIST (t) = 1; @@ -14877,8 +14616,7 @@ } static int -cp_missing_noreturn_ok_p (decl) - tree decl; +cp_missing_noreturn_ok_p (tree decl) { /* A missing noreturn is ok for the `main' function. */ return DECL_MAIN_P (decl); From gcc-patches-return-75244-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 15:28:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23184 invoked by alias); 8 Jan 2003 15:28:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23004 invoked from network); 8 Jan 2003 15:26:46 -0000 Received: from unknown (HELO sunsite.mff.cuni.cz) (195.113.19.66) by 209.249.29.67 with SMTP; 8 Jan 2003 15:26:46 -0000 Received: (from jakub@localhost) by sunsite.mff.cuni.cz (8.11.6/8.11.6) id h08FQVl18914; Wed, 8 Jan 2003 16:26:31 +0100 Date: Wed, 8 Jan 2003 16:26:31 +0100 From: Jakub Jelinek To: Richard Henderson Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] Fix g++.dg/tls failures on IA-64 Message-ID: <20030108162631.D6196@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i Hi! Various g++.dg/tls tests fail on IA-64 with sorry, not implemented: thread-local COMMON data not implemented error. This is because ia64-*-linux* doesn't define ASM_OUTPUT_BSS or ASM_OUTPUT_ALIGNED_BSS and start_decl sets DECL_COMMON on DECL_THREAD_LOCAL variable. gcc gcc-3_3-branch gcc-3_2-rhl8-branch Ok to commit? 2003-01-08 Jakub Jelinek * decl.c (start_decl): Don't set DECL_COMMON for __thread variables. --- gcc/cp/decl.c.jj 2003-01-08 14:34:33.000000000 +0100 +++ gcc/cp/decl.c 2003-01-08 15:13:03.000000000 +0100 @@ -7417,7 +7417,8 @@ start_decl (declarator, declspecs, initi wrong semantics. If we say -fno-conserve-space, we want this to produce errors about redefs; to do this we force variables into the data segment. */ - DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem); + DECL_COMMON (tem) = (! DECL_THREAD_LOCAL (tem) + && (flag_conserve_space || ! TREE_PUBLIC (tem))); #endif if (! processing_template_decl) Jakub From gcc-patches-return-75245-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 16:24:41 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20287 invoked by alias); 8 Jan 2003 16:24:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20270 invoked from network); 8 Jan 2003 16:24:31 -0000 Received: from unknown (HELO vortex.ticam.utexas.edu) (128.83.68.102) by 209.249.29.67 with SMTP; 8 Jan 2003 16:24:31 -0000 Received: from gandalf.ticam.utexas.edu (IDENT:zSsPZWx2O4DcXMj3A++8oOw30fNLlY66@gandalf.ticam.utexas.edu [128.83.68.35]) by vortex.ticam.utexas.edu (8.12.6/8.12.6) with ESMTP id h08GOJEB020469; Wed, 8 Jan 2003 10:24:19 -0600 Date: Wed, 8 Jan 2003 10:24:19 -0600 (CST) From: Wolfgang Bangerth To: gcc-patches@gcc.gnu.org, Subject: Re: [C++ PATCH, committed] Fix PR9030 (main trunk version) Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Kriang, > This is the version of PR9030 bug fix that I have committed to the > main trunk. [...] thanks for your hard work on this, but I have to push you a little further still: if one slightly modifies the testcase to this here -------------------------------- template class O { struct I { I (int); }; template friend typename O::I f ();; }; template typename O::I f () { return 1; }; struct X { void g() { f(); } }; -------------------------------- then this is still rejected: g.cc: In function `typename O::I f()': g.cc:2: error: `struct O::I' is private g.cc:9: error: within this context That is, the original regression I have in my code is not yet gone. There is something rather weird going on here, since if I make function g() global, rather than put it into struct X, then the code compiles. I have absolutely no idea whatsoever how this can happen :-( Thanks for all your work Wolfgang PS: There are some nice variations of this code that trigger unexpected behavior: ------------------------------- class O { struct I { I (int); }; template friend typename O::I f ();; }; template typename O::I f () { return 1; }; struct X { void g() { f(); } }; ------------------------------- yields g.cc:2: error: `struct O::I' is private g.cc:9: error: within this context g.cc:2: error: `struct O::I' is private g.cc:9: error: within this context If I remove the spurious "typename" from O::I, the code compiles fine. Oops. Replacing the definition of f() by ----------------------------- template typename O::I f () { return 1; }; ----------------------------- triggers an ICE. Double-oops. I'll file this as a separate report shortly. ------------------------------------------------------------------------- Wolfgang Bangerth email: bangerth@ticam.utexas.edu www: http://www.ticam.utexas.edu/~bangerth/ From gcc-patches-return-75246-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 16:41:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27281 invoked by alias); 8 Jan 2003 16:41:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27255 invoked from network); 8 Jan 2003 16:41:48 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by sources.redhat.com with SMTP; 8 Jan 2003 16:41:48 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 77DD214ABD for ; Wed, 8 Jan 2003 17:41:47 +0100 (MET) To: gcc-patches@gcc.gnu.org Subject: PR9226 X-Yow: The FALAFEL SANDWICH lands on my HEAD and I become a VEGETARIAN... From: Andreas Schwab Date: Wed, 08 Jan 2003 17:41:46 +0100 Message-ID: User-Agent: Gnus/5.09001 (Oort Gnus v0.10) Emacs/21.3.50 (ia64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit In optimization/9226 GCSE is replacing the stack pointer register by a pseudo reg that happens to contain the same value. Shouldn't there be a check in do_local_cprop that the register to be replaced is not a fixed register? 2003-01-08 Andreas Schwab * gcse.c (do_local_cprop): Don't replace a fixed register. Index: gcse.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/gcse.c,v retrieving revision 1.225 diff -u -p -a -u -p -a -r1.225 gcc/gcse.c --- gcc/gcse.c 7 Jan 2003 22:14:42 -0000 1.225 +++ gcc/gcse.c 8 Jan 2003 16:13:29 -0000 @@ -4262,7 +4262,8 @@ do_local_cprop (x, insn, alter_jumps, li if (GET_CODE (x) == REG && (REGNO (x) >= FIRST_PSEUDO_REGISTER || (GET_CODE (PATTERN (insn)) != USE - && asm_noperands (PATTERN (insn)) < 0))) + && asm_noperands (PATTERN (insn)) < 0 + && ! fixed_regs[REGNO (x)]))) { cselib_val *val = cselib_lookup (x, GET_MODE (x), 0); struct elt_loc_list *l; Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." From gcc-patches-return-75247-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 16:44:36 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28680 invoked by alias); 8 Jan 2003 16:44:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28672 invoked from network); 8 Jan 2003 16:44:33 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by sources.redhat.com with SMTP; 8 Jan 2003 16:44:33 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h08Gf6m10165; Wed, 8 Jan 2003 08:41:06 -0800 Date: Wed, 08 Jan 2003 08:41:05 -0800 From: Mark Mitchell To: Nathanael Nerode , "gcc-patches@gcc.gnu.org" Subject: Re: ANSIfy cp/decl.c Message-ID: <69870000.1042044065@warlock.codesourcery.com> In-Reply-To: <20030108152002.GA28561@doctormoo> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Wednesday, January 08, 2003 10:20:02 AM -0500 Nathanael Nerode wrote: > Successfully bootstrapped on i686-pc-linux-gnu. OK to commit? Yes. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75248-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 17:00:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8648 invoked by alias); 8 Jan 2003 17:00:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8626 invoked from network); 8 Jan 2003 17:00:10 -0000 Received: from unknown (HELO localhost.localdomain) (66.60.148.227) by sources.redhat.com with SMTP; 8 Jan 2003 17:00:10 -0000 Received: from warlock.codesourcery.com (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.11.6/8.11.6) with ESMTP id h08GuWm10177; Wed, 8 Jan 2003 08:56:32 -0800 Date: Wed, 08 Jan 2003 08:56:32 -0800 From: Mark Mitchell To: Jan Hubicka , "gcc-bugs@gcc.gnu.org" cc: gcc-patches@gcc.gnu.org Subject: Re: C++ parser refusing asm statatement Message-ID: <80550000.1042044992@warlock.codesourcery.com> In-Reply-To: <20030107210439.GG10268@kam.mff.cuni.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Tuesday, January 07, 2003 10:04:39 PM +0100 Jan Hubicka wrote: > Hi, > now with fixed xmmintrin.h I am almost able to compile it with C++. > However this looks like parser bug: Fixed with this patch. Tested on i686-pc-liux-gnu, applied on the mainline. -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com 2003-01-07 Mark Mitchell * parser.c (cp_parser_asm_definition): Correct handling of omitted operands. 2003-01-07 Mark Mitchell * g++.dg/ext/asm4.C: New test. Index: cp/parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.21 diff -c -5 -p -r1.21 parser.c *** cp/parser.c 6 Jan 2003 21:32:14 -0000 1.21 --- cp/parser.c 8 Jan 2003 07:59:45 -0000 *************** cp_parser_asm_definition (parser) *** 9590,9600 **** cp_lexer_consume_token (parser->lexer); /* Parse the output-operands. */ if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON) && cp_lexer_next_token_is_not (parser->lexer, ! CPP_SCOPE)) outputs = cp_parser_asm_operand_list (parser); } /* If the next token is `::', there are no outputs, and the next token is the beginning of the inputs. */ else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) --- 9590,9602 ---- cp_lexer_consume_token (parser->lexer); /* Parse the output-operands. */ if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON) && cp_lexer_next_token_is_not (parser->lexer, ! CPP_SCOPE) ! && cp_lexer_next_token_is_not (parser->lexer, ! CPP_CLOSE_PAREN)) outputs = cp_parser_asm_operand_list (parser); } /* If the next token is `::', there are no outputs, and the next token is the beginning of the inputs. */ else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) *************** cp_parser_asm_definition (parser) *** 9614,9624 **** cp_lexer_consume_token (parser->lexer); /* Parse the output-operands. */ if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON) && cp_lexer_next_token_is_not (parser->lexer, ! CPP_SCOPE)) inputs = cp_parser_asm_operand_list (parser); } else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) /* The clobbers are coming next. */ clobbers_p = true; --- 9616,9628 ---- cp_lexer_consume_token (parser->lexer); /* Parse the output-operands. */ if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON) && cp_lexer_next_token_is_not (parser->lexer, ! CPP_SCOPE) ! && cp_lexer_next_token_is_not (parser->lexer, ! CPP_CLOSE_PAREN)) inputs = cp_parser_asm_operand_list (parser); } else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) /* The clobbers are coming next. */ clobbers_p = true; *************** cp_parser_asm_definition (parser) *** 9629,9639 **** { if (!clobbers_p) /* Consume the `:'. */ cp_lexer_consume_token (parser->lexer); /* Parse the clobbers. */ ! clobbers = cp_parser_asm_clobber_list (parser); } } /* Look for the closing `)'. */ if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) cp_parser_skip_to_closing_parenthesis (parser); --- 9633,9645 ---- { if (!clobbers_p) /* Consume the `:'. */ cp_lexer_consume_token (parser->lexer); /* Parse the clobbers. */ ! if (cp_lexer_next_token_is_not (parser->lexer, ! CPP_CLOSE_PAREN)) ! clobbers = cp_parser_asm_clobber_list (parser); } } /* Look for the closing `)'. */ if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) cp_parser_skip_to_closing_parenthesis (parser); Index: testsuite/g++.dg/ext/asm4.C =================================================================== RCS file: testsuite/g++.dg/ext/asm4.C diff -N testsuite/g++.dg/ext/asm4.C *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/g++.dg/ext/asm4.C 8 Jan 2003 07:59:45 -0000 *************** *** 0 **** --- 1,4 ---- + void f () + { + __asm__ __volatile__ ("" : : ); + } From gcc-patches-return-75249-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 17:15:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14198 invoked by alias); 8 Jan 2003 17:15:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14156 invoked from network); 8 Jan 2003 17:15:38 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 8 Jan 2003 17:15:38 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h08HEBY11185; Wed, 8 Jan 2003 12:14:16 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h08HDefL008359; Wed, 8 Jan 2003 15:13:40 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h08HCrH6008347; Wed, 8 Jan 2003 15:12:53 -0200 To: Richard Henderson Cc: "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <20030107215515.GQ12992@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 08 Jan 2003 15:12:52 -0200 In-Reply-To: <20030107215515.GQ12992@redhat.com> Message-ID: Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 7, 2003, Richard Henderson wrote: > On Mon, Dec 23, 2002 at 02:12:55PM -0200, Alexandre Oliva wrote: >> > ? gcc/config/mips/_tilib.c > Why don't these routines come from libgcc2.c? I didn't feel like implementing all of TImode emulation in libgcc. We don't fully support TImode, only as little as needed to get the TFmode emulation to compile. It could be folded into libgcc2, for sure. Should it? -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75250-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 17:20:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17360 invoked by alias); 8 Jan 2003 17:20:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17299 invoked from network); 8 Jan 2003 17:19:59 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 8 Jan 2003 17:19:59 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h08HIQY12071; Wed, 8 Jan 2003 12:18:33 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h08HHtfL008402; Wed, 8 Jan 2003 15:17:55 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h08HHnOf008398; Wed, 8 Jan 2003 15:17:49 -0200 To: Richard Henderson Cc: "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <200212241434.JAA22361@caip.rutgers.edu> <20030107221549.GR12992@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 08 Jan 2003 15:17:49 -0200 In-Reply-To: <20030107221549.GR12992@redhat.com> Message-ID: Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 7, 2003, Richard Henderson wrote: >> * real.h (struct real_format): Add denorm_p, remove has_denorm. >> * real.c: Adjust all formats and references to has_denorm. >> * c-common.c (builtin_define_float_constants): Use denorm_p to >> define DENORM_MIN. > This one's sticky. Strictly speaking, the double-double format > isn't LIA-1 compliant (too few denormal bits) I've no idea of what LIA-1 is, but it does have as many denormal bits as normal bits, it's just that the minimum exponent for a denormal is higher than that of a plain doubles, since denormals start with the higher double still being normal. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75251-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 18:06:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12337 invoked by alias); 8 Jan 2003 18:06:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11036 invoked from network); 8 Jan 2003 18:05:01 -0000 Received: from unknown (HELO sccrmhc02.attbi.com) (204.127.202.62) by 209.249.29.67 with SMTP; 8 Jan 2003 18:05:01 -0000 Received: from kegel.com (c-24-126-73-164.we.client2.attbi.com[24.126.73.164]) by sccrmhc02.attbi.com (sccrmhc02) with SMTP id <2003010818044900200m9r12e>; Wed, 8 Jan 2003 18:04:49 +0000 Message-ID: <3E1C6C24.50306@kegel.com> Date: Wed, 08 Jan 2003 10:21:24 -0800 From: Dan Kegel User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) X-Accept-Language: de-de, en MIME-Version: 1.0 To: Christopher Faylor CC: binutils@sources.redhat.com, gcc-patches@gcc.gnu.org Subject: Re: [RFA] Top-level configure.in needs AC_PREREQ References: <20030107173933.GA9102@redhat.com> In-Reply-To: <20030107173933.GA9102@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Christopher Faylor wrote: > I think the minimal autoconf version needed for the new autoconfiscated > configure.in is 2.13, correct? If so, I think an AC_PREREQ is called > for, if for no other reason than to be consistent with gcc, gdb, > binutils. winsup, etc. > ... > RCS file: /cvs/uberbaum/configure.in,v > ... > AC_INIT(move-if-change) > +AC_PREREQ(2.13) Yes, please. All configure.in's should have AC_PREREQ. It makes life much easier when you compile gcc and friends under both cygwin and debian, as we do. - Dan -- Dan Kegel Linux User #78045 http://www.kegel.com From gcc-patches-return-75252-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 19:17:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20297 invoked by alias); 8 Jan 2003 19:17:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20275 invoked from network); 8 Jan 2003 19:17:08 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 8 Jan 2003 19:17:08 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08JGoc19088; Wed, 8 Jan 2003 14:16:50 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08JGoT750580; Wed, 8 Jan 2003 14:16:50 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id OAA31626; Wed, 8 Jan 2003 14:16:50 -0500 Message-Id: <200301081916.OAA31626@makai.watson.ibm.com> To: Jeff Sturm cc: gcc-patches@gcc.gnu.org Subject: Re: Fix target/9210 References: Date: Wed, 08 Jan 2003 14:16:49 -0500 From: David Edelsohn Bootstrapped and regression tested on powerpc-unknown-linux-gnu. OK for mainline and 3.3 branch? 2003-01-08 Jeff Sturm PR target/9210 * config/rs6000/rs6000.c (rs6000_elf_encode_section_info): Set SYMBOL_REF_FLAG on local data sym_ref. Yes, this patch is okay for both the trunk and the 3.3 branch. Please reference the PR in the ChangeLog entry using the standard format as above. Also, please consider including a keyword like powerpc-linux in your email subject in the future to alert the appropriate GCC port maintainer to read the message. "Fix target/9210" does not normally grab my attention. Thanks, David From gcc-patches-return-75253-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 19:22:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22974 invoked by alias); 8 Jan 2003 19:22:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22762 invoked from network); 8 Jan 2003 19:21:01 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 8 Jan 2003 19:21:01 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id DDA3914D0A; Wed, 8 Jan 2003 20:20:47 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18WLks-0004Lm-00; Wed, 08 Jan 2003 20:20:46 +0100 Mail-Copies-To: never To: gcc-patches@gcc.gnu.org Cc: "Joseph S. Myers" Subject: Fix treelang build with older texinfo From: Andreas Jaeger Date: Wed, 08 Jan 2003 20:20:46 +0100 In-Reply-To: (Andreas Jaeger's message of "Wed, 01 Jan 2003 18:22:43 +0100") Message-ID: User-Agent: Gnus/5.090011 (Oort Gnus v0.11) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii What about this patch? Is it ok to commit? It has been tested successfully several runs already, Andreas Andreas Jaeger writes: > "Joseph S. Myers" writes: > >> On Wed, 1 Jan 2003, Andreas Jaeger wrote: >> >>> Am I forced to upgrade or is a make rule missing for this case? >> >> The treelang Make-lang.in should be changed to follow others (e.g. java, >> f) in disabling building info if BUILD_INFO isn't set to indicate it > > Like the appended patch? I just tested it with make treelang.info. > Ok to commit for 3.3 and mainline? > >> should be built. But if you ever make any change to a manual then you'll >> need to upgrade texinfo anyway in order to test that change. > > I know - but others might hit the same problem and therefore I'm first > going to fix GCC to work with my setup and then update texinfo, > > Andreas > > 2003-01-01 Andreas Jaeger > > * treelang/Make-lang.in ($(srcdir)/treelang/treelang.info): Only > build info files with new enough makeinfo. > > ============================================================ > Index: gcc/treelang/Make-lang.in > --- gcc/treelang/Make-lang.in 23 Dec 2002 19:26:48 -0000 1.9 > +++ gcc/treelang/Make-lang.in 1 Jan 2003 17:21:42 -0000 > @@ -1,6 +1,6 @@ > # Top level makefile fragment for TREELANG For GCC. -*- makefile -*- > > -# Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002 Free > +# Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002, 2003 Free > # Software Foundation, Inc. > > #This file is part of GCC. > @@ -137,8 +137,11 @@ $(srcdir)/treelang/treelang.info: $(srcd > $(srcdir)/doc/include/gpl.texi \ > $(srcdir)/doc/include/fdl.texi \ > $(srcdir)/doc/include/funding.texi > - cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \ > - -o treelang/treelang.info treelang/treelang.texi > + if [ x$(BUILD_INFO) = xinfo ]; then \ > + rm -f $(srcdir)/treelang/treelang.info-*; \ > + cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \ > + -o treelang/treelang.info treelang/treelang.texi \ > + else true; fi > > treelang.dvi: $(srcdir)/treelang/treelang.texi \ > $(srcdir)/doc/include/gcc-common.texi \ Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75254-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 19:27:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25737 invoked by alias); 8 Jan 2003 19:27:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25164 invoked from network); 8 Jan 2003 19:26:03 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 19:26:02 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08JKx103181; Wed, 8 Jan 2003 14:20:59 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08JPln09164; Wed, 8 Jan 2003 14:25:47 -0500 Received: from dhcp-172-16-25-153.sfbay.redhat.com (dhcp-172-16-25-153.sfbay.redhat.com [172.16.25.153]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08JPkn27474; Wed, 8 Jan 2003 11:25:46 -0800 Subject: Re: [mips patch' rfa] Add MIPS32 Release 2 support. From: Eric Christopher To: cgd@broadcom.com Cc: Richard Sandiford , gcc-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 08 Jan 2003 10:54:54 -0800 Message-Id: <1042052094.27191.81.camel@ghostwheel.ges.redhat.com> Mime-Version: 1.0 On Wed, 2003-01-08 at 00:12, cgd@broadcom.com wrote: > I'd also be willing to say "__mips_isa_rev". Richard, Eric, what do > you think? > Sounds good. The rest of the patch is OK for the trunk. Thanks for all of the hard work. -eric -- Yeah, I used to play basketball... From gcc-patches-return-75255-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 19:40:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 32762 invoked by alias); 8 Jan 2003 19:39:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32308 invoked from network); 8 Jan 2003 19:37:53 -0000 Received: from unknown (HELO fillmore.constant.com) (12.247.41.113) by 209.249.29.67 with SMTP; 8 Jan 2003 19:37:53 -0000 Received: (from bkoz@localhost) by fillmore.constant.com (8.11.6/8.11.6) id h08Jc2K06825; Wed, 8 Jan 2003 13:38:02 -0600 Date: Wed, 8 Jan 2003 13:38:02 -0600 Message-Id: <200301081938.h08Jc2K06825@fillmore.constant.com> To: gcc-patches@gcc.gnu.org Subject: [v3] config/make tweaks From: Benjamin Kosnik X-Organization: Red Hat / Chicago Try once more to remove the multiplying 'multi-do' rules. Add in cleaner debug rules, and correct some comments for --enable flags I noticed with ./configure --help. tested x86/linux 2003-01-08 Benjamin Kosnik * include/Makefile.am (stamp-*): Add checks for existing stamps. * include/Makefile.in: Regenerate. * acinclude.m4 (GLIBCPP_ENABLE_DEBUG): Correct comment. * aclocal.m4: Regenerate. * configure.in: Don't add new multi-do rules every time the directory is reconfigured. * configure: Regenerate. 2003-01-08 Brad Spencer Nathan Myers * src/Makefile.am (stamp-debug): Clean. * src/Makefile.in: Regenerate. Index: acinclude.m4 =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/acinclude.m4,v retrieving revision 1.226 diff -c -p -r1.226 acinclude.m4 *** acinclude.m4 6 Jan 2003 21:22:11 -0000 1.226 --- acinclude.m4 8 Jan 2003 19:35:10 -0000 *************** AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl *** 1067,1073 **** define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl AC_ARG_ENABLE(debug, changequote(<<, >>)dnl ! << --enable-debug extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT], changequote([, ])dnl [case "${enableval}" in yes) enable_debug=yes ;; --- 1067,1073 ---- define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl AC_ARG_ENABLE(debug, changequote(<<, >>)dnl ! << --enable-debug build extra debug library [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT], changequote([, ])dnl [case "${enableval}" in yes) enable_debug=yes ;; Index: include/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/include/Makefile.am,v retrieving revision 1.45 diff -c -p -r1.45 Makefile.am *** include/Makefile.am 6 Jan 2003 21:22:56 -0000 1.45 --- include/Makefile.am 8 Jan 2003 19:35:10 -0000 *************** *** 1,6 **** ## Makefile for the include subdirectory of the GNU C++ Standard library. ## ! ## Copyright (C) 2001, 2002 Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. ## Process this file with automake to produce Makefile.in. --- 1,6 ---- ## Makefile for the include subdirectory of the GNU C++ Standard library. ## ! ## Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. ## Process this file with automake to produce Makefile.in. *************** stamp-std: ${std_headers} *** 349,366 **** @if [ ! -d "${std_builddir}" ]; then \ mkdir -p ${std_builddir} ;\ fi ;\ ! (cd ${std_builddir} && for h in $?; do \ ! official_name=`echo $$h | sed -e 's,.*/std_,,' -e 's,\.h$$,,'` ;\ ! @LN_S@ $$h ./$${official_name} || true ;\ ! done) ;\ ! echo `date` > stamp-std stamp-bits: ${bits_headers} @if [ ! -d "${bits_builddir}" ]; then \ mkdir -p ${bits_builddir} ;\ fi ;\ ! (cd ${bits_builddir} && @LN_S@ $? . || true) ;\ ! echo `date` > stamp-bits stamp-c_base: ${c_base_headers} ${c_base_headers_extra} @if [ ! -d "${c_base_builddir}" ]; then \ --- 349,370 ---- @if [ ! -d "${std_builddir}" ]; then \ mkdir -p ${std_builddir} ;\ fi ;\ ! if [ ! -f stamp-std ]; then \ ! (cd ${std_builddir} && for h in $?; do \ ! official_name=`echo $$h | sed -e 's,.*/std_,,' -e 's,\.h$$,,'` ;\ ! @LN_S@ $$h ./$${official_name} || true ;\ ! done) ;\ ! echo `date` > stamp-std ;\ ! fi stamp-bits: ${bits_headers} @if [ ! -d "${bits_builddir}" ]; then \ mkdir -p ${bits_builddir} ;\ fi ;\ ! if [ ! -f stamp-bits ]; then \ ! (cd ${bits_builddir} && @LN_S@ $? . || true) ;\ ! echo `date` > stamp-bits ;\ ! fi stamp-c_base: ${c_base_headers} ${c_base_headers_extra} @if [ ! -d "${c_base_builddir}" ]; then \ *************** stamp-c_base: ${c_base_headers} ${c_base *** 370,402 **** official_name=`echo $$h | sed -e 's,.*/std_,,' -e 's,\.h$$,,'` ;\ @LN_S@ $$h ./$${official_name} || true ;\ done) ;\ ! if [ ! -z "${c_base_headers_extra}" ]; then \ (cd ${bits_builddir} && @LN_S@ ${c_base_headers_extra} . || true) ;\ ! fi ;\ ! echo `date` > stamp-c_base stamp-c_compatibility: ${c_compatibility_headers_extra} @if [ ! -d "${c_compatibility_builddir}" ]; then \ mkdir -p ${c_compatibility_builddir} ;\ fi ;\ ! if [ ! -z "${c_compatibility_headers_extra}" ]; then \ ! (cd ${c_compatibility_builddir} && @LN_S@ $? . || true) ;\ ! fi ;\ ! echo `date` > stamp-c_compatibility stamp-backward: ${backward_headers} @if [ ! -d "${backward_builddir}" ]; then \ mkdir -p ${backward_builddir} ;\ fi ;\ ! (cd ${backward_builddir} && @LN_S@ $? . || true) ;\ ! echo `date` > stamp-backward stamp-ext: ${ext_headers} @if [ ! -d "${ext_builddir}" ]; then \ ! mkdir -p ${ext_builddir} ;\ fi ;\ ! (cd ${ext_builddir} && @LN_S@ $? . || true) ;\ ! echo `date` > stamp-ext stamp-${target_alias}: @if [ ! -d ${target_builddir} ]; then \ --- 374,414 ---- official_name=`echo $$h | sed -e 's,.*/std_,,' -e 's,\.h$$,,'` ;\ @LN_S@ $$h ./$${official_name} || true ;\ done) ;\ ! if [ ! -f stamp-c_base ]; then \ ! if [ ! -z "${c_base_headers_extra}" ]; then \ (cd ${bits_builddir} && @LN_S@ ${c_base_headers_extra} . || true) ;\ ! fi ;\ ! echo `date` > stamp-c_base ;\ ! fi stamp-c_compatibility: ${c_compatibility_headers_extra} @if [ ! -d "${c_compatibility_builddir}" ]; then \ mkdir -p ${c_compatibility_builddir} ;\ fi ;\ ! if [ ! -f stamp-c_compatibility ]; then \ ! if [ ! -z "${c_compatibility_headers_extra}" ]; then \ ! (cd ${c_compatibility_builddir} && @LN_S@ $? . || true) ;\ ! fi ;\ ! echo `date` > stamp-c_compatibility ;\ ! fi stamp-backward: ${backward_headers} @if [ ! -d "${backward_builddir}" ]; then \ mkdir -p ${backward_builddir} ;\ fi ;\ ! if [ ! -f stamp-backward ]; then \ ! (cd ${backward_builddir} && @LN_S@ $? . || true) ;\ ! echo `date` > stamp-backward ;\ ! fi stamp-ext: ${ext_headers} @if [ ! -d "${ext_builddir}" ]; then \ ! mkdir -p ${ext_builddir} ;\ fi ;\ ! if [ ! -f stamp-ext ]; then \ ! (cd ${ext_builddir} && @LN_S@ $? . || true) ;\ ! echo `date` > stamp-ext ;\ ! fi stamp-${target_alias}: @if [ ! -d ${target_builddir} ]; then \ *************** install-data-local: *** 500,506 **** $(INSTALL_DATA) $${file} ${gxx_include_dir}/${target_builddir}; done # By adding these files here, automake will remove them for 'make clean' ! #CLEANFILES = ${allstamps} # Stop implicit '.o' make rules from ever stomping on extensionless # headers, in the improbable case where some foolish, crack-addled --- 512,518 ---- $(INSTALL_DATA) $${file} ${gxx_include_dir}/${target_builddir}; done # By adding these files here, automake will remove them for 'make clean' ! #CLEANFILES = ${allstamps} # Stop implicit '.o' make rules from ever stomping on extensionless # headers, in the improbable case where some foolish, crack-addled Index: src/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/src/Makefile.am,v retrieving revision 1.116 diff -c -p -r1.116 Makefile.am *** src/Makefile.am 31 Dec 2002 00:58:36 -0000 1.116 --- src/Makefile.am 8 Jan 2003 19:35:10 -0000 *************** *** 1,6 **** ## Makefile for the src subdirectory of the GNU C++ Standard library. ## ! ## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ## Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. --- 1,6 ---- ## Makefile for the src subdirectory of the GNU C++ Standard library. ## ! ## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 ## Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. *************** stamp-debug: *** 239,251 **** if test ! -d ${debugdir}; then \ mkdir -p ${debugdir}; \ (cd ${debugdir}; \ ! cp ../Makefile .; \ ! sed 's/top_builddir = ../top_builddir = ..\/../g' \ ! < Makefile > temp.1; \ ! sed 's/all-local: build_debug/all-local:/g' < temp.1 > temp.2; \ ! sed 's/install-data-local: install_debug/install-data-local:/g' \ ! < temp.2 > temp.3; \ ! mv temp.3 Makefile) ; \ fi; \ echo `date` > stamp-debug; --- 239,250 ---- if test ! -d ${debugdir}; then \ mkdir -p ${debugdir}; \ (cd ${debugdir}; \ ! sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \ ! -e 's/srcdir = \.\./srcdir = ..\/../' \ ! -e 's/glibcpp_basedir = \.\./glibcpp_basedir = ..\/../' \ ! -e 's/all-local: build_debug/all-local:/' \ ! -e 's/install-data-local: install_debug/install-data-local:/' \ ! < ../Makefile > Makefile) ; \ fi; \ echo `date` > stamp-debug; From gcc-patches-return-75256-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 19:58:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13394 invoked by alias); 8 Jan 2003 19:58:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13309 invoked from network); 8 Jan 2003 19:58:05 -0000 Received: from unknown (HELO mms1.broadcom.com) (63.70.210.58) by 209.249.29.67 with SMTP; 8 Jan 2003 19:58:05 -0000 Received: from 63.70.210.1 by mms1.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Wed, 08 Jan 2003 11:57:26 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id LAA12313; Wed, 8 Jan 2003 11:57:43 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h08JvjER021456; Wed, 8 Jan 2003 11:57:45 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id LAA27298; Wed, 8 Jan 2003 11:57:41 -0800 (PST) To: "Eric Christopher" cc: "Richard Sandiford" , gcc-patches@gcc.gnu.org Subject: Re: [mips patch' rfa] Add MIPS32 Release 2 support. References: <1042052094.27191.81.camel@ghostwheel.ges.redhat.com> From: cgd@broadcom.com Date: 08 Jan 2003 11:57:41 -0800 In-Reply-To: "Eric Christopher"'s message of "08 Jan 2003 10:54:54 -0800" Message-ID: Lines: 594 MIME-Version: 1.0 X-WSS-ID: 12025D2C834162-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit At 08 Jan 2003 10:54:54 -0800, Eric Christopher wrote: > Sounds good. > > The rest of the patch is OK for the trunk. > > Thanks for all of the hard work. OK, committed version is below. (figuring that __mips_isa_rev was better, i actually already had built it, etc., last night. 8-) (invoke.texi already has had its copyright updated, so that little bit was removed, too.) chris -- 2003-01-08 Chris Demetriou * config.gcc (mipsisa32r2-*-elf*, mipsisa32r2el-*-elf*): New targets, to support MIPS32 Release 2 (MIPS32R2) configurations. * config/mips/mips.h (enum processor_type): Rename PROCESSOR_R4KC to PROCESSOR_4KC, PROCESSOR_R5KC to PROCESSOR_5KC, and PROCESSOR_R20KC to PROCESSOR_20KC. Add PROCESSOR_M4K. (TARGET_MIPS4KC, TARGET_MIPS5KC): Update for the renaming. (ISA_MIPS32R2): New define. (GENERATE_MULT3_SI, ISA_HAS_CONDMOVE, ISA_HAS_8CC) (ISA_HAS_MADD_MSUB, ISA_HAS_CLZ_CLO) (ISA_HAS_PREFETCH): Add support for MIPS32R2. (MIPS_ISA_DEFAULT): Likewise. Also, fix indentation. (TARGET_CPU_CPP_BUILTINS): Add support for MIPS32R2. Add new predefine __mips_isa_rev for MIPS32, MIPS32R2, and MIPS64. (ISA_HAS_ROTR_SI): Add support for MIPS32R2, and avoid if compiling MIPS16 code. (ISA_HAS_ROTR_DI): Do not use if compiling MIPS16 code, and fix comment. (ISA_HAS_SEB_SEH): New define. (ASM_SPEC, LINK_SPEC): Pass -mips32r2 to assembler and linker. * config/mips/mips.c (mips_cpu_info_table): Adjust for enum processor_type value renaming. Add support for MIPS32R2. Clean up comments, and move "sb1" entry with other MIPS64 CPU entries. (override_options): Reimplement -mipsN option handling so that it will work correctly for -mips32r2. Avoid branch-likely instructions on MIPS32R2. * config/mips/mips.md (mulsi3_mult3): Add support for MIPS32R2. (extendhisi2): Use extendhisi2_hw if ISA_HAS_SEB_SEH. (extendqisi2): Use extendqisi2_hw if ISA_HAS_SEB_SEH. (extendhisi2_hw, extendqisi2_hw): New. * config/mips/netbsd.h (TARGET_CPU_CPP_BUILTINS): Add support for MIPS32R2. Add new predefine __mips_isa_rev for MIPS32, MIPS32R2, and MIPS64. (LINK_SPEC): Pass -mips32r2 to linker. * config/mips/t-isa3264: Built -mips32r2 multilibs. * doc/invoke.texi (MIPS Options): Add -mips32r2, add support for mips32r2 in the -march description. Alphabetically sort CPU names in the -march description. Add long-missed -mips32 and -mips64 to MIPS option summary. * config.gcc: Update copyright years to include 2003. * config/mips/mips.c: Likewise. * config/mips/mips.h: Likewise. * config/mips/mips.md: Likewise. * config/mips/netbsd.h: Likewise. Index: config.gcc =================================================================== RCS file: /cvs/gcc/gcc/gcc/config.gcc,v retrieving revision 1.273 diff -u -p -r1.273 config.gcc --- config.gcc 7 Jan 2003 23:34:24 -0000 1.273 +++ config.gcc 8 Jan 2003 19:53:27 -0000 @@ -1,5 +1,5 @@ # GCC build-, host- and target-specific configuration file. -# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. #This file is part of GCC. @@ -1829,6 +1829,11 @@ mipsisa32-*-elf* | mipsisa32el-*-elf*) tm_file="${tm_file} mips/elf.h" tmake_file=mips/t-isa3264 tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_EABI" + ;; +mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*) + tm_file="${tm_file} mips/elf.h" + tmake_file=mips/t-isa3264 + tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_EABI" ;; mipsisa64-*-elf* | mipsisa64el-*-elf*) tm_file="${tm_file} mips/elf.h" Index: config/mips/mips.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v retrieving revision 1.244 diff -u -p -r1.244 mips.c --- config/mips/mips.c 7 Jan 2003 09:52:15 -0000 1.244 +++ config/mips/mips.c 8 Jan 2003 19:53:30 -0000 @@ -1,6 +1,6 @@ /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -583,8 +583,9 @@ const struct mips_cpu_info mips_cpu_info { "mips2", PROCESSOR_R6000, 2 }, { "mips3", PROCESSOR_R4000, 3 }, { "mips4", PROCESSOR_R8000, 4 }, - { "mips32", PROCESSOR_R4KC, 32 }, - { "mips64", PROCESSOR_R5KC, 64 }, + { "mips32", PROCESSOR_4KC, 32 }, + { "mips32r2", PROCESSOR_M4K, 33 }, + { "mips64", PROCESSOR_5KC, 64 }, /* MIPS I */ { "r3000", PROCESSOR_R3000, 1 }, @@ -611,18 +612,18 @@ const struct mips_cpu_info mips_cpu_info { "vr5400", PROCESSOR_R5400, 4 }, { "vr5500", PROCESSOR_R5500, 4 }, - - /* MIPS 32 */ - { "4kc", PROCESSOR_R4KC, 32 }, - { "4kp", PROCESSOR_R4KC, 32 }, /* = 4kc */ - - /* MIPS 64 */ - { "5kc", PROCESSOR_R5KC, 64 }, - { "20kc", PROCESSOR_R20KC, 64 }, - { "sr71000", PROCESSOR_SR71000, 64 }, - - /* Broadcom SB-1 CPU core */ + /* MIPS32 */ + { "4kc", PROCESSOR_4KC, 32 }, + { "4kp", PROCESSOR_4KC, 32 }, /* = 4kc */ + + /* MIPS32 Release 2 */ + { "m4k", PROCESSOR_M4K, 33 }, + + /* MIPS64 */ + { "5kc", PROCESSOR_5KC, 64 }, + { "20kc", PROCESSOR_20KC, 64 }, { "sb1", PROCESSOR_SB1, 64 }, + { "sr71000", PROCESSOR_SR71000, 64 }, /* End marker */ { 0, 0, 0 } @@ -5127,28 +5128,31 @@ override_options () if (mips_isa_string != 0) { /* Handle -mipsN. */ - int level = atoi (mips_isa_string); - if (level == 16) + + if (strcmp (mips_isa_string, "16") == 0) { /* -mips16 specifies an ASE rather than a processor, so don't change mips_arch here. -mno-mips16 overrides -mips16. */ if (mips_no_mips16_string == NULL) target_flags |= MASK_MIPS16; } - else if (mips_arch_info != 0) + else { + char *whole_isa_str = concat ("mips", mips_isa_string, NULL); + const struct mips_cpu_info *isa_info; + + isa_info = mips_parse_cpu ("-mips option", whole_isa_str); + free (whole_isa_str); + /* -march takes precedence over -mipsN, since it is more descriptive. There's no harm in specifying both as long as the ISA levels are the same. */ - if (mips_isa != level) - error ("-mips%d conflicts with the other architecture options, which specify a MIPS%d processor", - level, mips_isa); - } - else - { - mips_set_architecture (mips_cpu_info_from_isa (level)); - if (mips_arch_info == 0) - error ("bad value (%s) for -mips switch", mips_isa_string); + if (mips_arch_info != 0 && mips_isa != isa_info->isa) + error ("-mips%s conflicts with the other architecture options, which specify a MIPS%d processor", + mips_isa_string, mips_isa); + + /* Set architecture based on the given option. */ + mips_set_architecture (isa_info); } } @@ -5265,7 +5269,7 @@ override_options () of the [MIPS32 and MIPS64] architecture." Therefore, we do not issue those instructions unless instructed to do so by -mbranch-likely. */ - if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS64)) + if (ISA_HAS_BRANCHLIKELY && !(ISA_MIPS32 || ISA_MIPS32R2 || ISA_MIPS64)) target_flags |= MASK_BRANCHLIKELY; else target_flags &= ~MASK_BRANCHLIKELY; Index: config/mips/mips.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v retrieving revision 1.229 diff -u -p -r1.229 mips.h --- config/mips/mips.h 16 Dec 2002 22:45:40 -0000 1.229 +++ config/mips/mips.h 8 Jan 2003 19:53:31 -0000 @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and @@ -72,9 +72,10 @@ enum processor_type { PROCESSOR_R5400, PROCESSOR_R5500, PROCESSOR_R8000, - PROCESSOR_R4KC, - PROCESSOR_R5KC, - PROCESSOR_R20KC, + PROCESSOR_4KC, + PROCESSOR_5KC, + PROCESSOR_20KC, + PROCESSOR_M4K, PROCESSOR_SR71000, PROCESSOR_SB1 }; @@ -351,6 +352,7 @@ extern void sbss_section PARAMS ((void) #define ISA_MIPS3 (mips_isa == 3) #define ISA_MIPS4 (mips_isa == 4) #define ISA_MIPS32 (mips_isa == 32) +#define ISA_MIPS32R2 (mips_isa == 33) #define ISA_MIPS64 (mips_isa == 64) /* Architecture target defines. */ @@ -359,8 +361,8 @@ extern void sbss_section PARAMS ((void) #define TARGET_MIPS4100 (mips_arch == PROCESSOR_R4100) #define TARGET_MIPS4120 (mips_arch == PROCESSOR_R4120) #define TARGET_MIPS4300 (mips_arch == PROCESSOR_R4300) -#define TARGET_MIPS4KC (mips_arch == PROCESSOR_R4KC) -#define TARGET_MIPS5KC (mips_arch == PROCESSOR_R5KC) +#define TARGET_MIPS4KC (mips_arch == PROCESSOR_4KC) +#define TARGET_MIPS5KC (mips_arch == PROCESSOR_5KC) #define TARGET_MIPS5400 (mips_arch == PROCESSOR_R5400) #define TARGET_MIPS5500 (mips_arch == PROCESSOR_R5500) #define TARGET_SB1 (mips_arch == PROCESSOR_SB1) @@ -456,11 +458,19 @@ extern void sbss_section PARAMS ((void) else if (ISA_MIPS32) \ { \ builtin_define ("__mips=32"); \ + builtin_define ("__mips_isa_rev=1"); \ + builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ + } \ + else if (ISA_MIPS32R2) \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("__mips_isa_rev=2"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ } \ else if (ISA_MIPS64) \ { \ builtin_define ("__mips=64"); \ + builtin_define ("__mips_isa_rev=1"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS64"); \ } \ \ @@ -707,13 +717,17 @@ extern void sbss_section PARAMS ((void) # if MIPS_ISA_DEFAULT == 32 # define MULTILIB_ISA_DEFAULT "mips32" # else -# if MIPS_ISA_DEFAULT == 64 -# define MULTILIB_ISA_DEFAULT "mips64" +# if MIPS_ISA_DEFAULT == 33 +# define MULTILIB_ISA_DEFAULT "mips32r2" # else -# define MULTILIB_ISA_DEFAULT "mips1" -# endif +# if MIPS_ISA_DEFAULT == 64 +# define MULTILIB_ISA_DEFAULT "mips64" +# else +# define MULTILIB_ISA_DEFAULT "mips1" +# endif +# endif +# endif # endif -# endif # endif # endif # endif @@ -770,6 +784,7 @@ extern void sbss_section PARAMS ((void) || TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -806,6 +821,7 @@ extern void sbss_section PARAMS ((void) /* ISA has the conditional move instructions introduced in mips4. */ #define ISA_HAS_CONDMOVE ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS5500 \ && !TARGET_MIPS16) @@ -817,6 +833,7 @@ extern void sbss_section PARAMS ((void) branch on CC, and move (both FP and non-FP) on CC. */ #define ISA_HAS_8CC (ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) /* This is a catch all for the other new mips4 instructions: indexed load and @@ -832,6 +849,7 @@ extern void sbss_section PARAMS ((void) /* ISA has integer multiply-accumulate instructions, madd and msub. */ #define ISA_HAS_MADD_MSUB ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -843,6 +861,7 @@ extern void sbss_section PARAMS ((void) /* ISA has count leading zeroes/ones instruction (not implemented). */ #define ISA_HAS_CLZ_CLO ((ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64 \ ) && !TARGET_MIPS16) @@ -879,22 +898,25 @@ extern void sbss_section PARAMS ((void) ) /* ISA has 32-bit rotate right instruction. */ -#define ISA_HAS_ROTR_SI (TARGET_MIPS5400 \ - || TARGET_MIPS5500 \ - || TARGET_SR71K \ - ) +#define ISA_HAS_ROTR_SI (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + || TARGET_MIPS5400 \ + || TARGET_MIPS5500 \ + || TARGET_SR71K \ + )) -/* ISA has 32-bit rotate right instruction. */ +/* ISA has 64-bit rotate right instruction. */ #define ISA_HAS_ROTR_DI (TARGET_64BIT \ + && !TARGET_MIPS16 \ && (TARGET_MIPS5400 \ || TARGET_MIPS5500 \ || TARGET_SR71K \ )) - /* ISA has data prefetch instruction. */ #define ISA_HAS_PREFETCH ((ISA_MIPS4 \ || ISA_MIPS32 \ + || ISA_MIPS32R2 \ || ISA_MIPS64) \ && !TARGET_MIPS16) @@ -903,6 +925,11 @@ extern void sbss_section PARAMS ((void) also requires TARGET_DOUBLE_FLOAT. */ #define ISA_HAS_TRUNC_W (!ISA_MIPS1) +/* ISA includes the MIPS32r2 seb and seh instructions. */ +#define ISA_HAS_SEB_SEH (!TARGET_MIPS16 \ + && (ISA_MIPS32R2 \ + )) + /* CC1_SPEC causes -mips3 and -mips4 to set -mfp64 and -mgp64; -mips1 or -mips2 sets -mfp32 and -mgp32. This can be overridden by an explicit -mfp32, -mfp64, -mgp32 or -mgp64. -mfp64 sets MASK_FLOAT64 in @@ -1066,7 +1093,8 @@ extern int mips_abi; #undef ASM_SPEC #define ASM_SPEC "\ -%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}\ +%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \ +%{mips32} %{mips32r2} %{mips64} \ %{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \ %(subtarget_asm_optimizing_spec) \ %(subtarget_asm_debugging_spec) \ @@ -1123,7 +1151,7 @@ extern int mips_abi; #ifndef LINK_SPEC #define LINK_SPEC "\ %(endian_spec) \ -%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ +%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{shared} %{non_shared}" #endif /* LINK_SPEC defined */ Index: config/mips/mips.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v retrieving revision 1.161 diff -u -p -r1.161 mips.md --- config/mips/mips.md 6 Jan 2003 20:12:37 -0000 1.161 +++ config/mips/mips.md 8 Jan 2003 19:53:32 -0000 @@ -1,6 +1,6 @@ ;; Mips.md Machine Description for MIPS based processors ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +;; 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ;; Contributed by A. Lichnewsky, lich@inria.inria.fr ;; Changes by Michael Meissner, meissner@osf.org ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -1808,6 +1808,7 @@ || TARGET_MIPS5400 || TARGET_MIPS5500 || ISA_MIPS32 + || ISA_MIPS32R2 || ISA_MIPS64) return \"mul\\t%0,%1,%2\"; return \"mult\\t%0,%1,%2\"; @@ -4379,6 +4380,13 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_SEB_SEH) + { + emit_insn (gen_extendhisi2_hw (operands[0], + force_reg (HImode, operands[1]))); + DONE; + } + if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4394,6 +4402,14 @@ move\\t%0,%z4\\n\\ } }") +(define_insn "extendhisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] + "ISA_HAS_SEB_SEH" + "seh\\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + (define_insn "extendhisi2_internal" [(set (match_operand:SI 0 "register_operand" "=d,d") (sign_extend:SI (match_operand:HI 1 "memory_operand" "R,m")))] @@ -4441,6 +4457,12 @@ move\\t%0,%z4\\n\\ "" " { + if (ISA_HAS_SEB_SEH) + { + emit_insn (gen_extendqisi2_hw (operands[0], + force_reg (QImode, operands[1]))); + DONE; + } if (optimize && GET_CODE (operands[1]) == MEM) operands[1] = force_not_mem (operands[1]); @@ -4455,6 +4477,14 @@ move\\t%0,%z4\\n\\ DONE; } }") + +(define_insn "extendqisi2_hw" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] + "ISA_HAS_SEB_SEH" + "seb\\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) (define_insn "extendqisi2_insn" [(set (match_operand:SI 0 "register_operand" "=d,d") Index: config/mips/netbsd.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/netbsd.h,v retrieving revision 1.27 diff -u -p -r1.27 netbsd.h --- config/mips/netbsd.h 10 Nov 2002 18:28:39 -0000 1.27 +++ config/mips/netbsd.h 8 Jan 2003 19:53:32 -0000 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems. - Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 + Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -93,9 +93,20 @@ Boston, MA 02111-1307, USA. */ else if (ISA_MIPS4) \ builtin_define ("__mips=4"); \ else if (ISA_MIPS32) \ - builtin_define ("__mips=32"); \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("__mips_isa_rev=1"); \ + } \ + else if (ISA_MIPS32R2) \ + { \ + builtin_define ("__mips=32"); \ + builtin_define ("__mips_isa_rev=2"); \ + } \ else if (ISA_MIPS64) \ - builtin_define ("__mips=64"); \ + { \ + builtin_define ("__mips=64"); \ + builtin_define ("__mips_isa_rev=1"); \ + } \ \ if (TARGET_HARD_FLOAT) \ builtin_define ("__mips_hard_float"); \ @@ -153,7 +164,7 @@ Boston, MA 02111-1307, USA. */ "%{EL:-m elf32lmip} \ %{EB:-m elf32bmip} \ %(endian_spec) \ - %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ + %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \ %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \ %(netbsd_link_spec)" Index: config/mips/t-isa3264 =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/t-isa3264,v retrieving revision 1.4 diff -u -p -r1.4 t-isa3264 --- config/mips/t-isa3264 17 Aug 2002 13:04:39 -0000 1.4 +++ config/mips/t-isa3264 8 Jan 2003 19:53:32 -0000 @@ -33,8 +33,8 @@ TARGET_LIBGCC2_CFLAGS = -G 0 # Build the libraries for both hard and soft floating point -MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips64 -MULTILIB_DIRNAMES = soft-float el eb mips32 mips64 +MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips32r2/mips64 +MULTILIB_DIRNAMES = soft-float el eb mips32 mips32r2 mips64 MULTILIB_MATCHES = EL=mel EB=meb EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o Index: doc/invoke.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/invoke.texi,v retrieving revision 1.219 diff -u -p -r1.219 invoke.texi --- doc/invoke.texi 8 Jan 2003 01:12:29 -0000 1.219 +++ doc/invoke.texi 8 Jan 2003 19:53:36 -0000 @@ -481,7 +481,8 @@ in the following sections. -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd @gol -mgas -mgp32 -mgp64 @gol -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol --mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol +-mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol +-mlong64 -mlong32 -mlong-calls -mmemcpy @gol -mmips-as -mmips-tfile -mno-abicalls @gol -mno-embedded-data -mno-uninit-const-in-rodata @gol -mno-embedded-pic -mno-gpopt -mno-long-calls @gol @@ -7298,13 +7299,19 @@ These @samp{-m} options are defined for @item -march=@var{arch} @opindex march Generate code that will run on @var{arch}, which can be the name of a -generic MIPS ISA, or the name of a particular processor. The ISA names -are: @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, @samp{mips32} -and @samp{mips64}. The processor names are: @samp{r2000}, -@samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{vr4100}, @samp{vr4300}, -@samp{r4400}, @samp{r4600}, @samp{r4650}, @samp{vr5000}, @samp{r6000}, -@samp{r8000}, @samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, -@samp{orion}, and @samp{sb1}. The special value @samp{from-abi} selects the +generic MIPS ISA, or the name of a particular processor. +The ISA names are: +@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, +@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. +The processor names are: +@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, +@samp{m4k}, +@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, +@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, +@samp{orion}, +@samp{sb1}, +@samp{vr4100}, @samp{vr4300}, and @samp{vr5000}. +The special value @samp{from-abi} selects the most compatible architecture for the selected ABI (that is, @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. @@ -7362,6 +7369,10 @@ Equivalent to @samp{-march=mips4}. @item -mips32 @opindex mips32 Equivalent to @samp{-march=mips32}. + +@item -mips32r2 +@opindex mips32r2 +Equivalent to @samp{-march=mips32r2}. @item -mips64 @opindex mips64 From gcc-patches-return-75257-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 19:58:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13912 invoked by alias); 8 Jan 2003 19:58:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13900 invoked from network); 8 Jan 2003 19:58:54 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 8 Jan 2003 19:58:54 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 21B2BABAF8 for ; Wed, 8 Jan 2003 19:58:40 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 21D06F7F9F; Wed, 8 Jan 2003 19:58:35 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: C++ PATCH to cp_parser_primary_expression From: Jason Merrill Date: Wed, 08 Jan 2003 14:58:35 -0500 Message-ID: Lines: 45 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= This patch fixes explicitly qualified references to namespace-scoped anonymous unions, as in g++.dg/lookup/anon3.C. Tested i686-pc-linux-gnu, applied to trunk. 2003-01-08 Jason Merrill * parser.c (cp_parser_primary_expression): See through explicitly scoped ALIAS_DECLs, too. --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** parser.c.~1~ Tue Jan 7 20:41:45 2003 --- parser.c Tue Jan 7 20:43:18 2003 *************** cp_parser_primary_expression (cp_parser *** 3023,3036 **** if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl)) *qualifying_class = parser->scope; } - /* Resolve references to variables of anonymous unions - into COMPONENT_REFs. */ - else if (TREE_CODE (decl) == ALIAS_DECL) - decl = DECL_INITIAL (decl); else /* Transform references to non-static data members into COMPONENT_REFs. */ decl = hack_identifier (decl, id_expression); } if (TREE_DEPRECATED (decl)) --- 3023,3037 ---- if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl)) *qualifying_class = parser->scope; } else /* Transform references to non-static data members into COMPONENT_REFs. */ decl = hack_identifier (decl, id_expression); + + /* Resolve references to variables of anonymous unions + into COMPONENT_REFs. */ + if (TREE_CODE (decl) == ALIAS_DECL) + decl = DECL_INITIAL (decl); } if (TREE_DEPRECATED (decl)) --=-=-=-- From gcc-patches-return-75258-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 20:02:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16669 invoked by alias); 8 Jan 2003 20:02:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16468 invoked from network); 8 Jan 2003 20:02:05 -0000 Received: from unknown (HELO mail.libertysurf.net) (213.36.80.91) by 209.249.29.67 with SMTP; 8 Jan 2003 20:02:05 -0000 Received: from localhost.localdomain (213.36.79.217) by mail.libertysurf.net (6.5.026) id 3DE3A332005D151B; Wed, 8 Jan 2003 21:01:22 +0100 From: Eric Botcazou To: Mark Mitchell Subject: Re: 3 pending patches from 2002 Date: Wed, 8 Jan 2003 20:59:07 +0100 User-Agent: KMail/1.4.1 References: <14980000.1041902728@warlock.codesourcery.com> In-Reply-To: <14980000.1041902728@warlock.codesourcery.com> Cc: "gcc-patches@gcc.gnu.org" MIME-Version: 1.0 Message-Id: <200301082055.48038.ebotcazou@libertysurf.fr> Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_JIVE05MVZX6EV2327HNO" --------------Boundary-00=_JIVE05MVZX6EV2327HNO Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable > > PR c/8032: > > http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01636.html > > Probably not worth applying on the 3.2 branch. > > Does this work if the constructor is skipping around a lot, e.g.: > > struct S { int a; int b; int c; int d; }; > > struct S s =3D { .c =3D 3, .a =3D 7, 6 }; > > I don't remember what the "6" is supposed to initialize (b? d?), but > we should make sure your patch does the right thing. As Jakub said, 6 is supposed to initialize the member which follows "a". The patch lets the attached testcase pass for gcc 3.2.2, gcc 3.3 and gcc = 3.4=20 (without it, only the first half of testcase is correctly compiled). Should I add it alongside the original testcase ? (Perhaps experienced C=20 front-end hackers could comment on whether such a testcase already exists= in=20 the testsuite). Richard approved the patch for all branches yesterday. Should I take the=20 intersection or the union of your respective approvals ? :-) --=20 Eric Botcazou --------------Boundary-00=_JIVE05MVZX6EV2327HNO Content-Type: text/x-csrc; charset="iso-8859-1"; name="struct_init.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="struct_init.c" extern void abort(void); struct S { int a; int b; int c; int d; }; struct S s1 = { .c = 3, .a = 1, 2 }; struct S s2 = { 1, .d = 4, .c = 3 }; struct S s3 = { .d = 4, .c = 3, .b = 2 }; struct S s4 = { .b = 2 }; struct T { int a; int b; int c; int d; char s[]; }; struct T t1 = { .c = 3, .s = {}, .a = 1, 2 }; struct T t2 = { 1, .s = {}, .d = 4, .c = 3 }; struct T t3 = { .s = {} , .d = 4, .c = 3, .b = 2 }; struct T t4 = { .b = 2, .s = {} }; int main(void) { if (s1.a != 1 || s1.b != 2 || s1.c != 3 || s1.d != 0) abort(); if (s2.a != 1 || s2.b != 0 || s2.c != 3 || s2.d != 4) abort(); if (s3.a != 0 || s3.b != 2 || s3.c != 3 || s3.d != 4) abort(); if (s4.a != 0 || s4.b != 2 || s4.c != 0 || s4.d != 0) abort(); if (t1.a != 1 || t1.b != 2 || t1.c != 3 || t1.d != 0) abort(); if (t2.a != 1 || t2.b != 0 || t2.c != 3 || t2.d != 4) abort(); if (t3.a != 0 || t3.b != 2 || t3.c != 3 || t3.d != 4) abort(); if (t4.a != 0 || t4.b != 2 || t4.c != 0 || t4.d != 0) abort(); return 0; } --------------Boundary-00=_JIVE05MVZX6EV2327HNO-- From gcc-patches-return-75259-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 20:13:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23244 invoked by alias); 8 Jan 2003 20:13:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23148 invoked from network); 8 Jan 2003 20:12:54 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by sources.redhat.com with SMTP; 8 Jan 2003 20:12:54 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h08KCpF21791 for ; Wed, 8 Jan 2003 15:12:51 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WMXr-0001ic-00 for ; Wed, 08 Jan 2003 15:11:23 -0500 Date: Wed, 8 Jan 2003 15:11:23 -0500 To: gcc-patches@gcc.gnu.org Subject: (web pages, committed) tweak 3.4 changes Message-ID: <20030108201123.GA6568@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Committed as obvious. Index: changes.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.4/changes.html,v retrieving revision 1.3 diff -u -r1.3 changes.html --- changes.html 14 Dec 2002 06:15:57 -0000 1.3 +++ changes.html 8 Jan 2003 20:11:53 -0000 @@ -19,7 +19,12 @@ contained in environment variables. It was neither documented nor intended that environment variable paths be ignored, so this has been corrected. - +

  • Support for all the systems obsoleted in + GCC 3.3 has been removed from GCC 3.4. See below for a list of systems which + are obsoleted in this release.
  • +

    General Optimizer Improvements

    @@ -89,7 +94,9 @@

    Other significant improvements

      -
    • The build system has undergone several significant cleanups.
    • +
    • The build system has undergone several significant cleanups. + Subdirectories will only be configured if they are being built, + and all subdirectory configures are run from 'make'.
    From gcc-patches-return-75260-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 20:37:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2643 invoked by alias); 8 Jan 2003 20:37:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2475 invoked from network); 8 Jan 2003 20:37:47 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 8 Jan 2003 20:37:47 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08KbZc09452 for ; Wed, 8 Jan 2003 15:37:35 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08KbZT1138740 for ; Wed, 8 Jan 2003 15:37:35 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id PAA29508 for ; Wed, 8 Jan 2003 15:37:35 -0500 Message-Id: <200301082037.PAA29508@makai.watson.ibm.com> To: gcc-patches@gcc.gnu.org Subject: [itanium-sched-branch] documentation clarification Date: Wed, 08 Jan 2003 15:37:34 -0500 From: David Edelsohn After discussing the unit to automata assigment constraint with Vlad, he approved the following re-wording. David * doc/md.texi: Clarify assignment of units to automata description. Index: md.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/md.texi,v retrieving revision 1.49.4.5 diff -c -p -r1.49.4.5 md.texi *** md.texi 20 Dec 2002 21:08:55 -0000 1.49.4.5 --- md.texi 8 Jan 2003 20:30:58 -0000 *************** which the unit is bound. The automaton *** 5488,5499 **** construction @code{define_automaton}. You should give @dfn{automaton-name}, if there is a defined automaton. ! There are some constraints to assign units to automata. The most ! important one is that, if a unit reservation is present on an ! alternative of a insn reservation on a given cycle, any unit from the ! same automaton should be also present on the rest alternatives of the ! reservation on the cycle. The rest of the constraints are mentioned ! in the description of the subsequent constructions. @findex define_query_cpu_unit @cindex querying function unit reservations --- 5488,5500 ---- construction @code{define_automaton}. You should give @dfn{automaton-name}, if there is a defined automaton. ! The assignment of units to automata are constrained by the uses of the ! units in insn reservations. The most important constraint is: if a ! unit reservation is present on a particular cycle of an alternative ! for an insn reservation, then some unit from the same automaton must ! be present on the same cycle for the other alternatives of the insn ! reservation. The rest of the constraints are mentioned in the ! description of the subsequent constructions. @findex define_query_cpu_unit @cindex querying function unit reservations From gcc-patches-return-75261-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 20:51:31 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10903 invoked by alias); 8 Jan 2003 20:50:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10536 invoked from network); 8 Jan 2003 20:50:08 -0000 Received: from unknown (HELO talisman.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 8 Jan 2003 20:50:08 -0000 Received: (from rsandifo@localhost) by talisman.cambridge.redhat.com (8.11.6/8.11.6) id h08Kofa06819; Wed, 8 Jan 2003 20:50:41 GMT X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f To: gcc-patches@gcc.gnu.org Cc: echristo@redhat.com Subject: Patch for mips reg_or_0_operand predicates From: Richard Sandiford Date: 08 Jan 2003 20:50:41 +0000 Message-ID: Lines: 163 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii se_reg_or_0_operand wasn't matching ADDRESSOF, causing an ICE on the test case below with EABI64. Patch tested on mips64vrel-elf. OK to install? Richard * config/mips/mips.h (PREDICATE_CODES): Add ADDRESSOF for predicates that match register_operands. * config/mips/mips.c (reg_or_0_operand, true_reg_or_0_operand): Make register_operand the default case. Index: config/mips/mips.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v retrieving revision 1.229 diff -c -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.229 mips.h *** config/mips/mips.h 16 Dec 2002 22:45:40 -0000 1.229 --- config/mips/mips.h 8 Jan 2003 20:35:50 -0000 *************** #define ADJUST_INSN_LENGTH(INSN, LENGTH) *** 3758,3768 **** macro are thoses used in the most insn patterns. */ #define PREDICATE_CODES \ ! {"uns_arith_operand", { REG, CONST_INT, SUBREG }}, \ ! {"arith_operand", { REG, CONST_INT, SUBREG }}, \ ! {"arith32_operand", { REG, CONST_INT, SUBREG }}, \ ! {"reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG }}, \ ! {"true_reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG }}, \ {"small_int", { CONST_INT }}, \ {"large_int", { CONST_INT }}, \ {"mips_const_double_ok", { CONST_DOUBLE }}, \ --- 3758,3770 ---- macro are thoses used in the most insn patterns. */ #define PREDICATE_CODES \ ! {"uns_arith_operand", { REG, CONST_INT, SUBREG, ADDRESSOF }}, \ ! {"arith_operand", { REG, CONST_INT, SUBREG, ADDRESSOF }}, \ ! {"arith32_operand", { REG, CONST_INT, SUBREG, ADDRESSOF }}, \ ! {"reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG, \ ! ADDRESSOF }}, \ ! {"true_reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG, \ ! ADDRESSOF }}, \ {"small_int", { CONST_INT }}, \ {"large_int", { CONST_INT }}, \ {"mips_const_double_ok", { CONST_DOUBLE }}, \ *************** #define PREDICATE_CODES \ *** 3776,3795 **** {"call_insn_operand", { CONST_INT, CONST, SYMBOL_REF, REG}}, \ {"move_operand", { CONST_INT, CONST_DOUBLE, CONST, \ SYMBOL_REF, LABEL_REF, SUBREG, \ ! REG, MEM}}, \ {"movdi_operand", { CONST_INT, CONST_DOUBLE, CONST, \ ! SYMBOL_REF, LABEL_REF, SUBREG, REG, \ ! MEM, SIGN_EXTEND }}, \ ! {"se_register_operand", { SUBREG, REG, SIGN_EXTEND }}, \ ! {"se_reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG, \ SIGN_EXTEND }}, \ {"se_uns_arith_operand", { REG, CONST_INT, SUBREG, \ ! SIGN_EXTEND }}, \ {"se_arith_operand", { REG, CONST_INT, SUBREG, \ ! SIGN_EXTEND }}, \ {"se_nonmemory_operand", { CONST_INT, CONST_DOUBLE, CONST, \ SYMBOL_REF, LABEL_REF, SUBREG, \ ! REG, SIGN_EXTEND }}, \ {"consttable_operand", { LABEL_REF, SYMBOL_REF, CONST_INT, \ CONST_DOUBLE, CONST }}, \ {"fcc_register_operand", { REG, SUBREG }}, \ --- 3778,3798 ---- {"call_insn_operand", { CONST_INT, CONST, SYMBOL_REF, REG}}, \ {"move_operand", { CONST_INT, CONST_DOUBLE, CONST, \ SYMBOL_REF, LABEL_REF, SUBREG, \ ! REG, MEM, ADDRESSOF }}, \ {"movdi_operand", { CONST_INT, CONST_DOUBLE, CONST, \ ! SYMBOL_REF, LABEL_REF, SUBREG, \ ! REG, MEM, ADDRESSOF, SIGN_EXTEND }}, \ ! {"se_register_operand", { SUBREG, REG, ADDRESSOF, \ SIGN_EXTEND }}, \ + {"se_reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG, \ + ADDRESSOF, SIGN_EXTEND }}, \ {"se_uns_arith_operand", { REG, CONST_INT, SUBREG, \ ! ADDRESSOF, SIGN_EXTEND }}, \ {"se_arith_operand", { REG, CONST_INT, SUBREG, \ ! ADDRESSOF, SIGN_EXTEND }}, \ {"se_nonmemory_operand", { CONST_INT, CONST_DOUBLE, CONST, \ SYMBOL_REF, LABEL_REF, SUBREG, \ ! REG, ADDRESSOF, SIGN_EXTEND }}, \ {"consttable_operand", { LABEL_REF, SYMBOL_REF, CONST_INT, \ CONST_DOUBLE, CONST }}, \ {"fcc_register_operand", { REG, SUBREG }}, \ Index: config/mips/mips.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v retrieving revision 1.244 diff -c -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.244 mips.c *** config/mips/mips.c 7 Jan 2003 09:52:15 -0000 1.244 --- config/mips/mips.c 8 Jan 2003 20:35:52 -0000 *************** reg_or_0_operand (op, mode) *** 779,793 **** return 0; return op == CONST0_RTX (mode); - case REG: - case SUBREG: - return register_operand (op, mode); - default: ! break; } - - return 0; } /* Return truth value of whether OP is a register or the constant 0, --- 779,787 ---- return 0; return op == CONST0_RTX (mode); default: ! return register_operand (op, mode); } } /* Return truth value of whether OP is a register or the constant 0, *************** true_reg_or_0_operand (op, mode) *** 806,820 **** case CONST_DOUBLE: return op == CONST0_RTX (mode); - case REG: - case SUBREG: - return register_operand (op, mode); - default: ! break; } - - return 0; } /* Return truth value if a CONST_DOUBLE is ok to be a legitimate constant. */ --- 800,808 ---- case CONST_DOUBLE: return op == CONST0_RTX (mode); default: ! return register_operand (op, mode); } } /* Return truth value if a CONST_DOUBLE is ok to be a legitimate constant. */ *** /dev/null Thu Aug 30 13:30:55 2001 --- testsuite/gcc.c-torture/compile/20030109-1.c Fri Dec 13 08:38:05 2002 *************** *** 0 **** --- 1,6 ---- + void foo () + { + int x1, x2, x3; + + bar (&x2 - &x1, &x3 - &x2); + } From gcc-patches-return-75262-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:00:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4610 invoked by alias); 8 Jan 2003 22:00:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4591 invoked from network); 8 Jan 2003 22:00:39 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 8 Jan 2003 22:00:39 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h08M0RI21374 for ; Wed, 8 Jan 2003 14:00:27 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Wed, 8 Jan 2003 14:00:27 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h08M0Rf06984; Wed, 8 Jan 2003 14:00:27 -0800 (PST) Date: Wed, 8 Jan 2003 13:59:53 -0800 Subject: Patch: fix ppc store_multiple Content-Type: multipart/mixed; boundary=Apple-Mail-4--668516351 Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen To: gcc-patches@gcc.gnu.org From: Dale Johannesen Message-Id: <840FF026-2354-11D7-8576-000393D76DAA@apple.com> --Apple-Mail-4--668516351 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed It turns out the problem with load_multiple that David Edelsohn fixed here http://gcc.gnu.org/ml/gcc-patches/2002-11/msg00974.html can also occur for store_multiple, although my only testcase is large and proprietary. This simply adapts the patterns david added for load_multiple. Bootstrapped and tested on darwin. 2003-01-08 Dale Johannesen * config/rs6000/rs6000.md: Replace *store_multiple_string with *stmstring[3-8]. --Apple-Mail-4--668516351 Content-Disposition: attachment; filename=diffs3 Content-Transfer-Encoding: quoted-printable Content-Type: application/octet-stream; x-unix-mode=0644; name="diffs3" Index:=20rs6000.md=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0ARCS=20file:=20= /cvs/gcc/gcc/gcc/config/rs6000/rs6000.md,v=0Aretrieving=20revision=20= 1.227=0Adiff=20-u=20-d=20-b=20-w=20-c=20-3=20-p=20-r1.227=20rs6000.md=0A= ***=20rs6000.md=0920=20Dec=202002=2004:30:57=20-0000=091.227=0A---=20= rs6000.md=098=20Jan=202003=2021:51:01=20-0000=0A***************=0A***=20= 9635,9649=20****=0A=20=20=20=20"{stsi|stswi}=20%2,%P1,%O0"=0A=20=20=20=20= [(set_attr=20"type"=20"store")])=0A=20=20=0A!=20(define_insn=20= "*store_multiple_string"=0A=20=20=20=20[(match_parallel=200=20= "store_multiple_operation"=0A=20=20=09=09=20=20=20[(set=20(mem:SI=20= (match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A=20=20=09=09=09=20= (match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A!=20=09=09=20=20=20=20= (clobber=20(match_scratch:SI=203=20"X"))])]=0A!=20=20=20"TARGET_STRING=20= &&=20!=20TARGET_POWER"=0A=20=20=20=20"{stsi|stswi}=20%2,%1,%O0"=0A=20=20=20= =20[(set_attr=20"type"=20"store")])=0A=20=20=0A=20=20=0C=0A=20=20;;=20= String/block=20move=20insn.=0A=20=20;;=20Argument=200=20is=20the=20= destination=0A---=209635,9747=20----=0A=20=20=20=20"{stsi|stswi}=20= %2,%P1,%O0"=0A=20=20=20=20[(set_attr=20"type"=20"store")])=0A=20=20=0A!=20= (define_insn=20"*stmstring8"=0A=20=20=20=20[(match_parallel=200=20= "store_multiple_operation"=0A=20=20=20=20=20=20[(set=20(mem:SI=20= (match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A=20=20=09=20=20= (match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (clobber=20(match_scratch:SI=203=20"X"))=0A!=20=20=20=20=20=20(set=20= (mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=204)))=0A!=20=09=20=20= (match_operand:SI=204=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=208)))=0A!=20=09= =20=20(match_operand:SI=205=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20= =20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2012)))=0A!=20= =09=20=20(match_operand:SI=206=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20= =20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2016)))=0A= !=20=09=20=20(match_operand:SI=207=20"gpc_reg_operand"=20"r"))=0A!=20=20=20= =20=20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=20= 20)))=0A!=20=09=20=20(match_operand:SI=208=20"gpc_reg_operand"=20"r"))=0A= !=20=20=20=20=20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20= (const_int=2024)))=0A!=20=09=20=20(match_operand:SI=209=20= "gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20(set=20(mem:SI=20(plus:SI=20= (match_dup=201)=20(const_int=2028)))=0A!=20=09=20=20(match_operand:SI=20= 10=20"gpc_reg_operand"=20"r"))])]=0A!=20=20=20"TARGET_STRING=20&&=20= !TARGET_POWER=20&&=20XVECLEN=20(operands[0],=200)=20=3D=3D=209"=0A!=20=20= =20"{stsi|stswi}=20%2,%1,%O0"=0A!=20=20=20[(set_attr=20"type"=20= "store")])=0A!=20=0A!=20(define_insn=20"*stmstring7"=0A!=20=20=20= [(match_parallel=200=20"store_multiple_operation"=0A!=20=20=20=20=20= [(set=20(mem:SI=20(match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A!=20= =09=20=20(match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20= =20=20(clobber=20(match_scratch:SI=203=20"X"))=0A!=20=20=20=20=20=20(set=20= (mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=204)))=0A!=20=09=20=20= (match_operand:SI=204=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=208)))=0A!=20=09= =20=20(match_operand:SI=205=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20= =20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2012)))=0A!=20= =09=20=20(match_operand:SI=206=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20= =20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2016)))=0A= !=20=09=20=20(match_operand:SI=207=20"gpc_reg_operand"=20"r"))=0A!=20=20=20= =20=20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=20= 20)))=0A!=20=09=20=20(match_operand:SI=208=20"gpc_reg_operand"=20"r"))=0A= !=20=20=20=20=20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20= (const_int=2024)))=0A!=20=09=20=20(match_operand:SI=209=20= "gpc_reg_operand"=20"r"))])]=0A!=20=20=20"TARGET_STRING=20&&=20= !TARGET_POWER=20&&=20XVECLEN=20(operands[0],=200)=20=3D=3D=208"=0A!=20=20= =20"{stsi|stswi}=20%2,%1,%O0"=0A!=20=20=20[(set_attr=20"type"=20= "store")])=0A!=20=0A!=20(define_insn=20"*stmstring6"=0A!=20=20=20= [(match_parallel=200=20"store_multiple_operation"=0A!=20=20=20=20=20= [(set=20(mem:SI=20(match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A!=20= =09=20=20(match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20= =20=20(clobber=20(match_scratch:SI=203=20"X"))=0A!=20=20=20=20=20=20(set=20= (mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=204)))=0A!=20=09=20=20= (match_operand:SI=204=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=208)))=0A!=20=09= =20=20(match_operand:SI=205=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20= =20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2012)))=0A!=20= =09=20=20(match_operand:SI=206=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20= =20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2016)))=0A= !=20=09=20=20(match_operand:SI=207=20"gpc_reg_operand"=20"r"))=0A!=20=20=20= =20=20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=20= 20)))=0A!=20=09=20=20(match_operand:SI=208=20"gpc_reg_operand"=20= "r"))])]=0A!=20=20=20"TARGET_STRING=20&&=20!TARGET_POWER=20&&=20XVECLEN=20= (operands[0],=200)=20=3D=3D=207"=0A!=20=20=20"{stsi|stswi}=20%2,%1,%O0"=0A= !=20=20=20[(set_attr=20"type"=20"store")])=0A!=20=0A!=20(define_insn=20= "*stmstring5"=0A!=20=20=20[(match_parallel=200=20= "store_multiple_operation"=0A!=20=20=20=20=20[(set=20(mem:SI=20= (match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A!=20=09=20=20= (match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (clobber=20(match_scratch:SI=203=20"X"))=0A!=20=20=20=20=20=20(set=20= (mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=204)))=0A!=20=09=20=20= (match_operand:SI=204=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=208)))=0A!=20=09= =20=20(match_operand:SI=205=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20= =20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2012)))=0A!=20= =09=20=20(match_operand:SI=206=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20= =20=20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2016)))=0A= !=20=09=20=20(match_operand:SI=207=20"gpc_reg_operand"=20"r"))])]=0A!=20=20= =20"TARGET_STRING=20&&=20!TARGET_POWER=20&&=20XVECLEN=20(operands[0],=20= 0)=20=3D=3D=206"=0A!=20=20=20"{stsi|stswi}=20%2,%1,%O0"=0A!=20=20=20= [(set_attr=20"type"=20"store")])=0A!=20=0A!=20(define_insn=20= "*stmstring4"=0A!=20=20=20[(match_parallel=200=20= "store_multiple_operation"=0A!=20=20=20=20=20[(set=20(mem:SI=20= (match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A!=20=09=20=20= (match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (clobber=20(match_scratch:SI=203=20"X"))=0A!=20=20=20=20=20=20(set=20= (mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=204)))=0A!=20=09=20=20= (match_operand:SI=204=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20=20= (set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=208)))=0A!=20=09= =20=20(match_operand:SI=205=20"gpc_reg_operand"=20"r"))=0A!=20=20=20=20=20= =20(set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=2012)))=0A!=20= =09=20=20(match_operand:SI=206=20"gpc_reg_operand"=20"r"))])]=0A!=20=20=20= "TARGET_STRING=20&&=20!TARGET_POWER=20&&=20XVECLEN=20(operands[0],=200)=20= =3D=3D=205"=0A=20=20=20=20"{stsi|stswi}=20%2,%1,%O0"=0A=20=20=20=20= [(set_attr=20"type"=20"store")])=0A=20=20=0A+=20(define_insn=20= "*stmstring3"=0A+=20=20=20[(match_parallel=200=20= "store_multiple_operation"=0A+=20=20=20=20=20[(set=20(mem:SI=20= (match_operand:SI=201=20"gpc_reg_operand"=20"b"))=0A+=20=09=20=20= (match_operand:SI=202=20"gpc_reg_operand"=20"r"))=0A+=20=20=20=20=20=20= (clobber=20(match_scratch:SI=203=20"X"))=0A+=20=20=20=20=20=20(set=20= (mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=204)))=0A+=20=09=20=20= (match_operand:SI=204=20"gpc_reg_operand"=20"r"))=0A+=20=20=20=20=20=20= (set=20(mem:SI=20(plus:SI=20(match_dup=201)=20(const_int=208)))=0A+=20=09= =20=20(match_operand:SI=205=20"gpc_reg_operand"=20"r"))])]=0A+=20=20=20= "TARGET_STRING=20&&=20!TARGET_POWER=20&&=20XVECLEN=20(operands[0],=200)=20= =3D=3D=204"=0A+=20=20=20"{stsi|stswi}=20%2,%1,%O0"=0A+=20=20=20= [(set_attr=20"type"=20"store")])=0A=20=20=0C=0A=20=20;;=20String/block=20= move=20insn.=0A=20=20;;=20Argument=200=20is=20the=20destination=0A= --Apple-Mail-4--668516351 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed --Apple-Mail-4--668516351-- From gcc-patches-return-75263-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:02:07 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 6447 invoked by alias); 8 Jan 2003 22:02:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 6404 invoked from network); 8 Jan 2003 22:02:03 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:02:03 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08Lv3114349 for ; Wed, 8 Jan 2003 16:57:03 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08M1jn18698; Wed, 8 Jan 2003 17:01:45 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08M1iE16208; Wed, 8 Jan 2003 14:01:44 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08M1ia27666; Wed, 8 Jan 2003 14:01:44 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:01:44 -0800 From: Richard Henderson To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] Fix g++.dg/tls failures on IA-64 Message-ID: <20030108220144.GA27635@redhat.com> Mail-Followup-To: Richard Henderson , Jakub Jelinek , gcc-patches@gcc.gnu.org References: <20030108162631.D6196@sunsite.ms.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030108162631.D6196@sunsite.ms.mff.cuni.cz> User-Agent: Mutt/1.4i On Wed, Jan 08, 2003 at 04:26:31PM +0100, Jakub Jelinek wrote: > This is because ia64-*-linux* doesn't define ASM_OUTPUT_BSS > or ASM_OUTPUT_ALIGNED_BSS ... Really? This is a bug. > ... and start_decl sets DECL_COMMON on DECL_THREAD_LOCAL variable. I guess this is too; we have the same code in c-decl.c:start_decl. > * decl.c (start_decl): Don't set DECL_COMMON for __thread variables. Ok. r~ From gcc-patches-return-75264-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:05:17 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7727 invoked by alias); 8 Jan 2003 22:05:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7686 invoked from network); 8 Jan 2003 22:05:13 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:05:13 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08M0A114604; Wed, 8 Jan 2003 17:00:10 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08M4vn18883; Wed, 8 Jan 2003 17:04:57 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08M4uE16716; Wed, 8 Jan 2003 14:04:56 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08M4tc27682; Wed, 8 Jan 2003 14:04:55 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:04:55 -0800 From: Richard Henderson To: Alexandre Oliva Cc: "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) Message-ID: <20030108220455.GC27635@redhat.com> Mail-Followup-To: Richard Henderson , Alexandre Oliva , "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE References: <200212170531.AAA15561@caip.rutgers.edu> <200212241434.JAA22361@caip.rutgers.edu> <20030107221549.GR12992@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Wed, Jan 08, 2003 at 03:17:49PM -0200, Alexandre Oliva wrote: > I've no idea of what LIA-1 is, but it does have as many denormal bits > as normal bits, it's just that the minimum exponent for a denormal is > higher than that of a plain doubles, since denormals start with the > higher double still being normal. Huh? No it doesn't. The minimum normalized double-double is { DBL_MIN_FLT, 0 }. r~ From gcc-patches-return-75265-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:08:22 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10804 invoked by alias); 8 Jan 2003 22:08:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10777 invoked from network); 8 Jan 2003 22:08:14 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:08:14 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08M3B114847; Wed, 8 Jan 2003 17:03:11 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08M7wn19106; Wed, 8 Jan 2003 17:07:58 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08M7wE17253; Wed, 8 Jan 2003 14:07:58 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08M7wh27691; Wed, 8 Jan 2003 14:07:58 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:07:58 -0800 From: Richard Henderson To: Alexandre Oliva Cc: "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) Message-ID: <20030108220758.GD27635@redhat.com> Mail-Followup-To: Richard Henderson , Alexandre Oliva , "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <20030107215515.GQ12992@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Wed, Jan 08, 2003 at 03:12:52PM -0200, Alexandre Oliva wrote: > I didn't feel like implementing all of TImode emulation in libgcc. We > don't fully support TImode, only as little as needed to get the TFmode > emulation to compile. It could be folded into libgcc2, for sure. > Should it? Ug. No. I didn't realize this was TImode support for 32-bit. Ideally you wouldn't need TImode at all. I realize it probably made things easier with the existing fp-bit.c. Blah. I suggest that these routines _not_ be exported from libgcc.so. They only exist to support the TFmode bits. r~ From gcc-patches-return-75266-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:08:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11586 invoked by alias); 8 Jan 2003 22:08:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11570 invoked from network); 8 Jan 2003 22:08:57 -0000 Received: from unknown (HELO gandalf.codesourcery.com) (66.60.148.227) by 209.249.29.67 with SMTP; 8 Jan 2003 22:08:57 -0000 Received: from gandalf.codesourcery.com (localhost.localdomain [127.0.0.1]) by gandalf.codesourcery.com (8.11.6/8.11.6) with ESMTP id h08M0pC05127; Wed, 8 Jan 2003 14:00:52 -0800 Date: Wed, 08 Jan 2003 14:00:51 -0800 From: Mark Mitchell To: Eric Botcazou cc: "gcc-patches@gcc.gnu.org" Subject: Re: 3 pending patches from 2002 Message-ID: <3830000.1042063251@gandalf.codesourcery.com> In-Reply-To: <200301082055.48038.ebotcazou@libertysurf.fr> References: <14980000.1041902728@warlock.codesourcery.com> <200301082055.48038.ebotcazou@libertysurf.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline --On Wednesday, January 08, 2003 08:59:07 PM +0100 Eric Botcazou wrote: > > Richard approved the patch for all branches yesterday. Should I take the > intersection or the union of your respective approvals ? :-) In this case, the union. If Richard says it is fine, it undoubtedly is. :-) -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From gcc-patches-return-75267-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:12:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14760 invoked by alias); 8 Jan 2003 22:12:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14731 invoked from network); 8 Jan 2003 22:12:11 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:12:11 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08M7B115100; Wed, 8 Jan 2003 17:07:11 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08MBxn19318; Wed, 8 Jan 2003 17:11:59 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08MBwE17930; Wed, 8 Jan 2003 14:11:58 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08MBwO27710; Wed, 8 Jan 2003 14:11:58 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:11:58 -0800 From: Richard Henderson To: Eric Botcazou Cc: gcc-patches@gcc.gnu.org, Jakub Jelinek Subject: Re: [PATCH] Fix force_to_mode bug Message-ID: <20030108221158.GA27696@redhat.com> Mail-Followup-To: Richard Henderson , Eric Botcazou , gcc-patches@gcc.gnu.org, Jakub Jelinek References: <20021118205000.H14760@sunsite.ms.mff.cuni.cz> <200212171438.53532.ebotcazou@libertysurf.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200212171438.53532.ebotcazou@libertysurf.fr> User-Agent: Mutt/1.4i On Tue, Dec 17, 2002 at 02:39:25PM +0100, Eric Botcazou wrote: > > * combine.c (force_to_mode) [MINUS]: Only replace with (not Y) if all > > bits in fuller_mask (not just mask) are set in C. > > > > * gcc.c-torture/execute/20021118-3.c: New test. > > Bootstrapped/regtested on 3.2 branch as of yesterday, fixed PR opt/8794. > Ok to commit to that branch ? Yes. r~ From gcc-patches-return-75268-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:19:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20137 invoked by alias); 8 Jan 2003 22:19:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20076 invoked from network); 8 Jan 2003 22:19:10 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 8 Jan 2003 22:19:10 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18WOXC-00072d-00; Wed, 08 Jan 2003 14:18:50 -0800 To: Richard Henderson Cc: Alexandre Oliva , "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) From: Zack Weinberg Date: Wed, 08 Jan 2003 14:18:50 -0800 In-Reply-To: <20030108220758.GD27635@redhat.com> (Richard Henderson's message of "Wed, 8 Jan 2003 14:07:58 -0800") Message-ID: <87hecjxp2t.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <20030107215515.GQ12992@redhat.com> <20030108220758.GD27635@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Richard Henderson writes: > Ideally you wouldn't need TImode at all. I realize it probably > made things easier with the existing fp-bit.c. Maybe this is a good excuse to dust off Teje's ieeelib.c? zw From gcc-patches-return-75269-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:23:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 23261 invoked by alias); 8 Jan 2003 22:23:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23252 invoked from network); 8 Jan 2003 22:23:22 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:23:22 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08MIL115914; Wed, 8 Jan 2003 17:18:21 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08MNAn20014; Wed, 8 Jan 2003 17:23:10 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08MN9E19683; Wed, 8 Jan 2003 14:23:09 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08MN9o27734; Wed, 8 Jan 2003 14:23:09 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:23:09 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Fix latent bug in cse Message-ID: <20030108222309.GC27696@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20021230234154.GA24511@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021230234154.GA24511@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Tue, Dec 31, 2002 at 12:41:54AM +0100, Jan Hubicka wrote: > *************** cse_set_around_loop (x, insn, loop_start > *** 6804,6809 **** > --- 6804,6810 ---- > SET_SRC, add an insn after P to copy its destination > to what we will be replacing SET_SRC with. */ > if (cse_check_loop_start_value > + && single_set (p) > && validate_change (insn, &SET_SRC (x), > src_elt->exp, 0)) > { This hunk is redundant with the earlier if ((set = single_set (p)) != 0 > *************** cse_set_around_loop (x, insn, loop_start > *** 6822,6828 **** > abort (); > } > else > ! emit_insn_after (move, p); > } > break; > } > --- 6823,6832 ---- > abort (); > } > else > ! { > ! emit_insn_after (move, p); > ! delete_insn (p); > ! } > } > break; > } This is ok. r~ From gcc-patches-return-75270-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:28:35 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25510 invoked by alias); 8 Jan 2003 22:28:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25475 invoked from network); 8 Jan 2003 22:28:32 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 8 Jan 2003 22:28:32 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h08MSIU05387; Wed, 8 Jan 2003 14:28:18 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Nathanael Nerode CC: gcc-patches@gcc.gnu.org Subject: Re: (patch) More #if 0 removal. References: <20030108122047.GA2275@doctormoo> From: Geoff Keating Date: 08 Jan 2003 14:28:18 -0800 In-Reply-To: <20030108122047.GA2275@doctormoo> Message-ID: Lines: 14 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: > The following two #if 0 blocks seem clearly dead to me. The things they > comment out are not refered to anywhere else, at all. > > I'll wait for approval, though. > > * decl.c: Remove some #if 0 code. This is OK. -- - Geoffrey Keating From gcc-patches-return-75271-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:30:31 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27177 invoked by alias); 8 Jan 2003 22:30:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27096 invoked from network); 8 Jan 2003 22:30:23 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 8 Jan 2003 22:30:23 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h08MUAb05391; Wed, 8 Jan 2003 14:30:10 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: Nathanael Nerode CC: gcc-patches@gcc.gnu.org Subject: Re: (ping) delete gcc.hlp References: <20030108132501.GA16384@doctormoo> From: Geoff Keating Date: 08 Jan 2003 14:30:09 -0800 In-Reply-To: <20030108132501.GA16384@doctormoo> Message-ID: Lines: 11 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: > This one's still awaiting review: > > Delete gcc.hlp > http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00165.html OK. -- - Geoffrey Keating From gcc-patches-return-75272-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:34:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28195 invoked by alias); 8 Jan 2003 22:34:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28186 invoked from network); 8 Jan 2003 22:34:25 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:34:25 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08MTP116765; Wed, 8 Jan 2003 17:29:25 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08MYDn20669; Wed, 8 Jan 2003 17:34:13 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08MYDE21433; Wed, 8 Jan 2003 14:34:13 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08MYDc27765; Wed, 8 Jan 2003 14:34:13 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:34:12 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: tweak imul code generation Message-ID: <20030108223412.GD27696@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20030102221537.GA6162@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030102221537.GA6162@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Thu, Jan 02, 2003 at 11:15:37PM +0100, Jan Hubicka wrote: > * i386.md (*mul*): FIx constraints; remove confused comment; fix > athlon_decode attributes > (imul/k8 optimization peep2s): New. Ok. r~ From gcc-patches-return-75273-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:35:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28629 invoked by alias); 8 Jan 2003 22:35:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28618 invoked from network); 8 Jan 2003 22:35:39 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:35:39 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08MUd116858; Wed, 8 Jan 2003 17:30:39 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08MZRn20758; Wed, 8 Jan 2003 17:35:28 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08MZRE21661; Wed, 8 Jan 2003 14:35:27 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08MZR527772; Wed, 8 Jan 2003 14:35:27 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:35:27 -0800 From: Richard Henderson To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: Re: Fix SSE attributes Message-ID: <20030108223527.GE27696@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , gcc-patches@gcc.gnu.org References: <20030103142822.GB4000@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030103142822.GB4000@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Fri, Jan 03, 2003 at 03:28:22PM +0100, Jan Hubicka wrote: > * athlon.md (athlon_ssecmp*): Handle ssecomi as well. > * i386.md (type attribute): Add ssecomi. > (unit, memory, prefix attributes): Handle ssecomi. > (cvt?2? patterns): Fix athlon_decode attribute > (comi patterns): Set attribute to ssecomi. Ok. r~ From gcc-patches-return-75274-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:36:53 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29113 invoked by alias); 8 Jan 2003 22:36:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29088 invoked from network); 8 Jan 2003 22:36:48 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:36:48 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08MVk116914; Wed, 8 Jan 2003 17:31:46 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08MaYn20803; Wed, 8 Jan 2003 17:36:34 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08MaYE21868; Wed, 8 Jan 2003 14:36:34 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08MaX327781; Wed, 8 Jan 2003 14:36:33 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:36:33 -0800 From: Richard Henderson To: Zack Weinberg Cc: Alexandre Oliva , "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) Message-ID: <20030108223633.GF27696@redhat.com> Mail-Followup-To: Richard Henderson , Zack Weinberg , Alexandre Oliva , "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <20030107215515.GQ12992@redhat.com> <20030108220758.GD27635@redhat.com> <87hecjxp2t.fsf@egil.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87hecjxp2t.fsf@egil.codesourcery.com> User-Agent: Mutt/1.4i On Wed, Jan 08, 2003 at 02:18:50PM -0800, Zack Weinberg wrote: > Maybe this is a good excuse to dust off Teje's ieeelib.c? Either that or copy the code from glibc that Jakub and I worked on. r~ From gcc-patches-return-75275-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:46:29 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4130 invoked by alias); 8 Jan 2003 22:46:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3985 invoked from network); 8 Jan 2003 22:46:18 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 8 Jan 2003 22:46:18 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h08MfE117581; Wed, 8 Jan 2003 17:41:14 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h08Mk3n21365; Wed, 8 Jan 2003 17:46:03 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h08Mk2E23235; Wed, 8 Jan 2003 14:46:02 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h08Mk2L27810; Wed, 8 Jan 2003 14:46:02 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 14:46:02 -0800 From: Richard Henderson To: Andrew Pinski Cc: gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, apinski@apple.com Subject: Re: speeding up parts of gcc by using ffs Message-ID: <20030108224602.GI27696@redhat.com> Mail-Followup-To: Richard Henderson , Andrew Pinski , gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, apinski@apple.com References: <87ptraf9sp.fsf@egil.codesourcery.com> <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <11CFA879-22DE-11D7-8833-000393A6D2F2@physics.uc.edu> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 11:52:00PM -0800, Andrew Pinski wrote: > + if(temp1.ints.hi!=0) > + word = temp.ints.low; This doesn't implement ffs. You want if (temp1.ints.lo) word = temp1.ints.lo; And, really, I suspect that you don't want a union at all. Using a >> 32 should be good enough and it won't punish 64-bit hosts. r~ From gcc-patches-return-75276-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:49:56 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7600 invoked by alias); 8 Jan 2003 22:49:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7462 invoked from network); 8 Jan 2003 22:49:44 -0000 Received: from unknown (HELO mms2.broadcom.com) (63.70.210.59) by 209.249.29.67 with SMTP; 8 Jan 2003 22:49:44 -0000 Received: from 63.70.210.1 by mms2.broadcom.com with ESMTP (Broadcom MMS1 SMTP Relay (MMS v5.5.0)); Wed, 08 Jan 2003 14:46:47 -0700 Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP id OAA11522 for ; Wed, 8 Jan 2003 14:49:25 -0800 (PST) Received: from dt-sj3-118.sj.broadcom.com (dt-sj3-118 [10.21.64.118]) by mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id h08MnRER025028 for ; Wed, 8 Jan 2003 14:49:27 -0800 (PST) Received: (from cgd@localhost) by dt-sj3-118.sj.broadcom.com ( 8.9.1/SJ8.9.1) id OAA04767; Wed, 8 Jan 2003 14:49:22 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [applied patch] update config.guess, config.sub From: cgd@broadcom.com Date: 08 Jan 2003 14:49:22 -0800 Message-ID: Lines: 132 MIME-Version: 1.0 X-WSS-ID: 120275DD814810-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit 2003-01-08 Chris Demetriou * config.guess: Update to 2003-01-03 version. * config.sub: Update to 2003-01-03 version. Index: config.guess =================================================================== RCS file: /cvs/gcc/gcc/config.guess,v retrieving revision 1.56 diff -u -p -r1.56 config.guess --- config.guess 24 Dec 2002 23:53:51 -0000 1.56 +++ config.guess 8 Jan 2003 22:48:06 -0000 @@ -1,9 +1,9 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -timestamp='2002-12-23' +timestamp='2003-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -235,6 +235,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + *:MicroBSD:*:*) + echo ${UNAME_MACHINE}-unknown-microbsd${UNAME_RELEASE} + exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -738,14 +741,14 @@ EOF CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` Index: config.sub =================================================================== RCS file: /cvs/gcc/gcc/config.sub,v retrieving revision 1.70 diff -u -p -r1.70 config.sub --- config.sub 17 Dec 2002 10:01:10 -0000 1.70 +++ config.sub 8 Jan 2003 22:48:06 -0000 @@ -1,9 +1,9 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -timestamp='2002-11-30' +timestamp='2003-01-03' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -245,11 +245,13 @@ case $basic_machine in | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ @@ -315,11 +317,13 @@ case $basic_machine in | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39 | mipstx39el \ - | none-* | np1-* | ns16k-* | ns32k-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ @@ -716,6 +720,10 @@ case $basic_machine in np1) basic_machine=np1-gould ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; nsr-tandem) basic_machine=nsr-tandem ;; @@ -901,10 +909,6 @@ case $basic_machine in basic_machine=i386-sequent os=-dynix ;; - t3d) - basic_machine=alpha-cray - os=-unicos - ;; t3e) basic_machine=alphaev5-cray os=-unicos @@ -1114,7 +1118,7 @@ case $os in | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix*) + | -powermax* | -dnix* | -microbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) From gcc-patches-return-75277-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:50:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8013 invoked by alias); 8 Jan 2003 22:50:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7845 invoked from network); 8 Jan 2003 22:50:10 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 8 Jan 2003 22:50:10 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08Mntc07998; Wed, 8 Jan 2003 17:49:55 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08MntT598980; Wed, 8 Jan 2003 17:49:55 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id RAA26806; Wed, 8 Jan 2003 17:49:55 -0500 Message-Id: <200301082249.RAA26806@makai.watson.ibm.com> To: Dale Johannesen cc: gcc-patches@gcc.gnu.org Subject: Re: Patch: fix ppc store_multiple References: <840FF026-2354-11D7-8576-000393D76DAA@apple.com> Date: Wed, 08 Jan 2003 17:49:55 -0500 From: David Edelsohn 2003-01-08 Dale Johannesen * config/rs6000/rs6000.md: Replace *store_multiple_string with *stmsi[3-8]. Hmm, I had hoped that for the pattern to be activated the hard registers would already have been allocated and ducks lined up in a row avoiding the need for the equivalent fix. Oh, well. Please change the pattern names to be eqiuvalent with the ones I used for the load patterns and the ARM port uses, e.g., "stmsiX". With that change, the patch is fine. Thanks, David From gcc-patches-return-75278-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:53:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10882 invoked by alias); 8 Jan 2003 22:53:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10854 invoked from network); 8 Jan 2003 22:53:48 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 8 Jan 2003 22:53:48 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08Mrac38354 for ; Wed, 8 Jan 2003 17:53:36 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08MraT598784 for ; Wed, 8 Jan 2003 17:53:36 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id RAA31694 for ; Wed, 8 Jan 2003 17:53:36 -0500 Message-Id: <200301082253.RAA31694@makai.watson.ibm.com> To: gcc-patches@gcc.gnu.org Subject: Unreviewed patches Date: Wed, 08 Jan 2003 17:53:35 -0500 From: David Edelsohn Below is my partial list of unreviewed patches submitted by others over the past month... David Regrename: http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00036.html NO-OP MOVE dump output: http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01362.html GCC 3.2.2 PR backports: http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01162.html sibcall failure: http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00305.html MS bitfields: http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01171.html REGNO_DECL cleanup: http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01202.html dead unchanging mem stores: http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01164.html From gcc-patches-return-75279-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 22:58:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 17584 invoked by alias); 8 Jan 2003 22:58:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 17576 invoked from network); 8 Jan 2003 22:58:54 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 209.249.29.67 with SMTP; 8 Jan 2003 22:58:54 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h08Mwgw21978 for ; Wed, 8 Jan 2003 14:58:43 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Wed, 8 Jan 2003 14:58:14 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h08Mwgs25701; Wed, 8 Jan 2003 14:58:42 -0800 (PST) Date: Wed, 8 Jan 2003 14:58:08 -0800 Subject: Re: Patch: fix ppc store_multiple Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen , gcc-patches@gcc.gnu.org To: David Edelsohn From: Dale Johannesen In-Reply-To: <200301082249.RAA26806@makai.watson.ibm.com> Message-Id: Content-Transfer-Encoding: 7bit On Wednesday, January 8, 2003, at 02:49 PM, David Edelsohn wrote: > Hmm, I had hoped that for the pattern to be activated the hard > registers > would already have been allocated and ducks lined up in a row avoiding > the > need for the equivalent fix. Oh, well. > > Please change the pattern names to be eqiuvalent with the ones I used > for > the load patterns and the ARM port uses, e.g., "stmsiX". With that > change, the patch is fine. I have no objection to this, but should point out that there are 2 variants, formerly *store_multiple_power and *store_multiple_string, the latter for PowerPC. My patch only addresses the latter, because I don't see how to modify the former and I think it is not necessary (this is probably the case you looked at when you concluded this wasn't necessary). Do you still want the name change? From gcc-patches-return-75280-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:01:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 18704 invoked by alias); 8 Jan 2003 23:01:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18676 invoked from network); 8 Jan 2003 23:01:42 -0000 Received: from unknown (HELO igw2.watson.ibm.com) (129.34.20.6) by 209.249.29.67 with SMTP; 8 Jan 2003 23:01:42 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw2.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08N1Sc13708; Wed, 8 Jan 2003 18:01:28 -0500 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id h08N1ST669694; Wed, 8 Jan 2003 18:01:28 -0500 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id SAA30512; Wed, 8 Jan 2003 18:01:27 -0500 Message-Id: <200301082301.SAA30512@makai.watson.ibm.com> To: Dale Johannesen cc: gcc-patches@gcc.gnu.org Subject: Re: Patch: fix ppc store_multiple In-Reply-To: Message from Dale Johannesen of "Wed, 08 Jan 2003 14:58:08 PST." Date: Wed, 08 Jan 2003 18:01:27 -0500 From: David Edelsohn >>>>> Dale Johannesen writes: Dale> I have no objection to this, but should point out that there are 2 Dale> variants, Dale> formerly *store_multiple_power and *store_multiple_string, the latter Dale> for PowerPC. Dale> My patch only addresses the latter, because I don't see how to modify Dale> the former Dale> and I think it is not necessary (this is probably the case you looked Dale> at when Dale> you concluded this wasn't necessary). Do you still want the name Dale> change? Yes, I still want the name change. The different names even help make it clearer that the two patterns operate differently. The POWER version is not worth worrying about, even if it theoretically does need the same fix. David From gcc-patches-return-75281-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:02:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 19227 invoked by alias); 8 Jan 2003 23:02:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 19210 invoked from network); 8 Jan 2003 23:02:41 -0000 Received: from unknown (HELO gold.csi.cam.ac.uk) (131.111.8.12) by 209.249.29.67 with SMTP; 8 Jan 2003 23:02:41 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by gold.csi.cam.ac.uk with esmtp (Exim 4.10) id 18WPDR-0004yl-00; Wed, 08 Jan 2003 23:02:29 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18WPDQ-0000FA-00; Wed, 08 Jan 2003 23:02:28 +0000 Date: Wed, 8 Jan 2003 23:02:26 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Andreas Jaeger cc: Subject: Re: Fix treelang build with older texinfo In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 Jan 2003, Andreas Jaeger wrote: > What about this patch? Is it ok to commit? It has been tested > successfully several runs already, This is for a treelang or build system maintainer to review. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75282-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:10:39 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20633 invoked by alias); 8 Jan 2003 23:10:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20626 invoked from network); 8 Jan 2003 23:10:35 -0000 Received: from unknown (HELO brown.csi.cam.ac.uk) (131.111.8.14) by 209.249.29.67 with SMTP; 8 Jan 2003 23:10:35 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by brown.csi.cam.ac.uk with esmtp (Exim 4.10) id 18WPL5-0006ez-00; Wed, 08 Jan 2003 23:10:23 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18WPL5-0000MD-00; Wed, 08 Jan 2003 23:10:23 +0000 Date: Wed, 8 Jan 2003 23:10:23 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Nathanael Nerode cc: Subject: Re: (web pages, committed) tweak 3.4 changes In-Reply-To: <20030108201123.GA6568@doctormoo> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 Jan 2003, Nathanael Nerode wrote: > +
  • Support for all the systems + href="../gcc-3.3/changes.html#obsolete_systems">obsoleted in > + GCC 3.3 has been removed from GCC 3.4. See + href="#obsolete_systems">below for a list of systems which > + are obsoleted in this release.
  • > + That's premature - the support hasn't yet been removed from mainline CVS. (And when support is removed, some care should be taken to clean up miscellaneous references to the obsolete systems all over the source tree, not just delete the obvious files. Part of the benefit of removing such support is we can be sure it's OK to get rid of ancient documentation in trouble.texi etc.. Larin Hennessy produced a series of patches last month to clean up references to systems for which support has already been removed - these illustrate what needs to be checked for when removing support.) (And his patch to clean up lots of now unnecessary a29k XFAILs in the testsuite (mostly) has not yet been reviewed.) -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75283-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:16:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22923 invoked by alias); 8 Jan 2003 23:16:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22880 invoked from network); 8 Jan 2003 23:16:54 -0000 Received: from unknown (HELO web21407.mail.yahoo.com) (216.136.232.77) by 209.249.29.67 with SMTP; 8 Jan 2003 23:16:54 -0000 Message-ID: <20030108231554.2743.qmail@web21407.mail.yahoo.com> Received: from [203.97.2.243] by web21407.mail.yahoo.com via HTTP; Thu, 09 Jan 2003 10:15:54 EST Date: Thu, 9 Jan 2003 10:15:54 +1100 (EST) From: =?iso-8859-1?q?Danny=20Smith?= Subject: Unreviewed patch for PR8750, 9185 [i386, mingw32, cygwin] To: GCC Patches MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit I would be grateful if someone could review this patch from last month. http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01040.html If fixes target specific problems PR8750 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8750 and PR9185 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8750 Danny http://movies.yahoo.com.au - Yahoo! Movies - What's on at your local cinema? From gcc-patches-return-75284-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:32:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26009 invoked by alias); 8 Jan 2003 23:32:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26000 invoked from network); 8 Jan 2003 23:32:37 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 8 Jan 2003 23:32:37 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18WPgL-000753-00; Wed, 08 Jan 2003 15:32:21 -0800 To: "Joseph S. Myers" Cc: Nathanael Nerode , Subject: Re: (web pages, committed) tweak 3.4 changes From: Zack Weinberg Date: Wed, 08 Jan 2003 15:32:21 -0800 In-Reply-To: ("Joseph S. Myers"'s message of "Wed, 8 Jan 2003 23:10:23 +0000 (GMT)") Message-ID: <874r8jxloa.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii "Joseph S. Myers" writes: > On Wed, 8 Jan 2003, Nathanael Nerode wrote: > >> +
  • Support for all the systems > + href="../gcc-3.3/changes.html#obsolete_systems">obsoleted in >> + GCC 3.3 has been removed from GCC 3.4. See > + href="#obsolete_systems">below for a list of systems which >> + are obsoleted in this release.
  • >> + > > That's premature - the support hasn't yet been removed from mainline CVS. Nor have we even nailed down the list of systems to be obsoleted. I hope to be getting back to this later today. zw From gcc-patches-return-75285-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:35:48 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26699 invoked by alias); 8 Jan 2003 23:35:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26682 invoked from network); 8 Jan 2003 23:35:44 -0000 Received: from unknown (HELO gold.csi.cam.ac.uk) (131.111.8.12) by 209.249.29.67 with SMTP; 8 Jan 2003 23:35:44 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by gold.csi.cam.ac.uk with esmtp (Exim 4.10) id 18WPjP-0006qd-00; Wed, 08 Jan 2003 23:35:31 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18WPjP-0000jE-00; Wed, 08 Jan 2003 23:35:31 +0000 Date: Wed, 8 Jan 2003 23:35:28 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Zack Weinberg cc: Nathanael Nerode , Subject: Re: (web pages, committed) tweak 3.4 changes In-Reply-To: <874r8jxloa.fsf@egil.codesourcery.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 Jan 2003, Zack Weinberg wrote: > Nor have we even nailed down the list of systems to be obsoleted. I > hope to be getting back to this later today. But we do have the list of systems obsoleted in 3.3, they can always be removed from mainline before the next lot is deprecated. -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75286-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 08 23:44:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28403 invoked by alias); 8 Jan 2003 23:44:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28356 invoked from network); 8 Jan 2003 23:44:23 -0000 Received: from unknown (HELO nikam.ms.mff.cuni.cz) (195.113.18.106) by 209.249.29.67 with SMTP; 8 Jan 2003 23:44:23 -0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 878D34EF04; Thu, 9 Jan 2003 00:44:07 +0100 (CET) Date: Thu, 9 Jan 2003 00:44:07 +0100 From: Jan Hubicka To: Jan Hubicka Cc: Nathanael Nerode , gcc@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: Bootstrap compare failure on i686-pc-linux-gnu ?!? Message-ID: <20030108234407.GN7392@kam.mff.cuni.cz> References: <20030108215916.GA29761@doctormoo> <20030108221452.GK7392@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030108221452.GK7392@kam.mff.cuni.cz> User-Agent: Mutt/1.3.28i > > I confirmed it. > > > > c-format.o differs > > cppexp.o differs > > cse.o differs > > df.o differs > > gcc.o differs > > i386.o differs > > profile.o differs > > toplev.o differs > > ada/ali.o differs > > ada/lib.o differs > > cp/call.o differs > > > > I'm going to take a stab in the dark and guess that Jan's patch for > > i386* did this. Jan, is this possible? > Hmm, possible, definitly. I didn't get the misscompare when commiting and my > testing machine is down currently, but I will try to bootstrap on other > one now. Ok, it is my bug. Somehow it didn't show up in bootstrap I made. Sorry for that! I am testing the fix and will apply it as obivous if it passes. Thu Jan 9 00:42:31 CET 2003 Jan Hubicka * i386.c (ix86_expand_int_addcc): Fix thinko. Index: i386.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v retrieving revision 1.505 diff -c -3 -p -r1.505 i386.c *** i386.c 8 Jan 2003 11:20:21 -0000 1.505 --- i386.c 8 Jan 2003 23:42:10 -0000 *************** ix86_expand_int_addcc (operands) *** 9999,10005 **** ix86_compare_op1, &compare_op)) return 0; if (GET_CODE (compare_op) != LTU) ! val = operands[3] == const1_rtx ? constm1_rtx : const1_rtx; if ((GET_CODE (compare_op) == LTU) == (operands[3] == constm1_rtx)) { switch (GET_MODE (operands[0])) --- 9999,10005 ---- ix86_compare_op1, &compare_op)) return 0; if (GET_CODE (compare_op) != LTU) ! val = constm1_rtx; if ((GET_CODE (compare_op) == LTU) == (operands[3] == constm1_rtx)) { switch (GET_MODE (operands[0])) From gcc-patches-return-75287-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 00:01:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4767 invoked by alias); 9 Jan 2003 00:01:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4716 invoked from network); 9 Jan 2003 00:01:23 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 9 Jan 2003 00:01:23 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h0901At05430; Wed, 8 Jan 2003 16:01:10 -0800 Date: Wed, 8 Jan 2003 16:01:10 -0800 From: Geoff Keating Message-Id: <200301090001.h0901At05430@desire.geoffk.org> To: gcc-patches@gcc.gnu.org CC: Larin Hennessy Subject: Re: [patch] Remove obsoleted targets from gcc testsuite > 2002-12-10 Larin Hennessy > > * g++.old-deja/g++.mike/dyncast1.C: Remove reference to AMD > A29K > * g++.old-deja/g++.mike/dyncast2.C: Likewise > * g++.old-deja/g++.mike/dyncast3.C: Likewise ..... This patch is OK, please commit it. -- - Geoffrey Keating From gcc-patches-return-75288-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 00:06:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7260 invoked by alias); 9 Jan 2003 00:06:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7242 invoked from network); 9 Jan 2003 00:06:44 -0000 Received: from unknown (HELO bobo.nws.orst.edu) (128.193.4.11) by 209.249.29.67 with SMTP; 9 Jan 2003 00:06:44 -0000 Received: by bobo.nws.orst.edu (Postfix, from userid 1001) id 0F61D123E7; Wed, 8 Jan 2003 16:06:33 -0800 (PST) Received: from science.oregonstate.edu (dell-2.science.oregonstate.edu [128.193.224.85]) by bobo.nws.orst.edu (Postfix) with ESMTP id E363912380; Wed, 8 Jan 2003 16:06:32 -0800 (PST) Received: from science.oregonstate.edu (opennms.science.oregonstate.edu [128.193.224.86]) by science.oregonstate.edu (8.12.5/8.12.5) with ESMTP id h090JAct018109; Wed, 8 Jan 2003 16:19:10 -0800 Message-ID: <3E1CBCFF.10409@science.oregonstate.edu> Date: Wed, 08 Jan 2003 16:06:23 -0800 From: Larin Hennessy User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021218 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Geoff Keating Cc: gcc-patches@gcc.gnu.org Subject: Re: [patch] Remove obsoleted targets from gcc testsuite References: <200301090001.h0901At05430@desire.geoffk.org> In-Reply-To: <200301090001.h0901At05430@desire.geoffk.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, hits=-4.3 required=7.0 tests=IN_REP_TO,SUBJ_REMOVE version=2.20 X-Spam-Level: Geoff Keating wrote: >>2002-12-10 Larin Hennessy >> >> * g++.old-deja/g++.mike/dyncast1.C: Remove reference to AMD >> A29K >> * g++.old-deja/g++.mike/dyncast2.C: Likewise >> * g++.old-deja/g++.mike/dyncast3.C: Likewise >> >> >..... > >This patch is OK, please commit it. > > > > Thanks. I do not have commit access though. Could some please commit this for me? -Larin From gcc-patches-return-75289-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 00:06:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7563 invoked by alias); 9 Jan 2003 00:06:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7537 invoked from network); 9 Jan 2003 00:06:57 -0000 Received: from unknown (HELO desire.geoffk.org) (12.235.56.190) by 209.249.29.67 with SMTP; 9 Jan 2003 00:06:57 -0000 Received: (from geoffk@localhost) by desire.geoffk.org (8.11.6/8.11.6) id h0906YL05435; Wed, 8 Jan 2003 16:06:34 -0800 X-Authentication-Warning: desire.geoffk.org: geoffk set sender to geoffk@geoffk.org using -f To: David Edelsohn CC: gcc-patches@gcc.gnu.org, Dale Johannesen Subject: Re: Unreviewed patches References: <200301082253.RAA31694@makai.watson.ibm.com> From: Geoff Keating Date: 08 Jan 2003 16:06:33 -0800 In-Reply-To: <200301082253.RAA31694@makai.watson.ibm.com> Message-ID: Lines: 11 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii David Edelsohn writes: > sibcall failure: > http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00305.html This is OK except the change to the comment in function.h; the old comment is correct and is what the patch now implements. You can just commit it without that chunk. -- - Geoffrey Keating From gcc-patches-return-75290-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 00:25:30 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11939 invoked by alias); 9 Jan 2003 00:25:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11910 invoked from network); 9 Jan 2003 00:25:27 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by sources.redhat.com with SMTP; 9 Jan 2003 00:25:27 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h090PRw08241 for ; Wed, 8 Jan 2003 16:25:27 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Wed, 8 Jan 2003 16:25:27 -0800 Received: from apple.com (snowdrop.apple.com [17.201.21.115]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h090PRf01164; Wed, 8 Jan 2003 16:25:27 -0800 (PST) Date: Wed, 8 Jan 2003 16:25:21 -0800 Subject: [C++ PATCH] Improve enum handling Content-Type: multipart/mixed; boundary=Apple-Mail-3--659788066 Mime-Version: 1.0 (Apple Message framework v551) Cc: Devang Patel To: gcc-patches@gcc.gnu.org From: Devang Patel Message-Id: --Apple-Mail-3--659788066 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed This small patch improves enum handling by code reorg and by delaying copy_node(). Bootstrapped and tested on powerpc-apple-darwin. 2003-01-08 Devang Patel * decl.c (finish_enum): Merge two 'for' loops. copy value node if required. (build_enumerator): Remove #if 0 code. Delay copying value node until finish_enum (). -Devang --Apple-Mail-3--659788066 Content-Disposition: attachment; filename=build_enum_1.diff Content-Transfer-Encoding: 7bit Content-Type: application/octet-stream; x-unix-mode=0644; name="build_enum_1.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/ChangeLog,v retrieving revision 1.3141 diff -Idpatel.pbxuser -c -3 -p -r1.3141 ChangeLog *** ChangeLog 8 Jan 2003 20:00:11 -0000 1.3141 --- ChangeLog 9 Jan 2003 00:20:31 -0000 *************** *** 1,3 **** --- 1,8 ---- + 2003-01-08 Devang Patel + * decl.c (finish_enum): Merge two 'for' loops. copy value node if required. + (build_enumerator): Remove #if 0 code. Delay copying value node until + finish_enum (). + 2003-01-08 Jason Merrill * parser.c (cp_parser_primary_expression): See through explicitly Index: decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v retrieving revision 1.983 diff -Idpatel.pbxuser -c -3 -p -r1.983 decl.c *** decl.c 8 Jan 2003 17:32:13 -0000 1.983 --- decl.c 9 Jan 2003 00:20:33 -0000 *************** finish_enum (tree enumtype) *** 13181,13229 **** /* We built up the VALUES in reverse order. */ TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype)); - /* [dcl.enum] - - Following the closing brace of an enum-specifier, each - enumerator has the type of its enumeration. Prior to the - closing brace, the type of each enumerator is the type of - its initializing value. */ - for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair)) - TREE_TYPE (TREE_VALUE (pair)) = enumtype; - - /* For an enum defined in a template, all further processing is - postponed until the template is instantiated. */ - if (processing_template_decl) - { - if (at_function_scope_p ()) - add_stmt (build_min (TAG_DEFN, enumtype)); - return; - } - - /* Figure out what the minimum and maximum values of the enumerators - are. */ if (TYPE_VALUES (enumtype)) { minnode = maxnode = NULL_TREE; ! for (pair = TYPE_VALUES (enumtype); ! pair; ! pair = TREE_CHAIN (pair)) { tree value; ! value = DECL_INITIAL (TREE_VALUE (pair)); ! if (!minnode) ! minnode = maxnode = value; ! else if (tree_int_cst_lt (maxnode, value)) ! maxnode = value; ! else if (tree_int_cst_lt (value, minnode)) ! minnode = value; } } else minnode = maxnode = integer_zero_node; /* Compute the number of bits require to represent all values of the enumeration. We must do this before the type of MINNODE and MAXNODE are transformed, since min_precision relies on the --- 13181,13240 ---- /* We built up the VALUES in reverse order. */ TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype)); if (TYPE_VALUES (enumtype)) { + /* Initialize min and max values and figure out actual values in + following 'for' loop. */ minnode = maxnode = NULL_TREE; ! /* [dcl.enum] ! ! Following the closing brace of an enum-specifier, each ! enumerator has the type of its enumeration. Prior to the ! closing brace, the type of each enumerator is the type of ! its initializing value. */ ! for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair)) { + tree value; ! /* If we are going to rest type then copy node first. ! It can not be shared now. */ ! if (TREE_TYPE (TREE_VALUE (pair)) != enumtype) ! { ! if (DECL_INITIAL (TREE_VALUE (pair))) ! DECL_INITIAL (TREE_VALUE (pair)) = ! copy_node (DECL_INITIAL (TREE_VALUE (pair))); ! ! TREE_TYPE (TREE_VALUE (pair)) = enumtype; ! } ! ! if (!processing_template_decl) ! { ! /* Adjust min and max value. */ ! value = DECL_INITIAL (TREE_VALUE (pair)); ! if (!minnode) ! minnode = maxnode = value; ! else if (tree_int_cst_lt (maxnode, value)) ! maxnode = value; ! else if (tree_int_cst_lt (value, minnode)) ! minnode = value; ! } } } else minnode = maxnode = integer_zero_node; + /* For an enum defined in a template, all further processing is + postponed until the template is instantiated. */ + if (processing_template_decl) + { + if (at_function_scope_p ()) + add_stmt (build_min (TAG_DEFN, enumtype)); + return; + } + /* Compute the number of bits require to represent all values of the enumeration. We must do this before the type of MINNODE and MAXNODE are transformed, since min_precision relies on the *************** build_enumerator (tree name, tree value, *** 13319,13325 **** } /* Default based on previous value. */ ! if (value == NULL_TREE && ! processing_template_decl) { tree prev_value; --- 13330,13336 ---- } /* Default based on previous value. */ ! if (value == NULL_TREE) { tree prev_value; *************** build_enumerator (tree name, tree value, *** 13342,13364 **** /* Remove no-op casts from the value. */ if (value) STRIP_TYPE_NOPS (value); - #if 0 - /* To fix MAX_VAL enum consts. (bkoz) */ - TREE_TYPE (value) = integer_type_node; - #endif } - - /* We always have to copy here; not all INTEGER_CSTs are unshared. - Even in other cases, we will later (in finish_enum) be setting - the type of VALUE. But, we don't need to make a copy if this - VALUE is one of the enumeration constants for this same - enumeration type. */ - for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values)) - if (TREE_VALUE (values) == value) - break; - /* If we didn't break out of the loop, then we do need a copy. */ - if (!values && value) - value = copy_node (value); /* C++ associates enums with global, function, or class declarations. */ context = current_scope (); --- 13353,13359 ---- --Apple-Mail-3--659788066-- From gcc-patches-return-75291-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 00:34:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14138 invoked by alias); 9 Jan 2003 00:34:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14068 invoked from network); 9 Jan 2003 00:34:50 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 9 Jan 2003 00:34:50 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h090Ybk25889 for ; Wed, 8 Jan 2003 19:34:37 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WQd9-0001gZ-00 for ; Wed, 08 Jan 2003 19:33:07 -0500 Date: Wed, 8 Jan 2003 19:33:06 -0500 To: gcc-patches@gcc.gnu.org Subject: Re: (web pages, committed) tweak 3.4 changes Message-ID: <20030109003306.GA6480@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode > That's premature - the support hasn't yet been removed from mainline > CVS. * cough cough * In some cases it has, notably vax-vms. I guess not everyone was as aggressive as I was in deleting things from b-i-b. :-) Right, change back however you like. --Nathanael From gcc-patches-return-75292-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 00:36:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14853 invoked by alias); 9 Jan 2003 00:36:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14845 invoked from network); 9 Jan 2003 00:36:17 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 9 Jan 2003 00:36:17 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id B9E57ABB05; Thu, 9 Jan 2003 00:36:05 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 8EDC1F7F9F; Thu, 9 Jan 2003 00:36:01 +0000 (GMT) To: Devang Patel Cc: gcc-patches@gcc.gnu.org Subject: Re: [C++ PATCH] Improve enum handling References: From: Jason Merrill In-Reply-To: (Devang Patel's message of "Wed, 8 Jan 2003 16:25:21 -0800") Date: Wed, 08 Jan 2003 19:36:01 -0500 Message-ID: Lines: 5 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I would think that you could also defer setting the type of the enumerator values until template instantiation time; rather than move it into the big loop, just swap it with the if (processing_template_decl) bit. Jason From gcc-patches-return-75293-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:00:45 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25716 invoked by alias); 9 Jan 2003 01:00:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25708 invoked from network); 9 Jan 2003 01:00:42 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 9 Jan 2003 01:00:42 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h0910VI22594 for ; Wed, 8 Jan 2003 17:00:31 -0800 (PST) Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Wed, 8 Jan 2003 17:00:02 -0800 Received: from apple.com (johada5.apple.com [17.201.20.185]) by scv1.apple.com (8.11.3/8.11.3) with ESMTP id h0910Us07161; Wed, 8 Jan 2003 17:00:30 -0800 (PST) Date: Wed, 8 Jan 2003 16:59:56 -0800 Subject: Re: Unreviewed patches Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Dale Johannesen , gcc-patches@gcc.gnu.org To: David Edelsohn From: Dale Johannesen In-Reply-To: <200301082253.RAA31694@makai.watson.ibm.com> Message-Id: Content-Transfer-Encoding: 7bit On Wednesday, January 8, 2003, at 02:53 PM, David Edelsohn wrote: > sibcall failure: > http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00305.html Actually there are 2 different sibcall patches, this is the other one. http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01310.html The diffs there include a version of the other sibcall patch (above) which is different from what Geoff finally accepted; I'll fix that. From gcc-patches-return-75294-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:01:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 26321 invoked by alias); 9 Jan 2003 01:01:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26302 invoked from network); 9 Jan 2003 01:01:54 -0000 Received: from unknown (HELO tiamat) (24.44.152.191) by 209.249.29.67 with SMTP; 9 Jan 2003 01:01:54 -0000 Received: from jlquinn by tiamat with local (Exim 3.35 #1 (Debian)) id 18WR3G-0005l0-00; Wed, 08 Jan 2003 20:00:06 -0500 To: libstdc++@gcc.gnu.org,gcc-patches@gcc.gnu.org Subject: [Patch] IO performance improvement Message-Id: From: Jerry Quinn Date: Wed, 08 Jan 2003 20:00:06 -0500 This is the first patch to improve the IO performance issues in libstdc++/8761. I've added Nathan Myers' format cache back in, slightly modified, and used it to bypass locale copy constructors and destructors. I'll be using it more in other spots. This change brings the runtime of the 8761 testcase from 25 seconds on my machine to about 21 seconds. I suspect there are be issues with the patch (i.e., formatting, exporting globals, etc). Be gentle :-) I believe these changes will also have an effect on libstdc++/7076. Jerry Quinn 2003-01-08 Jerry Quinn * include/bits/locale_facets.h (_Format_cache<_CharT>): New class. (_Format_cache, _Format_cache): New specializations. * include/bits/locale_facets.tcc (num_put::_M_widen_int): Remove __loc. Fetch ctype facet from cache. Get grouping and thousands_sep info from cache. (_Format_cache<_CharT>::_Format_cache): New. (_Format_cache<_CharT>::~_Format_cache): New. (_Format_cache<_CharT>::_M_populate): New. (_Format_cache<_CharT>::_S_callback): New. (_Format_cache<_CharT>::_S_get): New. (_Format_cache::_Format_cache): New specialization. (_Format_cache::_Format_cache): New specialization. * src/locale-inst.cc (_Format_cache, _Format_cache<_char_t>): New. * src/localenames.cc (_Format_cache::_Format_cache, _Format_cache::_Format_cache): New. diff -r -u libstdc++.orig/include/bits/locale_facets.h libstdc++-v3/include/bits/locale_facets.h --- libstdc++.orig/include/bits/locale_facets.h Mon Jan 6 22:54:07 2003 +++ libstdc++-v3/include/bits/locale_facets.h Wed Jan 8 11:03:07 2003 @@ -1805,6 +1805,131 @@ inline _CharT tolower(_CharT __c, const locale& __loc) { return use_facet >(__loc).tolower(__c); } + + + // Cache for formatting data from several facets. + + // _Format_cache holds the information extracted from the numpunct<> + // and moneypunct<> facets in a form optimized for parsing and + // formatting. It is stored via a void* pointer in the pword() + // array of an iosbase object passed to the _get and _put facets. + // pword(0) is reserved for the cache. + + // Its intent is to avoid the cost of creating a locale object and + // calling the virtual functions in locale facets. + template + class _Format_cache + { + // Types: + typedef _CharT char_type; + typedef char_traits<_CharT> traits_type; + typedef basic_string<_CharT> string_type; + + // Forward decls and Friends: + friend class locale; + template + friend class _Numeric_get; + friend class num_get<_CharT>; + friend class time_get<_CharT>; + friend class money_get<_CharT>; + friend class num_put<_CharT>; + friend class time_put<_CharT>; + friend class money_put<_CharT>; + + public: + // Data Members: + + // ios_base::pword() reserved cell + static int _S_pword_ix; + + // True iff data members are consistent with the current locale, + // i.e. imbue sets this to false. + bool _M_valid; + + + // A list of valid numeric literals: for the standard "C" locale, this + // is "-+xX0123456789abcdef0123456789ABCDEF". This array contains the + // chars after having been passed through the current locale's + // ctype<_CharT>.widen(). + // + + // NB: code depends on the order of definitions of the names + // these are indices into _M_numeric_literals, below. + // This string is formatted for putting, not getting. (output, not input) + enum + { + _S_minus, + _S_plus, + _S_x, + _S_X, + _S_digits, + _S_digits_end = _S_digits + 16, + _S_udigits = _S_digits_end, + _S_udigits_end = _S_udigits + 16, + _S_ee = _S_digits + 14, // For scientific notation, 'e' + _S_Ee = _S_udigits + 14 // For scientific notation, 'E' + }; + + _CharT _M_literals[_S_udigits_end]; + + + // The sign used to separate decimal values: for standard US + // locales, this would usually be: "." + // Abstracted from numpunct::decimal_point(). + _CharT _M_decimal_point; + + // The sign used to separate groups of digits into smaller + // strings that the eye can parse with less difficulty: for + // standard US locales, this would usually be: "," + // Abstracted from numpunct::thousands_sep(). + _CharT _M_thousands_sep; + + // However the US's "false" and "true" are translated. + // From numpunct::truename() and numpunct::falsename(), respectively. + string_type _M_truename; + string_type _M_falsename; + + // If we are checking groupings. This should be equivalent to + // numpunct::groupings().size() != 0 + bool _M_use_grouping; + + // If we are using numpunct's groupings, this is the current grouping + // string in effect (from numpunct::grouping()). + string _M_grouping; + + // Hangs on to the locale's ctype facet. Permits avoiding some overhead + // in creating and destroying local instances of locale. + const ctype<_CharT>* _M_ctype; + + + _Format_cache(); + + ~_Format_cache(); + + // Given a member of the ios heirarchy as an argument, extract + // out all the current formatting information into a + // _Format_cache object and return a pointer to it. + static _Format_cache<_CharT>* + _S_get(ios_base& __ios); + + private: + void + _M_populate (ios_base&); + + // Used to update the cache when ios_base::imbue(),basic_ios::copyfmt(), + // or ios_base::~ios_base() are called. + static void + _S_callback(ios_base::event __event, ios_base& __ios, int __ix) throw(); + + }; + + template<> _Format_cache::_Format_cache(); +#ifdef _G_USE_WCHAR_T + template<> _Format_cache::_Format_cache(); +#endif + + + } // namespace std #endif diff -r -u libstdc++.orig/include/bits/locale_facets.tcc libstdc++-v3/include/bits/locale_facets.tcc --- libstdc++.orig/include/bits/locale_facets.tcc Mon Jan 6 22:54:07 2003 +++ libstdc++-v3/include/bits/locale_facets.tcc Wed Jan 8 11:28:09 2003 @@ -784,22 +784,24 @@ { // [22.2.2.2.2] Stage 2, convert to char_type, using correct // numpunct.decimal_point() values for '.' and adding grouping. - const locale __loc = __io.getloc(); - const ctype<_CharT>& __ctype = use_facet >(__loc); _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len)); // Grouping can add (almost) as many separators as the number of // digits, but no more. _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len * 2)); - __ctype.widen(__cs, __cs + __len, __ws); + + _Format_cache<_CharT>* __fc = _Format_cache<_CharT>::_S_get(__io); + + __fc->_M_ctype->widen(__cs, __cs + __len, __ws); + + // Add grouping, if necessary. - const numpunct<_CharT>& __np = use_facet >(__loc); - const string __grouping = __np.grouping(); - const ios_base::fmtflags __basefield = __io.flags() & ios_base::basefield; - if (__grouping.size()) + if (__fc->_M_use_grouping) { + const ios_base::fmtflags __basefield = __io.flags() & ios_base::basefield; + // By itself __add_grouping cannot deal correctly with __ws when // ios::showbase is set and ios_base::oct || ios_base::hex. // Therefore we take care "by hand" of the initial 0, 0x or 0X. @@ -819,9 +821,9 @@ *(__ws2 + 1) = *(__ws + 1); } _CharT* __p; - __p = __add_grouping(__ws2 + __off, __np.thousands_sep(), - __grouping.c_str(), - __grouping.c_str() + __grouping.size(), + __p = __add_grouping(__ws2 + __off, __fc->_M_thousands_sep, + __fc->_M_grouping.c_str(), + __fc->_M_grouping.c_str() + __fc->_M_grouping.size(), __ws + __off, __ws + __len); __len = __p - __ws2; // Switch strings. @@ -2392,6 +2394,92 @@ bool has_facet >(const locale&); #endif + + template + _Format_cache<_CharT>::_Format_cache() + : _M_valid(false), _M_use_grouping(false) + { } + + template<> + _Format_cache::_Format_cache(); + + template<> + _Format_cache::_Format_cache(); + + template + _Format_cache<_CharT>::~_Format_cache() + { } + + template + void + _Format_cache<_CharT>::_M_populate(ios_base& __io) + { + static const char _S_numeric_literals[] = "-+xX0123456789abcdef0123456789ABCDEF"; + static const int _S_literal_count = sizeof(_S_numeric_literals) - 1; + + locale __loc = __io.getloc(); + numpunct<_CharT> const& __np = use_facet >(__loc); + _M_falsename = __np.falsename(); + _M_truename = __np.truename(); + + ctype<_CharT> const& __ct = use_facet< ctype<_CharT> >(__loc); + __ct.widen(_S_numeric_literals, + _S_numeric_literals + _S_literal_count, _M_literals); + _M_thousands_sep = __np.thousands_sep(); + _M_decimal_point = __np.decimal_point(); + _M_grouping = __np.grouping(); + _M_use_grouping = _M_grouping.size() != 0 && _M_grouping.data()[0] != 0; + _M_valid = true; + _M_ctype = &__ct; + } + + // This function is always called via a pointer installed in + // an ios_base by ios_base::register_callback. + template + void + _Format_cache<_CharT>::_S_callback(ios_base::event __ev, + ios_base& __ios, int __ix) throw() + { + void*& __p = __ios.pword(__ix); + switch (__ev) + { + case ios_base::erase_event: + delete static_cast<_Format_cache<_CharT>*> (__p); __p = 0; + break; + case ios_base::copyfmt_event: + // if just stored zero, the callback would get registered again + try + { + __p = new _Format_cache<_CharT>; + } + catch(...) + { } + break; + case ios_base::imbue_event: + static_cast<_Format_cache<_CharT>*>(__p)->_M_valid = false; + break; + } + } + + template + _Format_cache<_CharT>* + _Format_cache<_CharT>::_S_get(ios_base& __ios) + { + const int format_cache_slot = 0; // Does this belong in ios_base? + void*& __p = __ios.pword(format_cache_slot); + + if (__p == 0) // XXX MT? maybe sentry takes care of it + { + auto_ptr<_Format_cache<_CharT> > __ap(new _Format_cache<_CharT>); + __ios.register_callback (&_Format_cache<_CharT>::_S_callback, + format_cache_slot); + __p = __ap.release(); + } + _Format_cache<_CharT>* __ncp = static_cast<_Format_cache<_CharT>*>(__p); + if (!__ncp->_M_valid) __ncp->_M_populate(__ios); + return __ncp; + } + } // namespace std #endif diff -r -u libstdc++.orig/src/locale-inst.cc libstdc++-v3/src/locale-inst.cc --- libstdc++.orig/src/locale-inst.cc Mon Jan 6 22:54:07 2003 +++ libstdc++-v3/src/locale-inst.cc Tue Jan 7 00:21:50 2003 @@ -46,6 +46,7 @@ template class moneypunct_byname; template class money_get >; template class money_put >; + template class _Format_cache; #ifdef _GLIBCPP_USE_WCHAR_T template class moneypunct; @@ -54,6 +55,7 @@ template class moneypunct_byname; template class money_get >; template class money_put >; + template class _Format_cache; #endif // numpunct, numpunct_byname, num_get, and num_put diff -r -u libstdc++.orig/src/localename.cc libstdc++-v3/src/localename.cc --- libstdc++.orig/src/localename.cc Mon Jan 6 22:54:07 2003 +++ libstdc++-v3/src/localename.cc Wed Jan 8 10:17:30 2003 @@ -350,4 +350,30 @@ } } } + + template<> + _Format_cache::_Format_cache() + : _M_valid(true), _M_decimal_point('.'), _M_thousands_sep(','), + _M_truename("true"), _M_falsename("false"), _M_use_grouping(false), + _M_ctype(&ctype_c) + { + static const char _S_numeric_literals[] = "-+xX0123456789abcdef0123456789ABCDEF"; + static const int _S_literal_count = sizeof(_S_numeric_literals) - 1; + + memcpy(_M_literals, _S_numeric_literals, _S_literal_count); + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + _Format_cache::_Format_cache() + : _M_valid(true), _M_decimal_point(L'.'), _M_thousands_sep(L','), + _M_truename(L"true"), _M_falsename(L"false"), _M_use_grouping(false), + _M_ctype(&ctype_w) + { + static const wchar_t _S_numeric_literals[] = L"-+xX0123456789abcdef0123456789ABCDEF"; + static const int _S_literal_count = sizeof(_S_numeric_literals) - 1; + + memcpy(_M_literals, _S_numeric_literals, _S_literal_count * sizeof(wchar_t)); + } +#endif } // namespace std From gcc-patches-return-75295-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:03:23 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 27127 invoked by alias); 9 Jan 2003 01:03:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 27119 invoked from network); 9 Jan 2003 01:03:17 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.169) by 209.249.29.67 with SMTP; 9 Jan 2003 01:03:17 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h09131F04725 for ; Wed, 8 Jan 2003 20:03:02 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WR4d-0003ae-00 for ; Wed, 08 Jan 2003 20:01:31 -0500 Date: Wed, 8 Jan 2003 20:01:30 -0500 To: gcc-patches@gcc.gnu.org Subject: ANSIfy cp/cp-tree.h Message-ID: <20030109010130.GA13445@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Survived bootstrap on i686-pc-linux-gnu. * cp-tree.h: ANSIfy function declarations. Index: cp-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/cp-tree.h,v retrieving revision 1.794 diff -u -r1.794 cp-tree.h --- cp-tree.h 3 Jan 2003 19:48:52 -0000 1.794 +++ cp-tree.h 8 Jan 2003 19:36:42 -0000 @@ -3548,7 +3548,7 @@ /* in lex.c */ -extern void init_reswords PARAMS ((void)); +extern void init_reswords (void); /* Indexed by TREE_CODE, these tables give C-looking names to operators represented by TREE_CODES. For example, @@ -3574,11 +3574,11 @@ /* in call.c */ extern bool check_dtor_name (tree, tree); -extern int get_arglist_len_in_bytes PARAMS ((tree)); +extern int get_arglist_len_in_bytes (tree); -extern tree build_vfield_ref PARAMS ((tree, tree)); +extern tree build_vfield_ref (tree, tree); extern tree build_scoped_method_call (tree, tree, tree, tree); -extern tree build_conditional_expr PARAMS ((tree, tree, tree)); +extern tree build_conditional_expr (tree, tree, tree); extern tree build_addr_func (tree); extern tree build_call (tree, tree); extern tree build_method_call (tree, tree, tree, tree, int); @@ -3602,7 +3602,7 @@ extern tree cxx_type_promotes_to (tree); extern tree type_passed_as (tree); extern tree convert_for_arg_passing (tree, tree); -extern tree cp_convert_parm_for_inlining PARAMS ((tree, tree, tree)); +extern tree cp_convert_parm_for_inlining (tree, tree, tree); extern bool is_properly_derived_from (tree, tree); extern tree initialize_reference (tree, tree); extern tree strip_top_quals (tree); @@ -3610,49 +3610,49 @@ extern tree in_charge_arg_for_name (tree); /* in class.c */ -extern tree build_base_path PARAMS ((enum tree_code, tree, tree, int)); +extern tree build_base_path (enum tree_code, tree, tree, int); extern tree convert_to_base (tree, tree, bool); -extern tree build_vtbl_ref PARAMS ((tree, tree)); -extern tree build_vfn_ref PARAMS ((tree, tree)); -extern tree get_vtable_decl PARAMS ((tree, int)); -extern void add_method PARAMS ((tree, tree, int)); -extern int currently_open_class PARAMS ((tree)); -extern tree currently_open_derived_class PARAMS ((tree)); -extern void duplicate_tag_error PARAMS ((tree)); -extern tree finish_struct PARAMS ((tree, tree)); -extern void finish_struct_1 PARAMS ((tree)); -extern int resolves_to_fixed_type_p PARAMS ((tree, int *)); -extern void init_class_processing PARAMS ((void)); -extern int is_empty_class PARAMS ((tree)); -extern void pushclass PARAMS ((tree, int)); -extern void popclass PARAMS ((void)); -extern void push_nested_class PARAMS ((tree, int)); -extern void pop_nested_class PARAMS ((void)); -extern int current_lang_depth PARAMS ((void)); -extern void push_lang_context PARAMS ((tree)); -extern void pop_lang_context PARAMS ((void)); -extern tree instantiate_type PARAMS ((tree, tree, tsubst_flags_t)); -extern void print_class_statistics PARAMS ((void)); -extern void cxx_print_statistics PARAMS ((void)); +extern tree build_vtbl_ref (tree, tree); +extern tree build_vfn_ref (tree, tree); +extern tree get_vtable_decl (tree, int); +extern void add_method (tree, tree, int); +extern int currently_open_class (tree); +extern tree currently_open_derived_class (tree); +extern void duplicate_tag_error (tree); +extern tree finish_struct (tree, tree); +extern void finish_struct_1 (tree); +extern int resolves_to_fixed_type_p (tree, int *); +extern void init_class_processing (void); +extern int is_empty_class (tree); +extern void pushclass (tree, int); +extern void popclass (void); +extern void push_nested_class (tree, int); +extern void pop_nested_class (void); +extern int current_lang_depth (void); +extern void push_lang_context (tree); +extern void pop_lang_context (void); +extern tree instantiate_type (tree, tree, tsubst_flags_t); +extern void print_class_statistics (void); +extern void cxx_print_statistics (void); extern void cxx_print_xnode (FILE *, tree, int); extern void cxx_print_decl (FILE *, tree, int); extern void cxx_print_type (FILE *, tree, int); extern void cxx_print_identifier (FILE *, tree, int); -extern void cxx_print_error_function PARAMS ((struct diagnostic_context *, - const char *)); -extern void build_self_reference PARAMS ((void)); -extern int same_signature_p PARAMS ((tree, tree)); -extern void warn_hidden PARAMS ((tree)); -extern void maybe_add_class_template_decl_list PARAMS ((tree, tree, int)); -extern tree get_enclosing_class PARAMS ((tree)); -int is_base_of_enclosing_class PARAMS ((tree, tree)); -extern void unreverse_member_declarations PARAMS ((tree)); -extern void invalidate_class_lookup_cache PARAMS ((void)); -extern void maybe_note_name_used_in_class PARAMS ((tree, tree)); -extern void note_name_declared_in_class PARAMS ((tree, tree)); -extern tree get_vtbl_decl_for_binfo PARAMS ((tree)); -extern tree get_vtt_name PARAMS ((tree)); -extern tree get_primary_binfo PARAMS ((tree)); +extern void cxx_print_error_function (struct diagnostic_context *, + const char *); +extern void build_self_reference (void); +extern int same_signature_p (tree, tree); +extern void warn_hidden (tree); +extern void maybe_add_class_template_decl_list (tree, tree, int); +extern tree get_enclosing_class (tree); +int is_base_of_enclosing_class (tree, tree); +extern void unreverse_member_declarations (tree); +extern void invalidate_class_lookup_cache (void); +extern void maybe_note_name_used_in_class (tree, tree); +extern void note_name_declared_in_class (tree, tree); +extern tree get_vtbl_decl_for_binfo (tree); +extern tree get_vtt_name (tree); +extern tree get_primary_binfo (tree); /* in cvt.c */ extern tree convert_to_reference (tree, tree, int, int, tree); @@ -3666,161 +3666,161 @@ extern tree build_expr_type_conversion (int, tree, bool); extern tree type_promotes_to (tree); extern tree perform_qualification_conversions (tree, tree); -extern void clone_function_decl PARAMS ((tree, int)); -extern void adjust_clone_args PARAMS ((tree)); +extern void clone_function_decl (tree, int); +extern void adjust_clone_args (tree); /* decl.c */ -extern int global_bindings_p PARAMS ((void)); -extern int kept_level_p PARAMS ((void)); -extern tree getdecls PARAMS ((void)); -extern void pushlevel PARAMS ((int)); -extern tree poplevel PARAMS ((int,int, int)); -extern void insert_block PARAMS ((tree)); -extern void set_block PARAMS ((tree)); -extern tree pushdecl PARAMS ((tree)); -extern void cxx_init_decl_processing PARAMS ((void)); +extern int global_bindings_p (void); +extern int kept_level_p (void); +extern tree getdecls (void); +extern void pushlevel (int); +extern tree poplevel (int,int, int); +extern void insert_block (tree); +extern void set_block (tree); +extern tree pushdecl (tree); +extern void cxx_init_decl_processing (void); enum cp_tree_node_structure_enum cp_tree_node_structure - PARAMS ((union lang_tree_node *)); -extern void cxx_insert_default_attributes PARAMS ((tree)); -extern bool cxx_mark_addressable PARAMS ((tree)); -extern void cxx_push_function_context PARAMS ((struct function *)); -extern void cxx_pop_function_context PARAMS ((struct function *)); -extern void cxx_mark_function_context PARAMS ((struct function *)); -extern int toplevel_bindings_p PARAMS ((void)); -extern int namespace_bindings_p PARAMS ((void)); -extern void keep_next_level PARAMS ((int)); -extern int template_parm_scope_p PARAMS ((void)); -extern void set_class_shadows PARAMS ((tree)); -extern void maybe_push_cleanup_level PARAMS ((tree)); -extern void begin_scope PARAMS ((scope_kind)); -extern void finish_scope PARAMS ((void)); -extern void resume_level PARAMS ((struct cp_binding_level *)); -extern void delete_block PARAMS ((tree)); -extern void add_block_current_level PARAMS ((tree)); -extern void pushlevel_class PARAMS ((void)); -extern void poplevel_class PARAMS ((void)); -extern void print_binding_stack PARAMS ((void)); -extern void print_binding_level PARAMS ((struct cp_binding_level *)); -extern void push_namespace PARAMS ((tree)); -extern void pop_namespace PARAMS ((void)); -extern void push_nested_namespace PARAMS ((tree)); -extern void pop_nested_namespace PARAMS ((tree)); -extern void maybe_push_to_top_level PARAMS ((int)); -extern void push_to_top_level PARAMS ((void)); -extern void pop_from_top_level PARAMS ((void)); -extern void push_switch PARAMS ((tree)); -extern void pop_switch PARAMS ((void)); -extern tree identifier_type_value PARAMS ((tree)); -extern void set_identifier_type_value PARAMS ((tree, tree)); -extern void pop_everything PARAMS ((void)); -extern void pushtag PARAMS ((tree, tree, int)); -extern tree make_anon_name PARAMS ((void)); -extern void clear_anon_tags PARAMS ((void)); -extern int decls_match PARAMS ((tree, tree)); -extern int duplicate_decls PARAMS ((tree, tree)); -extern tree pushdecl_top_level PARAMS ((tree)); -extern void pushdecl_class_level PARAMS ((tree)); -extern tree pushdecl_namespace_level PARAMS ((tree)); -extern tree push_using_decl PARAMS ((tree, tree)); -extern tree push_using_directive PARAMS ((tree)); -extern void push_class_level_binding PARAMS ((tree, tree)); -extern tree implicitly_declare PARAMS ((tree)); -extern tree declare_local_label PARAMS ((tree)); -extern tree define_label PARAMS ((const char *, int, tree)); -extern void check_goto PARAMS ((tree)); -extern void define_case_label PARAMS ((void)); -extern tree binding_for_name PARAMS ((tree, tree)); -extern tree namespace_binding PARAMS ((tree, tree)); -extern void set_namespace_binding PARAMS ((tree, tree, tree)); -extern tree lookup_namespace_name PARAMS ((tree, tree)); -extern tree build_typename_type PARAMS ((tree, tree, tree, tree)); -extern tree make_typename_type PARAMS ((tree, tree, tsubst_flags_t)); -extern tree make_unbound_class_template PARAMS ((tree, tree, tsubst_flags_t)); -extern tree lookup_name_nonclass PARAMS ((tree)); -extern tree lookup_function_nonclass PARAMS ((tree, tree)); + (union lang_tree_node *); +extern void cxx_insert_default_attributes (tree); +extern bool cxx_mark_addressable (tree); +extern void cxx_push_function_context (struct function *); +extern void cxx_pop_function_context (struct function *); +extern void cxx_mark_function_context (struct function *); +extern int toplevel_bindings_p (void); +extern int namespace_bindings_p (void); +extern void keep_next_level (int); +extern int template_parm_scope_p (void); +extern void set_class_shadows (tree); +extern void maybe_push_cleanup_level (tree); +extern void begin_scope (scope_kind); +extern void finish_scope (void); +extern void resume_level (struct cp_binding_level *); +extern void delete_block (tree); +extern void add_block_current_level (tree); +extern void pushlevel_class (void); +extern void poplevel_class (void); +extern void print_binding_stack (void); +extern void print_binding_level (struct cp_binding_level *); +extern void push_namespace (tree); +extern void pop_namespace (void); +extern void push_nested_namespace (tree); +extern void pop_nested_namespace (tree); +extern void maybe_push_to_top_level (int); +extern void push_to_top_level (void); +extern void pop_from_top_level (void); +extern void push_switch (tree); +extern void pop_switch (void); +extern tree identifier_type_value (tree); +extern void set_identifier_type_value (tree, tree); +extern void pop_everything (void); +extern void pushtag (tree, tree, int); +extern tree make_anon_name (void); +extern void clear_anon_tags (void); +extern int decls_match (tree, tree); +extern int duplicate_decls (tree, tree); +extern tree pushdecl_top_level (tree); +extern void pushdecl_class_level (tree); +extern tree pushdecl_namespace_level (tree); +extern tree push_using_decl (tree, tree); +extern tree push_using_directive (tree); +extern void push_class_level_binding (tree, tree); +extern tree implicitly_declare (tree); +extern tree declare_local_label (tree); +extern tree define_label (const char *, int, tree); +extern void check_goto (tree); +extern void define_case_label (void); +extern tree binding_for_name (tree, tree); +extern tree namespace_binding (tree, tree); +extern void set_namespace_binding (tree, tree, tree); +extern tree lookup_namespace_name (tree, tree); +extern tree build_typename_type (tree, tree, tree, tree); +extern tree make_typename_type (tree, tree, tsubst_flags_t); +extern tree make_unbound_class_template (tree, tree, tsubst_flags_t); +extern tree lookup_name_nonclass (tree); +extern tree lookup_function_nonclass (tree, tree); extern tree lookup_qualified_name (tree, tree, bool, int); -extern tree lookup_name PARAMS ((tree, int)); -extern tree lookup_name_current_level PARAMS ((tree)); -extern tree lookup_type_current_level PARAMS ((tree)); +extern tree lookup_name (tree, int); +extern tree lookup_name_current_level (tree); +extern tree lookup_type_current_level (tree); extern tree lookup_name_real (tree, int, int, int, int); -extern tree namespace_ancestor PARAMS ((tree, tree)); -extern tree unqualified_namespace_lookup PARAMS ((tree, int, tree *)); +extern tree namespace_ancestor (tree, tree); +extern tree unqualified_namespace_lookup (tree, int, tree *); extern tree check_for_out_of_scope_variable (tree); extern bool lookup_using_namespace (tree, tree, tree, tree, int, tree *); extern bool qualified_lookup_using_namespace (tree, tree, tree, int); -extern tree build_library_fn PARAMS ((tree, tree)); -extern tree build_library_fn_ptr PARAMS ((const char *, tree)); -extern tree build_cp_library_fn_ptr PARAMS ((const char *, tree)); -extern tree push_library_fn PARAMS ((tree, tree)); -extern tree push_void_library_fn PARAMS ((tree, tree)); -extern tree push_throw_library_fn PARAMS ((tree, tree)); -extern int init_type_desc PARAMS ((void)); -extern tree check_tag_decl PARAMS ((tree)); -extern tree shadow_tag PARAMS ((tree)); -extern tree groktypename PARAMS ((tree)); -extern tree start_decl PARAMS ((tree, tree, int, tree, tree)); -extern void start_decl_1 PARAMS ((tree)); -extern void cp_finish_decl PARAMS ((tree, tree, tree, int)); -extern void finish_decl PARAMS ((tree, tree, tree)); -extern void maybe_inject_for_scope_var PARAMS ((tree)); -extern tree start_handler_parms PARAMS ((tree, tree)); -extern int complete_array_type PARAMS ((tree, tree, int)); -extern tree build_ptrmemfunc_type PARAMS ((tree)); +extern tree build_library_fn (tree, tree); +extern tree build_library_fn_ptr (const char *, tree); +extern tree build_cp_library_fn_ptr (const char *, tree); +extern tree push_library_fn (tree, tree); +extern tree push_void_library_fn (tree, tree); +extern tree push_throw_library_fn (tree, tree); +extern int init_type_desc (void); +extern tree check_tag_decl (tree); +extern tree shadow_tag (tree); +extern tree groktypename (tree); +extern tree start_decl (tree, tree, int, tree, tree); +extern void start_decl_1 (tree); +extern void cp_finish_decl (tree, tree, tree, int); +extern void finish_decl (tree, tree, tree); +extern void maybe_inject_for_scope_var (tree); +extern tree start_handler_parms (tree, tree); +extern int complete_array_type (tree, tree, int); +extern tree build_ptrmemfunc_type (tree); extern tree build_ptrmem_type (tree, tree); /* the grokdeclarator prototype is in decl.h */ -extern int parmlist_is_exprlist PARAMS ((tree)); -extern int copy_fn_p PARAMS ((tree)); -extern tree get_scope_of_declarator PARAMS ((tree)); -extern void grok_special_member_properties PARAMS ((tree)); -extern int grok_ctor_properties PARAMS ((tree, tree)); -extern void grok_op_properties PARAMS ((tree, int)); +extern int parmlist_is_exprlist (tree); +extern int copy_fn_p (tree); +extern tree get_scope_of_declarator (tree); +extern void grok_special_member_properties (tree); +extern int grok_ctor_properties (tree, tree); +extern void grok_op_properties (tree, int); extern tree xref_tag (enum tag_types, tree, tree, bool); -extern tree xref_tag_from_type PARAMS ((tree, tree, int)); -extern void xref_basetypes PARAMS ((tree, tree)); -extern tree start_enum PARAMS ((tree)); -extern void finish_enum PARAMS ((tree)); -extern void build_enumerator PARAMS ((tree, tree, tree)); -extern int start_function PARAMS ((tree, tree, tree, int)); -extern tree begin_function_body PARAMS ((void)); -extern void finish_function_body PARAMS ((tree)); -extern tree finish_function PARAMS ((int)); -extern tree start_method PARAMS ((tree, tree, tree)); -extern tree finish_method PARAMS ((tree)); -extern void maybe_register_incomplete_var PARAMS ((tree)); -extern void complete_vars PARAMS ((tree)); -extern void finish_stmt PARAMS ((void)); -extern void print_other_binding_stack PARAMS ((struct cp_binding_level *)); -extern void revert_static_member_fn PARAMS ((tree)); -extern void fixup_anonymous_aggr PARAMS ((tree)); -extern int check_static_variable_definition PARAMS ((tree, tree)); -extern tree compute_array_index_type PARAMS ((tree, tree)); -extern void push_local_binding PARAMS ((tree, tree, int)); -extern int push_class_binding PARAMS ((tree, tree)); -extern tree check_default_argument PARAMS ((tree, tree)); -extern tree push_overloaded_decl PARAMS ((tree, int)); -extern void clear_identifier_class_values PARAMS ((void)); -extern void storetags PARAMS ((tree)); -extern int vtable_decl_p PARAMS ((tree, void *)); -extern int vtype_decl_p PARAMS ((tree, void *)); -extern int sigtable_decl_p PARAMS ((tree, void *)); +extern tree xref_tag_from_type (tree, tree, int); +extern void xref_basetypes (tree, tree); +extern tree start_enum (tree); +extern void finish_enum (tree); +extern void build_enumerator (tree, tree, tree); +extern int start_function (tree, tree, tree, int); +extern tree begin_function_body (void); +extern void finish_function_body (tree); +extern tree finish_function (int); +extern tree start_method (tree, tree, tree); +extern tree finish_method (tree); +extern void maybe_register_incomplete_var (tree); +extern void complete_vars (tree); +extern void finish_stmt (void); +extern void print_other_binding_stack (struct cp_binding_level *); +extern void revert_static_member_fn (tree); +extern void fixup_anonymous_aggr (tree); +extern int check_static_variable_definition (tree, tree); +extern tree compute_array_index_type (tree, tree); +extern void push_local_binding (tree, tree, int); +extern int push_class_binding (tree, tree); +extern tree check_default_argument (tree, tree); +extern tree push_overloaded_decl (tree, int); +extern void clear_identifier_class_values (void); +extern void storetags (tree); +extern int vtable_decl_p (tree, void *); +extern int vtype_decl_p (tree, void *); +extern int sigtable_decl_p (tree, void *); typedef bool (*walk_globals_pred) (tree, void *); typedef bool (*walk_globals_fn) (tree *, void *); extern bool walk_globals (walk_globals_pred, walk_globals_fn, void *); extern bool walk_vtables (walk_globals_pred, walk_globals_fn, void *); -typedef int (*walk_namespaces_fn) PARAMS ((tree, void *)); -extern int walk_namespaces PARAMS ((walk_namespaces_fn, - void *)); -extern int wrapup_globals_for_namespace PARAMS ((tree, void *)); -extern tree cp_namespace_decls PARAMS ((tree)); -extern tree create_implicit_typedef PARAMS ((tree, tree)); -extern tree maybe_push_decl PARAMS ((tree)); -extern tree build_target_expr_with_type PARAMS ((tree, tree)); -extern int local_variable_p PARAMS ((tree)); -extern int nonstatic_local_decl_p PARAMS ((tree)); -extern tree declare_global_var PARAMS ((tree, tree)); -extern void register_dtor_fn PARAMS ((tree)); -extern tmpl_spec_kind current_tmpl_spec_kind PARAMS ((int)); -extern tree cp_fname_init PARAMS ((const char *)); +typedef int (*walk_namespaces_fn) (tree, void *); +extern int walk_namespaces (walk_namespaces_fn, + void *); +extern int wrapup_globals_for_namespace (tree, void *); +extern tree cp_namespace_decls (tree); +extern tree create_implicit_typedef (tree, tree); +extern tree maybe_push_decl (tree); +extern tree build_target_expr_with_type (tree, tree); +extern int local_variable_p (tree); +extern int nonstatic_local_decl_p (tree); +extern tree declare_global_var (tree, tree); +extern void register_dtor_fn (tree); +extern tmpl_spec_kind current_tmpl_spec_kind (int); +extern tree cp_fname_init (const char *); extern bool have_extern_spec; /* in decl2.c */ @@ -3837,10 +3837,10 @@ extern void check_member_template (tree); extern tree grokfield (tree, tree, tree, tree, tree); extern tree grokbitfield (tree, tree, tree); -extern tree groktypefield PARAMS ((tree, tree)); +extern tree groktypefield (tree, tree); extern tree grokoptypename (tree, tree, tree); extern void cplus_decl_attributes (tree *, tree, int); -extern tree constructor_name_full PARAMS ((tree)); +extern tree constructor_name_full (tree); extern tree constructor_name (tree); extern bool constructor_name_p (tree, tree); extern void defer_fn (tree); @@ -3852,21 +3852,21 @@ extern void import_export_vtable (tree, tree, int); extern void import_export_decl (tree); extern void import_export_tinfo (tree, tree, bool); -extern tree build_cleanup PARAMS ((tree)); -extern void finish_file PARAMS ((void)); -extern tree reparse_absdcl_as_expr PARAMS ((tree, tree)); -extern tree reparse_absdcl_as_casts PARAMS ((tree, tree)); -extern tree build_expr_from_tree PARAMS ((tree)); +extern tree build_cleanup (tree); +extern void finish_file (void); +extern tree reparse_absdcl_as_expr (tree, tree); +extern tree reparse_absdcl_as_casts (tree, tree); +extern tree build_expr_from_tree (tree); extern tree build_offset_ref_call_from_tree (tree, tree); extern tree build_call_from_tree (tree, tree, bool); extern tree reparse_decl_as_expr (tree, tree); extern tree finish_decl_parsing (tree); extern void set_decl_namespace (tree, tree, bool); -extern tree current_decl_namespace PARAMS ((void)); -extern void push_decl_namespace PARAMS ((tree)); -extern void pop_decl_namespace PARAMS ((void)); -extern void push_scope PARAMS ((tree)); -extern void pop_scope PARAMS ((tree)); +extern tree current_decl_namespace (void); +extern void push_decl_namespace (tree); +extern void pop_decl_namespace (void); +extern void push_scope (tree); +extern void pop_scope (tree); extern void do_namespace_alias (tree, tree); extern void do_toplevel_using_decl (tree); extern void do_local_using_decl (tree); @@ -3883,9 +3883,9 @@ extern tree get_guard_cond (tree); extern tree set_guard (tree); -extern void cp_error_at PARAMS ((const char *msgid, ...)); -extern void cp_warning_at PARAMS ((const char *msgid, ...)); -extern void cp_pedwarn_at PARAMS ((const char *msgid, ...)); +extern void cp_error_at (const char *msgid, ...); +extern void cp_warning_at (const char *msgid, ...); +extern void cp_pedwarn_at (const char *msgid, ...); /* XXX Not i18n clean. */ #define cp_deprecated(STR) \ @@ -3896,100 +3896,100 @@ } while (0) /* in error.c */ -extern void init_error PARAMS ((void)); -extern const char *type_as_string PARAMS ((tree, int)); -extern const char *decl_as_string PARAMS ((tree, int)); -extern const char *expr_as_string PARAMS ((tree, int)); -extern const char *context_as_string PARAMS ((tree, int)); -extern const char *lang_decl_name PARAMS ((tree, int)); -extern const char *cp_file_of PARAMS ((tree)); -extern int cp_line_of PARAMS ((tree)); -extern const char *language_to_string PARAMS ((enum languages, int)); -extern void print_instantiation_context PARAMS ((void)); +extern void init_error (void); +extern const char *type_as_string (tree, int); +extern const char *decl_as_string (tree, int); +extern const char *expr_as_string (tree, int); +extern const char *context_as_string (tree, int); +extern const char *lang_decl_name (tree, int); +extern const char *cp_file_of (tree); +extern int cp_line_of (tree); +extern const char *language_to_string (enum languages, int); +extern void print_instantiation_context (void); /* in except.c */ -extern void init_exception_processing PARAMS ((void)); -extern tree expand_start_catch_block PARAMS ((tree)); -extern void expand_end_catch_block PARAMS ((void)); -extern void expand_builtin_throw PARAMS ((void)); -extern void expand_eh_spec_block PARAMS ((tree)); -extern void expand_exception_blocks PARAMS ((void)); -extern tree build_exc_ptr PARAMS ((void)); -extern tree build_throw PARAMS ((tree)); -extern void mark_all_runtime_matches PARAMS ((void)); -extern int nothrow_libfn_p PARAMS ((tree)); -extern void check_handlers PARAMS ((tree)); -extern void choose_personality_routine PARAMS ((enum languages)); +extern void init_exception_processing (void); +extern tree expand_start_catch_block (tree); +extern void expand_end_catch_block (void); +extern void expand_builtin_throw (void); +extern void expand_eh_spec_block (tree); +extern void expand_exception_blocks (void); +extern tree build_exc_ptr (void); +extern tree build_throw (tree); +extern void mark_all_runtime_matches (void); +extern int nothrow_libfn_p (tree); +extern void check_handlers (tree); +extern void choose_personality_routine (enum languages); /* in expr.c */ -extern rtx cxx_expand_expr PARAMS ((tree, rtx, +extern rtx cxx_expand_expr (tree, rtx, enum machine_mode, - int)); -extern tree cplus_expand_constant PARAMS ((tree)); + int); +extern tree cplus_expand_constant (tree); /* friend.c */ -extern int is_friend PARAMS ((tree, tree)); -extern void make_friend_class PARAMS ((tree, tree)); -extern void add_friend PARAMS ((tree, tree)); -extern tree do_friend PARAMS ((tree, tree, tree, tree, tree, enum overload_flags, tree, int)); +extern int is_friend (tree, tree); +extern void make_friend_class (tree, tree); +extern void add_friend (tree, tree); +extern tree do_friend (tree, tree, tree, tree, tree, enum overload_flags, tree, int); /* in init.c */ extern tree expand_member_init (tree, tree); extern void emit_mem_initializers (tree); -extern tree build_aggr_init PARAMS ((tree, tree, int)); -extern tree build_init PARAMS ((tree, tree, int)); -extern int is_aggr_type PARAMS ((tree, int)); -extern tree get_aggr_from_typedef PARAMS ((tree, int)); -extern tree get_type_value PARAMS ((tree)); +extern tree build_aggr_init (tree, tree, int); +extern tree build_init (tree, tree, int); +extern int is_aggr_type (tree, int); +extern tree get_aggr_from_typedef (tree, int); +extern tree get_type_value (tree); extern tree build_zero_init (tree, bool); -extern tree build_member_call PARAMS ((tree, tree, tree)); -extern tree build_offset_ref PARAMS ((tree, tree)); -extern tree resolve_offset_ref PARAMS ((tree)); -extern tree build_new PARAMS ((tree, tree, tree, int)); -extern tree build_vec_init PARAMS ((tree, tree, int)); -extern tree build_x_delete PARAMS ((tree, int, tree)); -extern tree build_delete PARAMS ((tree, tree, special_function_kind, int, int)); -extern void push_base_cleanups PARAMS ((void)); -extern tree build_vbase_delete PARAMS ((tree, tree)); -extern tree build_vec_delete PARAMS ((tree, tree, special_function_kind, int)); -extern tree create_temporary_var PARAMS ((tree)); -extern void begin_init_stmts PARAMS ((tree *, tree *)); -extern tree finish_init_stmts PARAMS ((tree, tree)); -extern void initialize_vtbl_ptrs PARAMS ((tree)); -extern tree build_java_class_ref PARAMS ((tree)); +extern tree build_member_call (tree, tree, tree); +extern tree build_offset_ref (tree, tree); +extern tree resolve_offset_ref (tree); +extern tree build_new (tree, tree, tree, int); +extern tree build_vec_init (tree, tree, int); +extern tree build_x_delete (tree, int, tree); +extern tree build_delete (tree, tree, special_function_kind, int, int); +extern void push_base_cleanups (void); +extern tree build_vbase_delete (tree, tree); +extern tree build_vec_delete (tree, tree, special_function_kind, int); +extern tree create_temporary_var (tree); +extern void begin_init_stmts (tree *, tree *); +extern tree finish_init_stmts (tree, tree); +extern void initialize_vtbl_ptrs (tree); +extern tree build_java_class_ref (tree); /* in input.c */ /* in lex.c */ -extern void cxx_dup_lang_specific_decl PARAMS ((tree)); -extern tree make_pointer_declarator PARAMS ((tree, tree)); -extern tree make_reference_declarator PARAMS ((tree, tree)); -extern tree make_call_declarator PARAMS ((tree, tree, tree, tree)); -extern void set_quals_and_spec PARAMS ((tree, tree, tree)); -extern void print_parse_statistics PARAMS ((void)); -extern void do_pending_inlines PARAMS ((void)); -extern void yyungetc PARAMS ((int, int)); -extern void snarf_method PARAMS ((tree)); - -extern void note_got_semicolon PARAMS ((tree)); -extern void note_list_got_semicolon PARAMS ((tree)); -extern void see_typename PARAMS ((void)); -extern void unqualified_name_lookup_error PARAMS ((tree)); -extern tree do_identifier PARAMS ((tree, tree)); -extern tree do_scoped_id PARAMS ((tree, tree)); -extern tree identifier_typedecl_value PARAMS ((tree)); -extern tree build_lang_decl PARAMS ((enum tree_code, tree, tree)); -extern void retrofit_lang_decl PARAMS ((tree)); -extern tree copy_decl PARAMS ((tree)); -extern tree copy_type PARAMS ((tree)); -extern tree cxx_make_type PARAMS ((enum tree_code)); -extern tree make_aggr_type PARAMS ((enum tree_code)); -extern void yyerror PARAMS ((const char *)); -extern void yyhook PARAMS ((int)); -extern int cp_type_qual_from_rid PARAMS ((tree)); -extern const char *cxx_init PARAMS ((const char *)); -extern void cxx_finish PARAMS ((void)); -extern void cxx_init_options PARAMS ((void)); +extern void cxx_dup_lang_specific_decl (tree); +extern tree make_pointer_declarator (tree, tree); +extern tree make_reference_declarator (tree, tree); +extern tree make_call_declarator (tree, tree, tree, tree); +extern void set_quals_and_spec (tree, tree, tree); +extern void print_parse_statistics (void); +extern void do_pending_inlines (void); +extern void yyungetc (int, int); +extern void snarf_method (tree); + +extern void note_got_semicolon (tree); +extern void note_list_got_semicolon (tree); +extern void see_typename (void); +extern void unqualified_name_lookup_error (tree); +extern tree do_identifier (tree, tree); +extern tree do_scoped_id (tree, tree); +extern tree identifier_typedecl_value (tree); +extern tree build_lang_decl (enum tree_code, tree, tree); +extern void retrofit_lang_decl (tree); +extern tree copy_decl (tree); +extern tree copy_type (tree); +extern tree cxx_make_type (enum tree_code); +extern tree make_aggr_type (enum tree_code); +extern void yyerror (const char *); +extern void yyhook (int); +extern int cp_type_qual_from_rid (tree); +extern const char *cxx_init (const char *); +extern void cxx_finish (void); +extern void cxx_init_options (void); /* in method.c */ extern void init_method (void); @@ -4009,61 +4009,61 @@ extern bool maybe_clone_body (tree); /* in pt.c */ -extern void check_template_shadow PARAMS ((tree)); -extern tree get_innermost_template_args PARAMS ((tree, int)); -extern tree tsubst PARAMS ((tree, tree, tsubst_flags_t, tree)); -extern tree tsubst_expr PARAMS ((tree, tree, tsubst_flags_t, tree)); -extern tree tsubst_copy PARAMS ((tree, tree, tsubst_flags_t, tree)); -extern void maybe_begin_member_template_processing PARAMS ((tree)); -extern void maybe_end_member_template_processing PARAMS ((void)); -extern tree finish_member_template_decl PARAMS ((tree)); -extern void begin_template_parm_list PARAMS ((void)); -extern void begin_specialization PARAMS ((void)); -extern void reset_specialization PARAMS ((void)); -extern void end_specialization PARAMS ((void)); -extern void begin_explicit_instantiation PARAMS ((void)); -extern void end_explicit_instantiation PARAMS ((void)); -extern tree check_explicit_specialization PARAMS ((tree, tree, int, int)); -extern tree process_template_parm PARAMS ((tree, tree)); -extern tree end_template_parm_list PARAMS ((tree)); -extern void end_template_decl PARAMS ((void)); -extern tree current_template_args PARAMS ((void)); -extern tree push_template_decl PARAMS ((tree)); -extern tree push_template_decl_real PARAMS ((tree, int)); -extern void redeclare_class_template PARAMS ((tree, tree)); -extern tree lookup_template_class PARAMS ((tree, tree, tree, tree, int, tsubst_flags_t)); -extern tree lookup_template_function PARAMS ((tree, tree)); -extern int uses_template_parms PARAMS ((tree)); -extern tree instantiate_class_template PARAMS ((tree)); -extern tree instantiate_template PARAMS ((tree, tree)); -extern int fn_type_unification PARAMS ((tree, tree, tree, tree, tree, unification_kind_t, int)); -extern tree tinst_for_decl PARAMS ((void)); -extern void mark_decl_instantiated PARAMS ((tree, int)); -extern int more_specialized PARAMS ((tree, tree, int, int)); -extern void mark_class_instantiated PARAMS ((tree, int)); +extern void check_template_shadow (tree); +extern tree get_innermost_template_args (tree, int); +extern tree tsubst (tree, tree, tsubst_flags_t, tree); +extern tree tsubst_expr (tree, tree, tsubst_flags_t, tree); +extern tree tsubst_copy (tree, tree, tsubst_flags_t, tree); +extern void maybe_begin_member_template_processing (tree); +extern void maybe_end_member_template_processing (void); +extern tree finish_member_template_decl (tree); +extern void begin_template_parm_list (void); +extern void begin_specialization (void); +extern void reset_specialization (void); +extern void end_specialization (void); +extern void begin_explicit_instantiation (void); +extern void end_explicit_instantiation (void); +extern tree check_explicit_specialization (tree, tree, int, int); +extern tree process_template_parm (tree, tree); +extern tree end_template_parm_list (tree); +extern void end_template_decl (void); +extern tree current_template_args (void); +extern tree push_template_decl (tree); +extern tree push_template_decl_real (tree, int); +extern void redeclare_class_template (tree, tree); +extern tree lookup_template_class (tree, tree, tree, tree, int, tsubst_flags_t); +extern tree lookup_template_function (tree, tree); +extern int uses_template_parms (tree); +extern tree instantiate_class_template (tree); +extern tree instantiate_template (tree, tree); +extern int fn_type_unification (tree, tree, tree, tree, tree, unification_kind_t, int); +extern tree tinst_for_decl (void); +extern void mark_decl_instantiated (tree, int); +extern int more_specialized (tree, tree, int, int); +extern void mark_class_instantiated (tree, int); extern void do_decl_instantiation (tree, tree); -extern void do_type_instantiation PARAMS ((tree, tree, tsubst_flags_t)); -extern tree instantiate_decl PARAMS ((tree, int)); -extern tree get_bindings PARAMS ((tree, tree, tree)); -extern int push_tinst_level PARAMS ((tree)); -extern void pop_tinst_level PARAMS ((void)); -extern int more_specialized_class PARAMS ((tree, tree)); -extern int is_member_template PARAMS ((tree)); -extern int comp_template_parms PARAMS ((tree, tree)); -extern int template_class_depth PARAMS ((tree)); -extern int is_specialization_of PARAMS ((tree, tree)); -extern int comp_template_args PARAMS ((tree, tree)); -extern void maybe_process_partial_specialization PARAMS ((tree)); -extern void maybe_check_template_type PARAMS ((tree)); -extern tree most_specialized_instantiation PARAMS ((tree)); -extern void print_candidates PARAMS ((tree)); -extern int instantiate_pending_templates PARAMS ((void)); -extern tree tsubst_default_argument PARAMS ((tree, tree, tree)); -extern tree most_general_template PARAMS ((tree)); -extern tree get_mostly_instantiated_function_type PARAMS ((tree)); -extern int problematic_instantiation_changed PARAMS ((void)); -extern void record_last_problematic_instantiation PARAMS ((void)); -extern tree current_instantiation PARAMS ((void)); +extern void do_type_instantiation (tree, tree, tsubst_flags_t); +extern tree instantiate_decl (tree, int); +extern tree get_bindings (tree, tree, tree); +extern int push_tinst_level (tree); +extern void pop_tinst_level (void); +extern int more_specialized_class (tree, tree); +extern int is_member_template (tree); +extern int comp_template_parms (tree, tree); +extern int template_class_depth (tree); +extern int is_specialization_of (tree, tree); +extern int comp_template_args (tree, tree); +extern void maybe_process_partial_specialization (tree); +extern void maybe_check_template_type (tree); +extern tree most_specialized_instantiation (tree); +extern void print_candidates (tree); +extern int instantiate_pending_templates (void); +extern tree tsubst_default_argument (tree, tree, tree); +extern tree most_general_template (tree); +extern tree get_mostly_instantiated_function_type (tree); +extern int problematic_instantiation_changed (void); +extern void record_last_problematic_instantiation (void); +extern tree current_instantiation (void); extern tree maybe_get_template_decl_from_type_decl (tree); extern int processing_template_parmlist; @@ -4084,301 +4084,301 @@ extern bool emit_tinfo_decl (tree *, void *); /* in search.c */ -extern tree lookup_base PARAMS ((tree, tree, base_access, base_kind *)); -extern int types_overlap_p PARAMS ((tree, tree)); -extern tree get_vbase PARAMS ((tree, tree)); -extern tree get_dynamic_cast_base_type PARAMS ((tree, tree)); -extern void type_access_control PARAMS ((tree, tree)); -extern int accessible_p PARAMS ((tree, tree)); -extern tree lookup_field PARAMS ((tree, tree, int, int)); -extern int lookup_fnfields_1 PARAMS ((tree, tree)); -extern tree lookup_fnfields PARAMS ((tree, tree, int)); -extern tree lookup_member PARAMS ((tree, tree, int, int)); -extern int look_for_overrides PARAMS ((tree, tree)); -extern void get_pure_virtuals PARAMS ((tree)); -extern void get_vbase_types PARAMS ((tree)); -extern void maybe_suppress_debug_info PARAMS ((tree)); -extern void note_debug_info_needed PARAMS ((tree)); -extern void push_class_decls PARAMS ((tree)); -extern void pop_class_decls PARAMS ((void)); -extern void unuse_fields PARAMS ((tree)); -extern void print_search_statistics PARAMS ((void)); -extern void init_search_processing PARAMS ((void)); -extern void reinit_search_statistics PARAMS ((void)); -extern tree current_scope PARAMS ((void)); -extern int at_function_scope_p PARAMS ((void)); +extern tree lookup_base (tree, tree, base_access, base_kind *); +extern int types_overlap_p (tree, tree); +extern tree get_vbase (tree, tree); +extern tree get_dynamic_cast_base_type (tree, tree); +extern void type_access_control (tree, tree); +extern int accessible_p (tree, tree); +extern tree lookup_field (tree, tree, int, int); +extern int lookup_fnfields_1 (tree, tree); +extern tree lookup_fnfields (tree, tree, int); +extern tree lookup_member (tree, tree, int, int); +extern int look_for_overrides (tree, tree); +extern void get_pure_virtuals (tree); +extern void get_vbase_types (tree); +extern void maybe_suppress_debug_info (tree); +extern void note_debug_info_needed (tree); +extern void push_class_decls (tree); +extern void pop_class_decls (void); +extern void unuse_fields (tree); +extern void print_search_statistics (void); +extern void init_search_processing (void); +extern void reinit_search_statistics (void); +extern tree current_scope (void); +extern int at_function_scope_p (void); extern bool at_class_scope_p (void); -extern tree context_for_name_lookup PARAMS ((tree)); -extern tree lookup_conversions PARAMS ((tree)); -extern tree binfo_for_vtable PARAMS ((tree)); -extern tree binfo_from_vbase PARAMS ((tree)); -extern tree look_for_overrides_here PARAMS ((tree, tree)); -extern int check_final_overrider PARAMS ((tree, tree)); -extern tree dfs_walk PARAMS ((tree, +extern tree context_for_name_lookup (tree); +extern tree lookup_conversions (tree); +extern tree binfo_for_vtable (tree); +extern tree binfo_from_vbase (tree); +extern tree look_for_overrides_here (tree, tree); +extern int check_final_overrider (tree, tree); +extern tree dfs_walk (tree, tree (*) (tree, void *), tree (*) (tree, void *), - void *)); -extern tree dfs_walk_real PARAMS ((tree, + void *); +extern tree dfs_walk_real (tree, tree (*) (tree, void *), tree (*) (tree, void *), tree (*) (tree, void *), - void *)); -extern tree dfs_unmark PARAMS ((tree, void *)); -extern tree markedp PARAMS ((tree, void *)); -extern tree unmarkedp PARAMS ((tree, void *)); -extern tree dfs_unmarked_real_bases_queue_p PARAMS ((tree, void *)); -extern tree dfs_marked_real_bases_queue_p PARAMS ((tree, void *)); -extern tree dfs_skip_vbases PARAMS ((tree, void *)); -extern tree marked_vtable_pathp PARAMS ((tree, void *)); -extern tree unmarked_vtable_pathp PARAMS ((tree, void *)); -extern tree find_vbase_instance PARAMS ((tree, tree)); -extern tree binfo_for_vbase PARAMS ((tree, tree)); -extern tree binfo_via_virtual PARAMS ((tree, tree)); + void *); +extern tree dfs_unmark (tree, void *); +extern tree markedp (tree, void *); +extern tree unmarkedp (tree, void *); +extern tree dfs_unmarked_real_bases_queue_p (tree, void *); +extern tree dfs_marked_real_bases_queue_p (tree, void *); +extern tree dfs_skip_vbases (tree, void *); +extern tree marked_vtable_pathp (tree, void *); +extern tree unmarked_vtable_pathp (tree, void *); +extern tree find_vbase_instance (tree, tree); +extern tree binfo_for_vbase (tree, tree); +extern tree binfo_via_virtual (tree, tree); extern tree build_baselink (tree, tree, tree, tree); extern tree adjust_result_of_qualified_name_lookup (tree, tree, tree); /* in semantics.c */ -extern void init_cp_semantics PARAMS ((void)); -extern tree finish_expr_stmt PARAMS ((tree)); -extern tree begin_if_stmt PARAMS ((void)); -extern void finish_if_stmt_cond PARAMS ((tree, tree)); -extern tree finish_then_clause PARAMS ((tree)); -extern void begin_else_clause PARAMS ((void)); -extern void finish_else_clause PARAMS ((tree)); -extern void finish_if_stmt PARAMS ((void)); -extern tree begin_while_stmt PARAMS ((void)); -extern void finish_while_stmt_cond PARAMS ((tree, tree)); -extern void finish_while_stmt PARAMS ((tree)); -extern tree begin_do_stmt PARAMS ((void)); -extern void finish_do_body PARAMS ((tree)); -extern void finish_do_stmt PARAMS ((tree, tree)); -extern tree finish_return_stmt PARAMS ((tree)); -extern tree begin_for_stmt PARAMS ((void)); -extern void finish_for_init_stmt PARAMS ((tree)); -extern void finish_for_cond PARAMS ((tree, tree)); -extern void finish_for_expr PARAMS ((tree, tree)); -extern void finish_for_stmt PARAMS ((tree)); -extern tree finish_break_stmt PARAMS ((void)); -extern tree finish_continue_stmt PARAMS ((void)); -extern tree begin_switch_stmt PARAMS ((void)); -extern void finish_switch_cond PARAMS ((tree, tree)); -extern void finish_switch_stmt PARAMS ((tree)); -extern tree finish_case_label PARAMS ((tree, tree)); -extern tree finish_goto_stmt PARAMS ((tree)); -extern tree begin_try_block PARAMS ((void)); -extern void finish_try_block PARAMS ((tree)); -extern tree begin_eh_spec_block PARAMS ((void)); -extern void finish_eh_spec_block PARAMS ((tree, tree)); -extern void finish_handler_sequence PARAMS ((tree)); -extern tree begin_function_try_block PARAMS ((void)); -extern void finish_function_try_block PARAMS ((tree)); -extern void finish_function_handler_sequence PARAMS ((tree)); -extern void finish_cleanup_try_block PARAMS ((tree)); -extern tree begin_handler PARAMS ((void)); -extern void finish_handler_parms PARAMS ((tree, tree)); -extern void begin_catch_block PARAMS ((tree)); -extern void finish_handler PARAMS ((tree)); -extern void finish_cleanup PARAMS ((tree, tree)); -extern tree begin_compound_stmt PARAMS ((int)); -extern tree finish_compound_stmt PARAMS ((int, tree)); -extern tree finish_asm_stmt PARAMS ((tree, tree, tree, tree, tree)); -extern tree finish_label_stmt PARAMS ((tree)); -extern void finish_label_decl PARAMS ((tree)); -extern void finish_subobject PARAMS ((tree)); -extern tree finish_parenthesized_expr PARAMS ((tree)); -extern tree finish_non_static_data_member PARAMS ((tree, tree)); -extern tree begin_stmt_expr PARAMS ((void)); -extern tree finish_stmt_expr PARAMS ((tree)); +extern void init_cp_semantics (void); +extern tree finish_expr_stmt (tree); +extern tree begin_if_stmt (void); +extern void finish_if_stmt_cond (tree, tree); +extern tree finish_then_clause (tree); +extern void begin_else_clause (void); +extern void finish_else_clause (tree); +extern void finish_if_stmt (void); +extern tree begin_while_stmt (void); +extern void finish_while_stmt_cond (tree, tree); +extern void finish_while_stmt (tree); +extern tree begin_do_stmt (void); +extern void finish_do_body (tree); +extern void finish_do_stmt (tree, tree); +extern tree finish_return_stmt (tree); +extern tree begin_for_stmt (void); +extern void finish_for_init_stmt (tree); +extern void finish_for_cond (tree, tree); +extern void finish_for_expr (tree, tree); +extern void finish_for_stmt (tree); +extern tree finish_break_stmt (void); +extern tree finish_continue_stmt (void); +extern tree begin_switch_stmt (void); +extern void finish_switch_cond (tree, tree); +extern void finish_switch_stmt (tree); +extern tree finish_case_label (tree, tree); +extern tree finish_goto_stmt (tree); +extern tree begin_try_block (void); +extern void finish_try_block (tree); +extern tree begin_eh_spec_block (void); +extern void finish_eh_spec_block (tree, tree); +extern void finish_handler_sequence (tree); +extern tree begin_function_try_block (void); +extern void finish_function_try_block (tree); +extern void finish_function_handler_sequence (tree); +extern void finish_cleanup_try_block (tree); +extern tree begin_handler (void); +extern void finish_handler_parms (tree, tree); +extern void begin_catch_block (tree); +extern void finish_handler (tree); +extern void finish_cleanup (tree, tree); +extern tree begin_compound_stmt (int); +extern tree finish_compound_stmt (int, tree); +extern tree finish_asm_stmt (tree, tree, tree, tree, tree); +extern tree finish_label_stmt (tree); +extern void finish_label_decl (tree); +extern void finish_subobject (tree); +extern tree finish_parenthesized_expr (tree); +extern tree finish_non_static_data_member (tree, tree); +extern tree begin_stmt_expr (void); +extern tree finish_stmt_expr (tree); extern tree finish_call_expr (tree, tree, bool); -extern tree finish_increment_expr PARAMS ((tree, enum tree_code)); -extern tree finish_this_expr PARAMS ((void)); -extern tree finish_object_call_expr PARAMS ((tree, tree, tree)); -extern tree finish_qualified_object_call_expr PARAMS ((tree, tree, tree)); +extern tree finish_increment_expr (tree, enum tree_code); +extern tree finish_this_expr (void); +extern tree finish_object_call_expr (tree, tree, tree); +extern tree finish_qualified_object_call_expr (tree, tree, tree); extern tree finish_pseudo_destructor_expr (tree, tree, tree); -extern tree finish_unary_op_expr PARAMS ((enum tree_code, tree)); +extern tree finish_unary_op_expr (enum tree_code, tree); extern tree finish_compound_literal (tree, tree); extern tree finish_fname (tree); -extern void save_type_access_control PARAMS ((tree)); -extern void reset_type_access_control PARAMS ((void)); -extern void decl_type_access_control PARAMS ((tree)); +extern void save_type_access_control (tree); +extern void reset_type_access_control (void); +extern void decl_type_access_control (tree); extern int begin_function_definition (tree, tree, tree); -extern tree begin_constructor_declarator PARAMS ((tree, tree)); -extern tree finish_declarator PARAMS ((tree, tree, tree, tree, int)); -extern void finish_translation_unit PARAMS ((void)); -extern tree finish_template_type_parm PARAMS ((tree, tree)); -extern tree finish_template_template_parm PARAMS ((tree, tree)); -extern tree finish_parmlist PARAMS ((tree, int)); -extern tree begin_class_definition PARAMS ((tree)); -extern tree finish_class_definition PARAMS ((tree, tree, int, int)); -extern void finish_default_args PARAMS ((void)); -extern tree finish_member_class_template PARAMS ((tree)); -extern void finish_template_decl PARAMS ((tree)); -extern tree finish_template_type PARAMS ((tree, tree, int)); -extern void enter_scope_of PARAMS ((tree)); -extern tree finish_base_specifier PARAMS ((tree, tree)); -extern void finish_member_declaration PARAMS ((tree)); -extern void check_multiple_declarators PARAMS ((void)); -extern tree finish_typeof PARAMS ((tree)); -extern tree finish_sizeof PARAMS ((tree)); -extern tree finish_alignof PARAMS ((tree)); -extern void finish_decl_cleanup PARAMS ((tree, tree)); -extern void finish_eh_cleanup PARAMS ((tree)); -extern void expand_body PARAMS ((tree)); -extern tree nullify_returns_r PARAMS ((tree *, int *, void *)); +extern tree begin_constructor_declarator (tree, tree); +extern tree finish_declarator (tree, tree, tree, tree, int); +extern void finish_translation_unit (void); +extern tree finish_template_type_parm (tree, tree); +extern tree finish_template_template_parm (tree, tree); +extern tree finish_parmlist (tree, int); +extern tree begin_class_definition (tree); +extern tree finish_class_definition (tree, tree, int, int); +extern void finish_default_args (void); +extern tree finish_member_class_template (tree); +extern void finish_template_decl (tree); +extern tree finish_template_type (tree, tree, int); +extern void enter_scope_of (tree); +extern tree finish_base_specifier (tree, tree); +extern void finish_member_declaration (tree); +extern void check_multiple_declarators (void); +extern tree finish_typeof (tree); +extern tree finish_sizeof (tree); +extern tree finish_alignof (tree); +extern void finish_decl_cleanup (tree, tree); +extern void finish_eh_cleanup (tree); +extern void expand_body (tree); +extern tree nullify_returns_r (tree *, int *, void *); extern void do_pushlevel (scope_kind); -extern tree do_poplevel PARAMS ((void)); +extern tree do_poplevel (void); extern void begin_mem_initializers (void); -extern void finish_mem_initializers PARAMS ((tree)); -extern void setup_vtbl_ptr PARAMS ((tree, tree)); -extern void clear_out_block PARAMS ((void)); -extern tree begin_global_stmt_expr PARAMS ((void)); -extern tree finish_global_stmt_expr PARAMS ((tree)); +extern void finish_mem_initializers (tree); +extern void setup_vtbl_ptr (tree, tree); +extern void clear_out_block (void); +extern tree begin_global_stmt_expr (void); +extern tree finish_global_stmt_expr (tree); extern tree check_template_template_default_arg (tree); /* in tree.c */ -extern void lang_check_failed PARAMS ((const char *, int, - const char *)); -extern tree stabilize_expr PARAMS ((tree, tree *)); -extern tree cxx_unsave_expr_now PARAMS ((tree)); -extern tree cxx_maybe_build_cleanup PARAMS ((tree)); -extern void init_tree PARAMS ((void)); -extern int pod_type_p PARAMS ((tree)); -extern int zero_init_p PARAMS ((tree)); -extern tree canonical_type_variant PARAMS ((tree)); -extern void unshare_base_binfos PARAMS ((tree)); -extern int member_p PARAMS ((tree)); -extern cp_lvalue_kind real_lvalue_p PARAMS ((tree)); -extern int non_cast_lvalue_p PARAMS ((tree)); -extern int non_cast_lvalue_or_else PARAMS ((tree, const char *)); -extern tree build_min PARAMS ((enum tree_code, tree, - ...)); -extern tree build_min_nt PARAMS ((enum tree_code, ...)); -extern tree build_cplus_new PARAMS ((tree, tree)); -extern tree get_target_expr PARAMS ((tree)); -extern tree break_out_calls PARAMS ((tree)); -extern tree build_cplus_method_type PARAMS ((tree, tree, tree)); -extern tree build_cplus_staticfn_type PARAMS ((tree, tree, tree)); -extern tree build_cplus_array_type PARAMS ((tree, tree)); -extern tree hash_tree_cons PARAMS ((tree, tree, tree)); -extern tree hash_tree_chain PARAMS ((tree, tree)); -extern tree hash_chainon PARAMS ((tree, tree)); -extern tree make_binfo PARAMS ((tree, tree, tree, tree)); -extern tree reverse_path PARAMS ((tree)); -extern int count_functions PARAMS ((tree)); -extern int is_overloaded_fn PARAMS ((tree)); -extern tree get_first_fn PARAMS ((tree)); -extern int bound_pmf_p PARAMS ((tree)); -extern tree ovl_cons PARAMS ((tree, tree)); -extern tree build_overload PARAMS ((tree, tree)); -extern tree function_arg_chain PARAMS ((tree)); -extern int promotes_to_aggr_type PARAMS ((tree, enum tree_code)); -extern int is_aggr_type_2 PARAMS ((tree, tree)); -extern const char *cxx_printable_name PARAMS ((tree, int)); -extern tree build_exception_variant PARAMS ((tree, tree)); -extern tree bind_template_template_parm PARAMS ((tree, tree)); -extern tree array_type_nelts_total PARAMS ((tree)); -extern tree array_type_nelts_top PARAMS ((tree)); -extern tree break_out_target_exprs PARAMS ((tree)); -extern tree get_type_decl PARAMS ((tree)); -extern tree vec_binfo_member PARAMS ((tree, tree)); -extern tree decl_namespace_context PARAMS ((tree)); -extern tree lvalue_type PARAMS ((tree)); -extern tree error_type PARAMS ((tree)); -extern tree build_zc_wrapper PARAMS ((struct z_candidate *)); -extern tree build_srcloc_here PARAMS ((void)); -extern int varargs_function_p PARAMS ((tree)); -extern int really_overloaded_fn PARAMS ((tree)); -extern int cp_tree_equal PARAMS ((tree, tree)); -extern tree no_linkage_check PARAMS ((tree)); -extern void debug_binfo PARAMS ((tree)); -extern tree build_dummy_object PARAMS ((tree)); -extern tree maybe_dummy_object PARAMS ((tree, tree *)); -extern int is_dummy_object PARAMS ((tree)); +extern void lang_check_failed (const char *, int, + const char *); +extern tree stabilize_expr (tree, tree *); +extern tree cxx_unsave_expr_now (tree); +extern tree cxx_maybe_build_cleanup (tree); +extern void init_tree (void); +extern int pod_type_p (tree); +extern int zero_init_p (tree); +extern tree canonical_type_variant (tree); +extern void unshare_base_binfos (tree); +extern int member_p (tree); +extern cp_lvalue_kind real_lvalue_p (tree); +extern int non_cast_lvalue_p (tree); +extern int non_cast_lvalue_or_else (tree, const char *); +extern tree build_min (enum tree_code, tree, + ...); +extern tree build_min_nt (enum tree_code, ...); +extern tree build_cplus_new (tree, tree); +extern tree get_target_expr (tree); +extern tree break_out_calls (tree); +extern tree build_cplus_method_type (tree, tree, tree); +extern tree build_cplus_staticfn_type (tree, tree, tree); +extern tree build_cplus_array_type (tree, tree); +extern tree hash_tree_cons (tree, tree, tree); +extern tree hash_tree_chain (tree, tree); +extern tree hash_chainon (tree, tree); +extern tree make_binfo (tree, tree, tree, tree); +extern tree reverse_path (tree); +extern int count_functions (tree); +extern int is_overloaded_fn (tree); +extern tree get_first_fn (tree); +extern int bound_pmf_p (tree); +extern tree ovl_cons (tree, tree); +extern tree build_overload (tree, tree); +extern tree function_arg_chain (tree); +extern int promotes_to_aggr_type (tree, enum tree_code); +extern int is_aggr_type_2 (tree, tree); +extern const char *cxx_printable_name (tree, int); +extern tree build_exception_variant (tree, tree); +extern tree bind_template_template_parm (tree, tree); +extern tree array_type_nelts_total (tree); +extern tree array_type_nelts_top (tree); +extern tree break_out_target_exprs (tree); +extern tree get_type_decl (tree); +extern tree vec_binfo_member (tree, tree); +extern tree decl_namespace_context (tree); +extern tree lvalue_type (tree); +extern tree error_type (tree); +extern tree build_zc_wrapper (struct z_candidate *); +extern tree build_srcloc_here (void); +extern int varargs_function_p (tree); +extern int really_overloaded_fn (tree); +extern int cp_tree_equal (tree, tree); +extern tree no_linkage_check (tree); +extern void debug_binfo (tree); +extern tree build_dummy_object (tree); +extern tree maybe_dummy_object (tree, tree *); +extern int is_dummy_object (tree); extern const struct attribute_spec cxx_attribute_table[]; -extern tree make_ptrmem_cst PARAMS ((tree, tree)); -extern tree cp_build_qualified_type_real PARAMS ((tree, int, tsubst_flags_t)); +extern tree make_ptrmem_cst (tree, tree); +extern tree cp_build_qualified_type_real (tree, int, tsubst_flags_t); #define cp_build_qualified_type(TYPE, QUALS) \ cp_build_qualified_type_real ((TYPE), (QUALS), tf_error | tf_warning) -extern tree build_shared_int_cst PARAMS ((int)); -extern special_function_kind special_function_p PARAMS ((tree)); +extern tree build_shared_int_cst (int); +extern special_function_kind special_function_p (tree); extern bool name_p (tree); -extern int count_trees PARAMS ((tree)); -extern int char_type_p PARAMS ((tree)); -extern void verify_stmt_tree PARAMS ((tree)); -extern tree find_tree PARAMS ((tree, tree)); -extern linkage_kind decl_linkage PARAMS ((tree)); -extern tree cp_walk_subtrees PARAMS ((tree*, int*, walk_tree_fn, - void*, void*)); -extern int cp_cannot_inline_tree_fn PARAMS ((tree*)); -extern tree cp_add_pending_fn_decls PARAMS ((void*,tree)); -extern int cp_is_overload_p PARAMS ((tree)); -extern int cp_auto_var_in_fn_p PARAMS ((tree,tree)); -extern tree cp_copy_res_decl_for_inlining PARAMS ((tree, tree, tree, void*, - int*, tree)); -extern int cp_start_inlining PARAMS ((tree)); -extern void cp_end_inlining PARAMS ((tree)); +extern int count_trees (tree); +extern int char_type_p (tree); +extern void verify_stmt_tree (tree); +extern tree find_tree (tree, tree); +extern linkage_kind decl_linkage (tree); +extern tree cp_walk_subtrees (tree*, int*, walk_tree_fn, + void*, void*); +extern int cp_cannot_inline_tree_fn (tree*); +extern tree cp_add_pending_fn_decls (void*,tree); +extern int cp_is_overload_p (tree); +extern int cp_auto_var_in_fn_p (tree,tree); +extern tree cp_copy_res_decl_for_inlining (tree, tree, tree, void*, + int*, tree); +extern int cp_start_inlining (tree); +extern void cp_end_inlining (tree); /* in typeck.c */ -extern int string_conv_p PARAMS ((tree, tree, int)); -extern tree cp_truthvalue_conversion PARAMS ((tree)); -extern tree condition_conversion PARAMS ((tree)); -extern tree target_type PARAMS ((tree)); -extern tree require_complete_type PARAMS ((tree)); -extern tree complete_type PARAMS ((tree)); -extern tree complete_type_or_diagnostic PARAMS ((tree, tree, int)); +extern int string_conv_p (tree, tree, int); +extern tree cp_truthvalue_conversion (tree); +extern tree condition_conversion (tree); +extern tree target_type (tree); +extern tree require_complete_type (tree); +extern tree complete_type (tree); +extern tree complete_type_or_diagnostic (tree, tree, int); #define complete_type_or_else(T,V) (complete_type_or_diagnostic ((T), (V), 0)) -extern int type_unknown_p PARAMS ((tree)); -extern tree commonparms PARAMS ((tree, tree)); -extern tree original_type PARAMS ((tree)); -extern int comp_except_specs PARAMS ((tree, tree, int)); -extern int comptypes PARAMS ((tree, tree, int)); -extern int comp_target_types PARAMS ((tree, tree, int)); -extern int compparms PARAMS ((tree, tree)); -extern int comp_cv_qualification PARAMS ((tree, tree)); -extern int comp_cv_qual_signature PARAMS ((tree, tree)); -extern tree expr_sizeof PARAMS ((tree)); -extern tree cxx_sizeof_or_alignof_type PARAMS ((tree, enum tree_code, int)); +extern int type_unknown_p (tree); +extern tree commonparms (tree, tree); +extern tree original_type (tree); +extern int comp_except_specs (tree, tree, int); +extern int comptypes (tree, tree, int); +extern int comp_target_types (tree, tree, int); +extern int compparms (tree, tree); +extern int comp_cv_qualification (tree, tree); +extern int comp_cv_qual_signature (tree, tree); +extern tree expr_sizeof (tree); +extern tree cxx_sizeof_or_alignof_type (tree, enum tree_code, int); #define cxx_sizeof_nowarn(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, false) -extern tree inline_conversion PARAMS ((tree)); -extern tree decay_conversion PARAMS ((tree)); +extern tree inline_conversion (tree); +extern tree decay_conversion (tree); extern tree build_class_member_access_expr (tree, tree, tree, bool); extern tree finish_class_member_access_expr (tree, tree); -extern tree build_x_indirect_ref PARAMS ((tree, const char *)); -extern tree build_indirect_ref PARAMS ((tree, const char *)); -extern tree build_array_ref PARAMS ((tree, tree)); -extern tree get_member_function_from_ptrfunc PARAMS ((tree *, tree)); -extern tree build_function_call_real PARAMS ((tree, tree, int, int)); -extern tree build_function_call_maybe PARAMS ((tree, tree)); -extern tree convert_arguments PARAMS ((tree, tree, tree, int)); -extern tree build_x_binary_op PARAMS ((enum tree_code, tree, tree)); -extern tree build_x_unary_op PARAMS ((enum tree_code, tree)); -extern tree unary_complex_lvalue PARAMS ((enum tree_code, tree)); -extern tree build_x_conditional_expr PARAMS ((tree, tree, tree)); -extern tree build_x_compound_expr PARAMS ((tree)); -extern tree build_compound_expr PARAMS ((tree)); -extern tree build_static_cast PARAMS ((tree, tree)); -extern tree build_reinterpret_cast PARAMS ((tree, tree)); -extern tree build_const_cast PARAMS ((tree, tree)); -extern tree build_c_cast PARAMS ((tree, tree)); -extern tree build_x_modify_expr PARAMS ((tree, enum tree_code, tree)); -extern tree build_modify_expr PARAMS ((tree, enum tree_code, tree)); -extern tree dubious_conversion_warnings PARAMS ((tree, tree, const char *, tree, int)); -extern tree convert_for_initialization PARAMS ((tree, tree, tree, int, const char *, tree, int)); -extern int comp_ptr_ttypes PARAMS ((tree, tree)); -extern int ptr_reasonably_similar PARAMS ((tree, tree)); -extern tree build_ptrmemfunc PARAMS ((tree, tree, int)); -extern int cp_type_quals PARAMS ((tree)); -extern int cp_has_mutable_p PARAMS ((tree)); -extern int at_least_as_qualified_p PARAMS ((tree, tree)); -extern int more_qualified_p PARAMS ((tree, tree)); -extern tree build_ptrmemfunc1 PARAMS ((tree, tree, tree)); -extern void expand_ptrmemfunc_cst PARAMS ((tree, tree *, tree *)); -extern tree pfn_from_ptrmemfunc PARAMS ((tree)); -extern tree type_after_usual_arithmetic_conversions PARAMS ((tree, tree)); -extern tree composite_pointer_type PARAMS ((tree, tree, tree, tree, - const char*)); -extern tree merge_types PARAMS ((tree, tree)); -extern tree check_return_expr PARAMS ((tree)); +extern tree build_x_indirect_ref (tree, const char *); +extern tree build_indirect_ref (tree, const char *); +extern tree build_array_ref (tree, tree); +extern tree get_member_function_from_ptrfunc (tree *, tree); +extern tree build_function_call_real (tree, tree, int, int); +extern tree build_function_call_maybe (tree, tree); +extern tree convert_arguments (tree, tree, tree, int); +extern tree build_x_binary_op (enum tree_code, tree, tree); +extern tree build_x_unary_op (enum tree_code, tree); +extern tree unary_complex_lvalue (enum tree_code, tree); +extern tree build_x_conditional_expr (tree, tree, tree); +extern tree build_x_compound_expr (tree); +extern tree build_compound_expr (tree); +extern tree build_static_cast (tree, tree); +extern tree build_reinterpret_cast (tree, tree); +extern tree build_const_cast (tree, tree); +extern tree build_c_cast (tree, tree); +extern tree build_x_modify_expr (tree, enum tree_code, tree); +extern tree build_modify_expr (tree, enum tree_code, tree); +extern tree dubious_conversion_warnings (tree, tree, const char *, tree, int); +extern tree convert_for_initialization (tree, tree, tree, int, const char *, tree, int); +extern int comp_ptr_ttypes (tree, tree); +extern int ptr_reasonably_similar (tree, tree); +extern tree build_ptrmemfunc (tree, tree, int); +extern int cp_type_quals (tree); +extern int cp_has_mutable_p (tree); +extern int at_least_as_qualified_p (tree, tree); +extern int more_qualified_p (tree, tree); +extern tree build_ptrmemfunc1 (tree, tree, tree); +extern void expand_ptrmemfunc_cst (tree, tree *, tree *); +extern tree pfn_from_ptrmemfunc (tree); +extern tree type_after_usual_arithmetic_conversions (tree, tree); +extern tree composite_pointer_type (tree, tree, tree, tree, + const char*); +extern tree merge_types (tree, tree); +extern tree check_return_expr (tree); #define cp_build_binary_op(code, arg1, arg2) \ build_binary_op(code, arg1, arg2, 1) #define cxx_sizeof(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, true) @@ -4386,44 +4386,44 @@ extern tree build_ptrmemfunc_access_expr (tree, tree); /* in typeck2.c */ -extern void require_complete_eh_spec_types PARAMS ((tree, tree)); -extern void cxx_incomplete_type_diagnostic PARAMS ((tree, tree, int)); +extern void require_complete_eh_spec_types (tree, tree); +extern void cxx_incomplete_type_diagnostic (tree, tree, int); #undef cxx_incomplete_type_error -extern void cxx_incomplete_type_error PARAMS ((tree, tree)); +extern void cxx_incomplete_type_error (tree, tree); #define cxx_incomplete_type_error(V,T) \ (cxx_incomplete_type_diagnostic ((V), (T), 0)) -extern tree error_not_base_type PARAMS ((tree, tree)); -extern tree binfo_or_else PARAMS ((tree, tree)); -extern void readonly_error PARAMS ((tree, const char *, int)); -extern int abstract_virtuals_error PARAMS ((tree, tree)); - -extern tree store_init_value PARAMS ((tree, tree)); -extern tree digest_init PARAMS ((tree, tree, tree *)); -extern tree build_scoped_ref PARAMS ((tree, tree, tree *)); -extern tree build_x_arrow PARAMS ((tree)); -extern tree build_m_component_ref PARAMS ((tree, tree)); -extern tree build_functional_cast PARAMS ((tree, tree)); -extern void check_for_new_type PARAMS ((const char *, flagged_type_tree)); -extern tree add_exception_specifier PARAMS ((tree, tree, int)); -extern tree merge_exception_specifiers PARAMS ((tree, tree)); +extern tree error_not_base_type (tree, tree); +extern tree binfo_or_else (tree, tree); +extern void readonly_error (tree, const char *, int); +extern int abstract_virtuals_error (tree, tree); + +extern tree store_init_value (tree, tree); +extern tree digest_init (tree, tree, tree *); +extern tree build_scoped_ref (tree, tree, tree *); +extern tree build_x_arrow (tree); +extern tree build_m_component_ref (tree, tree); +extern tree build_functional_cast (tree, tree); +extern void check_for_new_type (const char *, flagged_type_tree); +extern tree add_exception_specifier (tree, tree, int); +extern tree merge_exception_specifiers (tree, tree); /* in mangle.c */ -extern void init_mangle PARAMS ((void)); -extern void mangle_decl PARAMS ((tree)); -extern const char *mangle_type_string PARAMS ((tree)); -extern tree mangle_type PARAMS ((tree)); -extern tree mangle_typeinfo_for_type PARAMS ((tree)); -extern tree mangle_typeinfo_string_for_type PARAMS ((tree)); -extern tree mangle_vtbl_for_type PARAMS ((tree)); -extern tree mangle_vtt_for_type PARAMS ((tree)); -extern tree mangle_ctor_vtbl_for_type PARAMS ((tree, tree)); -extern tree mangle_thunk PARAMS ((tree, int, tree, tree)); -extern tree mangle_conv_op_name_for_type PARAMS ((tree)); -extern tree mangle_guard_variable PARAMS ((tree)); -extern tree mangle_ref_init_variable PARAMS ((tree)); +extern void init_mangle (void); +extern void mangle_decl (tree); +extern const char *mangle_type_string (tree); +extern tree mangle_type (tree); +extern tree mangle_typeinfo_for_type (tree); +extern tree mangle_typeinfo_string_for_type (tree); +extern tree mangle_vtbl_for_type (tree); +extern tree mangle_vtt_for_type (tree); +extern tree mangle_ctor_vtbl_for_type (tree, tree); +extern tree mangle_thunk (tree, int, tree, tree); +extern tree mangle_conv_op_name_for_type (tree); +extern tree mangle_guard_variable (tree); +extern tree mangle_ref_init_variable (tree); /* in dump.c */ -extern int cp_dump_tree PARAMS ((void *, tree)); +extern int cp_dump_tree (void *, tree); /* -- end of C++ */ From gcc-patches-return-75296-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:08:18 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28728 invoked by alias); 9 Jan 2003 01:08:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28663 invoked from network); 9 Jan 2003 01:07:52 -0000 Received: from unknown (HELO vortex.ticam.utexas.edu) (128.83.68.102) by 209.249.29.67 with SMTP; 9 Jan 2003 01:07:52 -0000 Received: from gandalf.ticam.utexas.edu (IDENT:fcg4PbN2Wh46HlTze32MIgQ7JrT/dFT6@gandalf.ticam.utexas.edu [128.83.68.35]) by vortex.ticam.utexas.edu (8.12.6/8.12.6) with ESMTP id h0917cFZ016177; Wed, 8 Jan 2003 19:07:38 -0600 Date: Wed, 8 Jan 2003 19:07:38 -0600 (CST) From: Wolfgang Bangerth To: gcc-patches@gcc.gnu.org cc: jason@redhat.com, Subject: Re: [C++ PATCH] Improve enum handling Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII jason wrote: > I would think that you could also defer setting the type of the enumerator > values until template instantiation time; rather than move it into the big > loop, just swap it with the if (processing_template_decl) bit. This message tricked me into thinking of something like this: --------------- template struct X { enum I { i=N; }; }; --------------- While it does not compile presently (although I believe it should, PR9236), this is a case where the type of the enumerator can only be detected at instantiation time, right? So maybe it is not only possible, but even necessary. Wolfgang ------------------------------------------------------------------------- Wolfgang Bangerth email: bangerth@ticam.utexas.edu www: http://www.ticam.utexas.edu/~bangerth/ From gcc-patches-return-75297-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:40:38 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 4763 invoked by alias); 9 Jan 2003 01:40:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4753 invoked from network); 9 Jan 2003 01:40:35 -0000 Received: from unknown (HELO brown.csi.cam.ac.uk) (131.111.8.14) by 209.249.29.67 with SMTP; 9 Jan 2003 01:40:35 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by brown.csi.cam.ac.uk with esmtp (Exim 4.10) id 18WRgF-00087I-00; Thu, 09 Jan 2003 01:40:23 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18WRgF-0002gg-00; Thu, 09 Jan 2003 01:40:23 +0000 Date: Thu, 9 Jan 2003 01:40:20 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: Nathanael Nerode cc: Subject: Re: ANSIfy cp/cp-tree.h In-Reply-To: <20030109010130.GA13445@doctormoo> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 Jan 2003, Nathanael Nerode wrote: > Survived bootstrap on i686-pc-linux-gnu. > > * cp-tree.h: ANSIfy function declarations. Note that PARAMS removal (though not other ISO C conversion) may be checked in under the "obvious rule". http://gcc.gnu.org/ml/gcc/2002-06/msg00871.html (http://gcc.gnu.org/ml/gcc/2002-06/msg00959.html lists other types of ISO C conversion that do need patch review.) -- Joseph S. Myers jsm28@cam.ac.uk From gcc-patches-return-75298-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:53:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8173 invoked by alias); 9 Jan 2003 01:53:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8153 invoked from network); 9 Jan 2003 01:53:30 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 9 Jan 2003 01:53:30 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h091rKi26453; Wed, 8 Jan 2003 20:53:20 -0500 Date: Wed, 8 Jan 2003 20:53:20 -0500 (EST) From: Jeff Sturm To: David Edelsohn cc: gcc-patches@gcc.gnu.org Subject: Re: Fix target/9210 In-Reply-To: <200301081916.OAA31626@makai.watson.ibm.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 Jan 2003, David Edelsohn wrote: > 2003-01-08 Jeff Sturm > > PR target/9210 > * config/rs6000/rs6000.c (rs6000_elf_encode_section_info): > Set SYMBOL_REF_FLAG on local data sym_ref. > > Yes, this patch is okay for both the trunk and the 3.3 branch. Please > reference the PR in the ChangeLog entry using the standard format as > above. Done. Jeff From gcc-patches-return-75299-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 01:53:54 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8553 invoked by alias); 9 Jan 2003 01:53:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8546 invoked from network); 9 Jan 2003 01:53:53 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 01:53:53 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h091mr131001 for ; Wed, 8 Jan 2003 20:48:53 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h091rfn32640; Wed, 8 Jan 2003 20:53:41 -0500 Received: from dhcp-172-16-25-153.sfbay.redhat.com (dhcp-172-16-25-153.sfbay.redhat.com [172.16.25.153]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h091reE15446; Wed, 8 Jan 2003 17:53:40 -0800 Subject: Re: Patch for mips reg_or_0_operand predicates From: Eric Christopher To: Richard Sandiford Cc: gcc-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 08 Jan 2003 17:48:07 -0800 Message-Id: <1042076887.27191.133.camel@ghostwheel.ges.redhat.com> Mime-Version: 1.0 On Wed, 2003-01-08 at 12:50, Richard Sandiford wrote: > se_reg_or_0_operand wasn't matching ADDRESSOF, causing an > ICE on the test case below with EABI64. > > Patch tested on mips64vrel-elf. OK to install? > OK. -eric -- Yeah, I used to play basketball... From gcc-patches-return-75300-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:05:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29910 invoked by alias); 9 Jan 2003 02:05:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29899 invoked from network); 9 Jan 2003 02:05:51 -0000 Received: from unknown (HELO piper.synopsys.com) (146.225.1.217) by 209.249.29.67 with SMTP; 9 Jan 2003 02:05:51 -0000 Received: (from jbuck@localhost) by piper.synopsys.com (8.11.6/8.11.6) id h0925eh21074 for gcc-patches@gcc.gnu.org; Wed, 8 Jan 2003 18:05:40 -0800 Date: Wed, 8 Jan 2003 18:05:40 -0800 From: Joe Buck To: gcc-patches@gcc.gnu.org Subject: correct dates in develop.html Message-ID: <20030108180540.A21055@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i The following patch brings http://gcc.gnu.org/develop.html into alignment with reality. I'll need someone else to apply the patch, for political reasons I don't have write permission, except in GNATS. Also, it's unclear whether the currently listed GCC 3.3 release date (Feb 15) is realistic, but that's another matter. Index: develop.html =================================================================== RCS file: /cvsroot/gcc/wwwdocs/htdocs/develop.html,v retrieving revision 1.25 diff -u -r1.25 develop.html --- develop.html 6 Jan 2003 23:04:14 -0000 1.25 +++ develop.html 9 Jan 2003 02:01:09 -0000 @@ -247,7 +247,7 @@ v GCC 3.1 release (May 15 2002) GCC 3.2 Stage 1 (ends Jun 15 2002) \ | v - | GCC 3.1.1 release (Jul 21 2002) + | GCC 3.1.1 release (Jul 25 2002) | \ v v New development plan announced Branch renamed to GCC 3.2 to @@ -256,13 +256,13 @@ | GCC 3.1, see release info) | \ | v - | GCC 3.2 release (Jul 23 2002) + | GCC 3.2 release (Aug 14 2002) | \ | v - | GCC 3.2.1 release (Oct 15 2002) + | GCC 3.2.1 release (Nov 19 2002) | \ | v - | GCC 3.2.2 release (...) + | GCC 3.2.2 release (not yet scheduled) v GCC 3.3 Stage 2 (ends Aug 15 2002) | From gcc-patches-return-75301-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:26:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25848 invoked by alias); 9 Jan 2003 02:26:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25826 invoked from network); 9 Jan 2003 02:26:52 -0000 Received: from unknown (HELO mailout5-0.nyroc.rr.com) (24.92.226.122) by 209.249.29.67 with SMTP; 9 Jan 2003 02:26:52 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout5-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h092QcF14258 for ; Wed, 8 Jan 2003 21:26:38 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WSNY-0004Y0-00 for ; Wed, 08 Jan 2003 21:25:08 -0500 Date: Wed, 8 Jan 2003 21:25:08 -0500 To: gcc-patches@gcc.gnu.org Subject: Re: ANSIfy cp/cp-tree.h Message-ID: <20030109022508.GA16964@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Joseph S. Myers wrote: >Note that PARAMS removal (though not other ISO C conversion) may be >checked in under the "obvious rule". My patches also convert to new-style function definitions. (Though that's the only other thing they do.) So I was erring on the safe side. --Nathanael From gcc-patches-return-75302-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:36:13 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1145 invoked by alias); 9 Jan 2003 02:36:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1072 invoked from network); 9 Jan 2003 02:36:11 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 02:36:11 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h092VB104708; Wed, 8 Jan 2003 21:31:11 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h092Zxn05095; Wed, 8 Jan 2003 21:35:59 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h092ZxE24022; Wed, 8 Jan 2003 18:35:59 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h092Zw503442; Wed, 8 Jan 2003 18:35:58 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 18:35:58 -0800 From: Richard Henderson To: Danny Smith Cc: GCC Patches Subject: Re: Unreviewed patch for PR8750, 9185 [i386, mingw32, cygwin] Message-ID: <20030109023558.GA3100@redhat.com> Mail-Followup-To: Richard Henderson , Danny Smith , GCC Patches References: <20030108231554.2743.qmail@web21407.mail.yahoo.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030108231554.2743.qmail@web21407.mail.yahoo.com> User-Agent: Mutt/1.4i On Thu, Jan 09, 2003 at 10:15:54AM +1100, Danny Smith wrote: > I would be grateful if someone could review this patch from last month. > http://gcc.gnu.org/ml/gcc-patches/2002-12/msg01040.html Applied to 3.3 and mainline. r~ From gcc-patches-return-75303-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:38:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14220 invoked by alias); 9 Jan 2003 02:38:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14175 invoked from network); 9 Jan 2003 02:38:36 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 02:38:36 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h092XZ105010; Wed, 8 Jan 2003 21:33:35 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h092cNn05337; Wed, 8 Jan 2003 21:38:24 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h092cNE24475; Wed, 8 Jan 2003 18:38:23 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h092cNw03456; Wed, 8 Jan 2003 18:38:23 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 18:38:23 -0800 From: Richard Henderson To: Andreas Schwab Cc: gcc-patches@gcc.gnu.org Subject: Re: PR9226 Message-ID: <20030109023823.GB3100@redhat.com> Mail-Followup-To: Richard Henderson , Andreas Schwab , gcc-patches@gcc.gnu.org References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Wed, Jan 08, 2003 at 05:41:46PM +0100, Andreas Schwab wrote: > In optimization/9226 GCSE is replacing the stack pointer register by a > pseudo reg that happens to contain the same value. Shouldn't there be a > check in do_local_cprop that the register to be replaced is not a fixed > register? This is not the real problem. The real problem is that we don't notice the pre_dec. r~ From gcc-patches-return-75304-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:51:41 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 21594 invoked by alias); 9 Jan 2003 02:51:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21586 invoked from network); 9 Jan 2003 02:51:39 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 02:51:39 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h092kc106582; Wed, 8 Jan 2003 21:46:38 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h092pRn06604; Wed, 8 Jan 2003 21:51:27 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h092pQE26740; Wed, 8 Jan 2003 18:51:27 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h092pQQ03571; Wed, 8 Jan 2003 18:51:26 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 18:51:26 -0800 From: Richard Henderson To: Joern Rennecke Cc: gcc-patches@gcc.gnu.org Subject: Re: RFA: constraint strings (Was: RFD: constraint letter suffixes) Message-ID: <20030109025126.GC3100@redhat.com> Mail-Followup-To: Richard Henderson , Joern Rennecke , gcc-patches@gcc.gnu.org References: <3E1B3AC3.FD801AB7@superh.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E1B3AC3.FD801AB7@superh.com> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 08:38:27PM +0000, Joern Rennecke wrote: > * defaults.h (EXTRA_MEMORY_CONSTRAINT): Add STR argument. > (EXTRA_ADDRESS_CONSTRAINT): Likewise. > (CONSTRAINT_LEN): Provide default definition. > (CONST_OK_FOR_CONSTRAINT_P): Likewise. > (CONST_DOUBLE_OK_FOR_CONSTRAINT_P): Likewise. > (EXTRA_CONSTRAINT_STR): Likewise. > (REG_CLASS_FROM_CONSTRAINT): Define. > * genoutput.c (check_constraint_len, constraint_len): New functions. > (validate_insn_alternatives): Check CONSTRAINT_LEN for each > constraint / modifier. > (gen_insn): Call check_constraint_len. > * local-alloc.c (block_alloc): Update to use new macros / pass > second argument to EXTRA_{MEMORY,ADDRESS}_CONSTRAINT. > * ra-build.c (handle_asm_insn): Likewise. > * recog.c (asm_operand_ok, preprocess_constraints): Likewise. > (constrain_operands, peep2_find_free_register): Likewise. > * regclass.c (record_operand_costs, record_reg_classes): Likewise. > * regmove.c (find_matches): Likewise. > * reload.c (push_secondary_reload, find_reloads): Likewise. > (alternative_allows_memconst): Likewise. > * reload1.c (maybe_fix_stack_asms): Likewise. > (reload_cse_simplify_operands): Likewise. > * stmt.c (parse_output_constraint, parse_input_constraint): Likewise. > * doc/tm.texi (CONSTRAINT_LEN, REG_CLASS_FROM_CONSTRAINT): Document. > (CONST_OK_FOR_CONSTRAINT_P): Likewise. > (CONST_DOUBLE_OK_FOR_CONSTRAINT_P, EXTRA_CONSTRAINT_STR): Likewise. > (EXTRA_MEMORY_CONSTRAINT, EXTRA_ADDRESS_CONSTRAINT): Add STR argument. > * config/s390/s390.h (EXTRA_MEMORY_CONSTRAINT): Likewise. Ok. r~ From gcc-patches-return-75305-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:52:57 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 22066 invoked by alias); 9 Jan 2003 02:52:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22058 invoked from network); 9 Jan 2003 02:52:56 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 02:52:56 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h092lm106681; Wed, 8 Jan 2003 21:47:48 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h092qan06696; Wed, 8 Jan 2003 21:52:36 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h092qZE26951; Wed, 8 Jan 2003 18:52:35 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h092qYM03595; Wed, 8 Jan 2003 18:52:34 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 18:52:34 -0800 From: Richard Henderson To: Jan Hubicka Cc: Joel Sherrill , gcc-patches@gcc.gnu.org, Matthias Klose , Andreas Schwab Subject: Re: PR 8343 and and PR 9201 Message-ID: <20030109025234.GD3100@redhat.com> Mail-Followup-To: Richard Henderson , Jan Hubicka , Joel Sherrill , gcc-patches@gcc.gnu.org, Matthias Klose , Andreas Schwab References: <15898.36917.770.413581@gargle.gargle.HOWL> <3E1AEF57.1005B414@OARcorp.com> <20030107153017.GE27778@kam.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030107153017.GE27778@kam.mff.cuni.cz> User-Agent: Mutt/1.4i On Tue, Jan 07, 2003 at 04:30:17PM +0100, Jan Hubicka wrote: > PR target/8343 > * m68k.md (umulsidi, mulsidi expanders): Use register operand. Ok. r~ From gcc-patches-return-75306-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 02:57:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10226 invoked by alias); 9 Jan 2003 02:57:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10216 invoked from network); 9 Jan 2003 02:57:48 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 02:57:48 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h092ql107169; Wed, 8 Jan 2003 21:52:47 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h092van07078; Wed, 8 Jan 2003 21:57:36 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h092vZE27753; Wed, 8 Jan 2003 18:57:35 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h092vZX03645; Wed, 8 Jan 2003 18:57:35 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 18:57:35 -0800 From: Richard Henderson To: Josef Zlomek Cc: gcc-patches@gcc.gnu.org Subject: Re: Fix latent bug in optabs Message-ID: <20030109025735.GE3100@redhat.com> Mail-Followup-To: Richard Henderson , Josef Zlomek , gcc-patches@gcc.gnu.org References: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> User-Agent: Mutt/1.4i On Sun, Jan 05, 2003 at 04:18:05PM +0100, Josef Zlomek wrote: > * Makefile.in (optabs.o): Add dependencies on basic-block.h and > hard-reg-set.h. > * basic-block.h (control_flow_insn_p): Fuction was exported. > * cfgbuild.c (control_flow_insn_p): Fuction was made non-static. > * optabs.c (emit_libcall_block): Emit REG_LIBCALL and REG_RETVAL > notes only when the region is contained in a single basic block. Ok. r~ From gcc-patches-return-75307-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:05:32 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 12997 invoked by alias); 9 Jan 2003 03:05:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12986 invoked from network); 9 Jan 2003 03:05:27 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.125) by 209.249.29.67 with SMTP; 9 Jan 2003 03:05:27 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h0935Ck08442 for ; Wed, 8 Jan 2003 22:05:12 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18WSys-0008BG-00 for ; Wed, 08 Jan 2003 22:03:42 -0500 Date: Wed, 8 Jan 2003 22:03:42 -0500 To: gcc-patches@gcc.gnu.org Subject: ANSIfy cp/parser.c Message-ID: <20030109030342.GA20609@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Bootstrapped on i686-pc-linux-gnu. OK to commit? I'm doing these one file at a time because they're *huge* (and because I have to do most of it by hand). I'm asking for approval because the ANSIfication of the function defintions (the way formal parameters are specified) doesn't appear to fall under the 'obvious' rule. If someone says it does, I'll start putting these in as soon as they bootstrap. :-) * parser.c: ANSIfy function declarations and definitions. Index: parser.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/parser.c,v retrieving revision 1.23 diff -u -r1.23 parser.c --- parser.c 8 Jan 2003 20:00:17 -0000 1.23 +++ parser.c 9 Jan 2003 02:28:18 -0000 @@ -214,53 +214,53 @@ /* Prototypes. */ static cp_lexer *cp_lexer_new - PARAMS ((bool)); + (bool); static cp_lexer *cp_lexer_new_from_tokens - PARAMS ((struct cp_token_cache *)); + (struct cp_token_cache *); static int cp_lexer_saving_tokens - PARAMS ((const cp_lexer *)); + (const cp_lexer *); static cp_token *cp_lexer_next_token - PARAMS ((cp_lexer *, cp_token *)); -static ptrdiff_t cp_lexer_token_difference - PARAMS ((cp_lexer *, cp_token *, cp_token *)); + (cp_lexer *, cp_token *); +static ptrdiff_t cp_lexer_token_difference + (cp_lexer *, cp_token *, cp_token *); static cp_token *cp_lexer_read_token - PARAMS ((cp_lexer *)); + (cp_lexer *); static void cp_lexer_maybe_grow_buffer - PARAMS ((cp_lexer *)); + (cp_lexer *); static void cp_lexer_get_preprocessor_token - PARAMS ((cp_lexer *, cp_token *)); + (cp_lexer *, cp_token *); static cp_token *cp_lexer_peek_token - PARAMS ((cp_lexer *)); + (cp_lexer *); static cp_token *cp_lexer_peek_nth_token - PARAMS ((cp_lexer *, size_t)); + (cp_lexer *, size_t); static inline bool cp_lexer_next_token_is - PARAMS ((cp_lexer *, enum cpp_ttype)); + (cp_lexer *, enum cpp_ttype); static bool cp_lexer_next_token_is_not - PARAMS ((cp_lexer *, enum cpp_ttype)); + (cp_lexer *, enum cpp_ttype); static bool cp_lexer_next_token_is_keyword - PARAMS ((cp_lexer *, enum rid)); -static cp_token *cp_lexer_consume_token - PARAMS ((cp_lexer *)); + (cp_lexer *, enum rid); +static cp_token *cp_lexer_consume_token + (cp_lexer *); static void cp_lexer_purge_token (cp_lexer *); static void cp_lexer_purge_tokens_after (cp_lexer *, cp_token *); static void cp_lexer_save_tokens - PARAMS ((cp_lexer *)); + (cp_lexer *); static void cp_lexer_commit_tokens - PARAMS ((cp_lexer *)); + (cp_lexer *); static void cp_lexer_rollback_tokens - PARAMS ((cp_lexer *)); + (cp_lexer *); static inline void cp_lexer_set_source_position_from_token - PARAMS ((cp_lexer *, const cp_token *)); + (cp_lexer *, const cp_token *); static void cp_lexer_print_token - PARAMS ((FILE *, cp_token *)); + (FILE *, cp_token *); static inline bool cp_lexer_debugging_p - PARAMS ((cp_lexer *)); + (cp_lexer *); static void cp_lexer_start_debugging - PARAMS ((cp_lexer *)) ATTRIBUTE_UNUSED; + (cp_lexer *) ATTRIBUTE_UNUSED; static void cp_lexer_stop_debugging - PARAMS ((cp_lexer *)) ATTRIBUTE_UNUSED; + (cp_lexer *) ATTRIBUTE_UNUSED; /* Manifest constants. */ @@ -380,9 +380,8 @@ TOKEN. */ static inline void -cp_lexer_set_source_position_from_token (lexer, token) - cp_lexer *lexer ATTRIBUTE_UNUSED; - const cp_token *token; +cp_lexer_set_source_position_from_token (cp_lexer *lexer ATTRIBUTE_UNUSED , + const cp_token *token) { /* Ideally, the source position information would not be a global variable, but it is. */ @@ -399,9 +398,7 @@ the next token in the buffer. */ static inline cp_token * -cp_lexer_next_token (lexer, token) - cp_lexer *lexer; - cp_token *token; +cp_lexer_next_token (cp_lexer* lexer, cp_token* token) { token++; if (token == lexer->buffer_end) @@ -412,8 +409,7 @@ /* Non-zero if we are presently saving tokens. */ static int -cp_lexer_saving_tokens (lexer) - const cp_lexer *lexer; +cp_lexer_saving_tokens (const cp_lexer* lexer) { return VARRAY_ACTIVE_SIZE (lexer->saved_tokens) != 0; } @@ -434,10 +430,7 @@ to reach FINISH. If START and FINISH are the same, returns zero. */ static ptrdiff_t -cp_lexer_token_difference (lexer, start, finish) - cp_lexer *lexer; - cp_token *start; - cp_token *finish; +cp_lexer_token_difference (cp_lexer* lexer, cp_token* start, cp_token* finish) { if (finish >= start) return finish - start; @@ -450,8 +443,7 @@ token buffer. Returns the newly read token. */ static cp_token * -cp_lexer_read_token (lexer) - cp_lexer *lexer; +cp_lexer_read_token (cp_lexer* lexer) { cp_token *token; @@ -542,8 +534,7 @@ /* If the circular buffer is full, make it bigger. */ static void -cp_lexer_maybe_grow_buffer (lexer) - cp_lexer *lexer; +cp_lexer_maybe_grow_buffer (cp_lexer* lexer) { /* If the buffer is full, enlarge it. */ if (lexer->last_token == lexer->first_token) @@ -603,9 +594,8 @@ /* Store the next token from the preprocessor in *TOKEN. */ static void -cp_lexer_get_preprocessor_token (lexer, token) - cp_lexer *lexer ATTRIBUTE_UNUSED; - cp_token *token; +cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED , + cp_token *token) { bool done; @@ -672,8 +662,7 @@ consume it. */ static cp_token * -cp_lexer_peek_token (lexer) - cp_lexer *lexer; +cp_lexer_peek_token (cp_lexer* lexer) { cp_token *token; @@ -697,9 +686,7 @@ /* Return true if the next token has the indicated TYPE. */ static bool -cp_lexer_next_token_is (lexer, type) - cp_lexer *lexer; - enum cpp_ttype type; +cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type) { cp_token *token; @@ -712,9 +699,7 @@ /* Return true if the next token does not have the indicated TYPE. */ static bool -cp_lexer_next_token_is_not (lexer, type) - cp_lexer *lexer; - enum cpp_ttype type; +cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type) { return !cp_lexer_next_token_is (lexer, type); } @@ -722,9 +707,7 @@ /* Return true if the next token is the indicated KEYWORD. */ static bool -cp_lexer_next_token_is_keyword (lexer, keyword) - cp_lexer *lexer; - enum rid keyword; +cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword) { cp_token *token; @@ -738,9 +721,7 @@ then this is precisely equivalent to cp_lexer_peek_token. */ static cp_token * -cp_lexer_peek_nth_token (lexer, n) - cp_lexer *lexer; - size_t n; +cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n) { cp_token *token; @@ -775,8 +756,7 @@ time. */ static cp_token * -cp_lexer_consume_token (lexer) - cp_lexer *lexer; +cp_lexer_consume_token (cp_lexer* lexer) { cp_token *token; @@ -883,8 +863,7 @@ preserved. */ static void -cp_lexer_save_tokens (lexer) - cp_lexer *lexer; +cp_lexer_save_tokens (cp_lexer* lexer) { /* Provide debugging output. */ if (cp_lexer_debugging_p (lexer)) @@ -904,8 +883,7 @@ /* Commit to the portion of the token stream most recently saved. */ static void -cp_lexer_commit_tokens (lexer) - cp_lexer *lexer; +cp_lexer_commit_tokens (cp_lexer* lexer) { /* Provide debugging output. */ if (cp_lexer_debugging_p (lexer)) @@ -918,8 +896,7 @@ to the token stream. Stop saving tokens. */ static void -cp_lexer_rollback_tokens (lexer) - cp_lexer *lexer; +cp_lexer_rollback_tokens (cp_lexer* lexer) { size_t delta; @@ -946,9 +923,7 @@ /* Print a representation of the TOKEN on the STREAM. */ static void -cp_lexer_print_token (stream, token) - FILE *stream; - cp_token *token; +cp_lexer_print_token (FILE * stream, cp_token* token) { const char *token_type = NULL; @@ -1018,8 +993,7 @@ /* Start emitting debugging information. */ static void -cp_lexer_start_debugging (lexer) - cp_lexer *lexer; +cp_lexer_start_debugging (cp_lexer* lexer) { ++lexer->debugging_p; } @@ -1027,8 +1001,7 @@ /* Stop emitting debugging information. */ static void -cp_lexer_stop_debugging (lexer) - cp_lexer *lexer; +cp_lexer_stop_debugging (cp_lexer* lexer) { --lexer->debugging_p; } @@ -1205,7 +1178,7 @@ /* Constructors and destructors. */ static cp_parser_context *cp_parser_context_new - PARAMS ((cp_parser_context *)); + (cp_parser_context *); /* Class variables. */ @@ -1217,8 +1190,7 @@ is given by NEXT. */ static cp_parser_context * -cp_parser_context_new (next) - cp_parser_context *next; +cp_parser_context_new (cp_parser_context* next) { cp_parser_context *context; @@ -1356,14 +1328,14 @@ } cp_parser; /* The type of a function that parses some kind of expression */ -typedef tree (*cp_parser_expression_fn) PARAMS ((cp_parser *)); +typedef tree (*cp_parser_expression_fn) (cp_parser *); /* Prototypes. */ /* Constructors and destructors. */ static cp_parser *cp_parser_new - PARAMS ((void)); + (void); /* Routines to parse various constructs. @@ -1380,21 +1352,21 @@ /* Lexical conventions [gram.lex] */ static tree cp_parser_identifier - PARAMS ((cp_parser *)); + (cp_parser *); /* Basic concepts [gram.basic] */ static bool cp_parser_translation_unit - PARAMS ((cp_parser *)); + (cp_parser *); /* Expressions [gram.expr] */ static tree cp_parser_primary_expression (cp_parser *, cp_parser_id_kind *, tree *); static tree cp_parser_id_expression - PARAMS ((cp_parser *, bool, bool, bool *)); + (cp_parser *, bool, bool, bool *); static tree cp_parser_unqualified_id - PARAMS ((cp_parser *, bool, bool)); + (cp_parser *, bool, bool); static tree cp_parser_nested_name_specifier_opt (cp_parser *, bool, bool, bool); static tree cp_parser_nested_name_specifier @@ -1404,179 +1376,179 @@ static tree cp_parser_postfix_expression (cp_parser *, bool); static tree cp_parser_expression_list - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_pseudo_destructor_name - PARAMS ((cp_parser *, tree *, tree *)); + (cp_parser *, tree *, tree *); static tree cp_parser_unary_expression (cp_parser *, bool); static enum tree_code cp_parser_unary_operator - PARAMS ((cp_token *)); + (cp_token *); static tree cp_parser_new_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_new_placement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_new_type_id - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_new_declarator_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_direct_new_declarator - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_new_initializer - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_delete_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_cast_expression (cp_parser *, bool); static tree cp_parser_pm_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_multiplicative_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_additive_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_shift_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_relational_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_equality_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_and_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_exclusive_or_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_inclusive_or_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_logical_and_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_logical_or_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_conditional_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_question_colon_clause - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static tree cp_parser_assignment_expression - PARAMS ((cp_parser *)); + (cp_parser *); static enum tree_code cp_parser_assignment_operator_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_constant_expression - PARAMS ((cp_parser *)); + (cp_parser *); /* Statements [gram.stmt.stmt] */ static void cp_parser_statement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_labeled_statement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_expression_statement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_compound_statement (cp_parser *); static void cp_parser_statement_seq_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_selection_statement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_condition - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_iteration_statement - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_for_init_statement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_jump_statement - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_declaration_statement - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_implicitly_scoped_statement - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_already_scoped_statement - PARAMS ((cp_parser *)); + (cp_parser *); /* Declarations [gram.dcl.dcl] */ static void cp_parser_declaration_seq_opt - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_declaration - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_block_declaration - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static void cp_parser_simple_declaration - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static tree cp_parser_decl_specifier_seq - PARAMS ((cp_parser *, cp_parser_flags, tree *, bool *)); + (cp_parser *, cp_parser_flags, tree *, bool *); static tree cp_parser_storage_class_specifier_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_function_specifier_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_type_specifier - (cp_parser *, cp_parser_flags, bool, bool, bool *, bool *); + (cp_parser *, cp_parser_flags, bool, bool, bool *, bool *); static tree cp_parser_simple_type_specifier - PARAMS ((cp_parser *, cp_parser_flags)); + (cp_parser *, cp_parser_flags); static tree cp_parser_type_name - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_elaborated_type_specifier - PARAMS ((cp_parser *, bool, bool)); + (cp_parser *, bool, bool); static tree cp_parser_enum_specifier - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_enumerator_list - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static void cp_parser_enumerator_definition - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static tree cp_parser_namespace_name - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_namespace_definition - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_namespace_body - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_qualified_namespace_specifier - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_namespace_alias_definition - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_using_declaration - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_using_directive - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_asm_definition - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_linkage_specification - PARAMS ((cp_parser *)); + (cp_parser *); /* Declarators [gram.dcl.decl] */ static tree cp_parser_init_declarator - PARAMS ((cp_parser *, tree, tree, tree, bool, bool, bool *)); + (cp_parser *, tree, tree, tree, bool, bool, bool *); static tree cp_parser_declarator - PARAMS ((cp_parser *, cp_parser_declarator_kind, bool *)); + (cp_parser *, cp_parser_declarator_kind, bool *); static tree cp_parser_direct_declarator - PARAMS ((cp_parser *, cp_parser_declarator_kind, bool *)); + (cp_parser *, cp_parser_declarator_kind, bool *); static enum tree_code cp_parser_ptr_operator - PARAMS ((cp_parser *, tree *, tree *)); + (cp_parser *, tree *, tree *); static tree cp_parser_cv_qualifier_seq_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_cv_qualifier_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_declarator_id - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_type_id - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_type_specifier_seq - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_parameter_declaration_clause - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_parameter_declaration_list - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_parameter_declaration - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static tree cp_parser_function_definition - PARAMS ((cp_parser *, bool *)); + (cp_parser *, bool *); static void cp_parser_function_body (cp_parser *); static tree cp_parser_initializer - PARAMS ((cp_parser *, bool *)); + (cp_parser *, bool *); static tree cp_parser_initializer_clause - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_initializer_list - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_ctor_initializer_opt_and_function_body (cp_parser *); @@ -1586,162 +1558,160 @@ static tree cp_parser_class_name (cp_parser *, bool, bool, bool, bool, bool, bool); static tree cp_parser_class_specifier - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_class_head - PARAMS ((cp_parser *, bool *, bool *, tree *)); + (cp_parser *, bool *, bool *, tree *); static enum tag_types cp_parser_class_key - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_member_specification_opt - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_member_declaration - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_pure_specifier - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_constant_initializer - PARAMS ((cp_parser *)); + (cp_parser *); /* Derived classes [gram.class.derived] */ static tree cp_parser_base_clause - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_base_specifier - PARAMS ((cp_parser *)); + (cp_parser *); /* Special member functions [gram.special] */ static tree cp_parser_conversion_function_id - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_conversion_type_id - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_conversion_declarator_opt - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_ctor_initializer_opt - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_mem_initializer_list - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_mem_initializer - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_mem_initializer_id - PARAMS ((cp_parser *)); + (cp_parser *); /* Overloading [gram.over] */ static tree cp_parser_operator_function_id - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_operator - PARAMS ((cp_parser *)); + (cp_parser *); /* Templates [gram.temp] */ static void cp_parser_template_declaration - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static tree cp_parser_template_parameter_list - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_template_parameter - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_type_parameter - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_template_id - PARAMS ((cp_parser *, bool, bool)); + (cp_parser *, bool, bool); static tree cp_parser_template_name - PARAMS ((cp_parser *, bool, bool)); + (cp_parser *, bool, bool); static tree cp_parser_template_argument_list - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_template_argument - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_explicit_instantiation - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_explicit_specialization - PARAMS ((cp_parser *)); + (cp_parser *); /* Exception handling [gram.exception] */ static tree cp_parser_try_block - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_function_try_block - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_handler_seq - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_handler - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_exception_declaration - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_throw_expression - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_exception_specification_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_type_id_list - PARAMS ((cp_parser *)); + (cp_parser *); /* GNU Extensions */ static tree cp_parser_asm_specification_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_asm_operand_list - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_asm_clobber_list - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_attributes_opt - PARAMS ((cp_parser *)); + (cp_parser *); static tree cp_parser_attribute_list - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_extension_opt - PARAMS ((cp_parser *, int *)); + (cp_parser *, int *); static void cp_parser_label_declaration - PARAMS ((cp_parser *)); + (cp_parser *); /* Utility Routines */ static tree cp_parser_lookup_name - PARAMS ((cp_parser *, tree, bool, bool, bool, bool)); + (cp_parser *, tree, bool, bool, bool, bool); static tree cp_parser_lookup_name_simple - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static tree cp_parser_resolve_typename_type - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static tree cp_parser_maybe_treat_template_as_class (tree, bool); static bool cp_parser_check_declarator_template_parameters - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static bool cp_parser_check_template_parameters - PARAMS ((cp_parser *, unsigned)); + (cp_parser *, unsigned); static tree cp_parser_binary_expression - PARAMS ((cp_parser *, - const cp_parser_token_tree_map, - cp_parser_expression_fn)); + (cp_parser *, const cp_parser_token_tree_map, cp_parser_expression_fn); static tree cp_parser_global_scope_opt - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static bool cp_parser_constructor_declarator_p (cp_parser *, bool); static tree cp_parser_function_definition_from_specifiers_and_declarator - PARAMS ((cp_parser *, tree, tree, tree, tree)); + (cp_parser *, tree, tree, tree, tree); static tree cp_parser_function_definition_after_declarator - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static void cp_parser_template_declaration_after_export - PARAMS ((cp_parser *, bool)); + (cp_parser *, bool); static tree cp_parser_single_declaration - PARAMS ((cp_parser *, bool, bool *)); + (cp_parser *, bool, bool *); static tree cp_parser_functional_cast - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static void cp_parser_late_parsing_for_member - PARAMS ((cp_parser *, tree)); + (cp_parser *, tree); static void cp_parser_late_parsing_default_args (cp_parser *, tree); static tree cp_parser_sizeof_operand - PARAMS ((cp_parser *, enum rid)); + (cp_parser *, enum rid); static bool cp_parser_declares_only_class_p - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_friend_p - PARAMS ((tree)); + (tree); static cp_token *cp_parser_require - PARAMS ((cp_parser *, enum cpp_ttype, const char *)); + (cp_parser *, enum cpp_ttype, const char *); static cp_token *cp_parser_require_keyword - PARAMS ((cp_parser *, enum rid, const char *)); + (cp_parser *, enum rid, const char *); static bool cp_parser_token_starts_function_definition_p - PARAMS ((cp_token *)); + (cp_token *); static bool cp_parser_next_token_starts_class_definition_p (cp_parser *); static enum tag_types cp_parser_token_is_class_key - PARAMS ((cp_token *)); + (cp_token *); static void cp_parser_check_class_key (enum tag_types, tree type); static bool cp_parser_optional_template_keyword @@ -1749,43 +1719,43 @@ static void cp_parser_cache_group (cp_parser *, cp_token_cache *, enum cpp_ttype, unsigned); static void cp_parser_parse_tentatively - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_commit_to_tentative_parse - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_abort_tentative_parse - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_parse_definitely - PARAMS ((cp_parser *)); + (cp_parser *); static inline bool cp_parser_parsing_tentatively - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_committed_to_tentative_parse - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_error - PARAMS ((cp_parser *, const char *)); + (cp_parser *, const char *); static bool cp_parser_simulate_error - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_check_type_definition - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_skip_to_closing_parenthesis - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_skip_to_closing_parenthesis_or_comma (cp_parser *); static void cp_parser_skip_to_end_of_statement - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_skip_to_end_of_block_or_statement - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_skip_to_closing_brace (cp_parser *); static void cp_parser_skip_until_found - PARAMS ((cp_parser *, enum cpp_ttype, const char *)); + (cp_parser *, enum cpp_ttype, const char *); static bool cp_parser_error_occurred - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_allow_gnu_extensions_p - PARAMS ((cp_parser *)); + (cp_parser *); static bool cp_parser_is_string_literal - PARAMS ((cp_token *)); + (cp_token *); static bool cp_parser_is_keyword - PARAMS ((cp_token *, enum rid)); + (cp_token *, enum rid); static bool cp_parser_dependent_type_p (tree); static bool cp_parser_value_dependent_expression_p @@ -1803,17 +1773,16 @@ static void cp_parser_start_deferring_access_checks (cp_parser *); static tree cp_parser_stop_deferring_access_checks - PARAMS ((cp_parser *)); + (cp_parser *); static void cp_parser_perform_deferred_access_checks - PARAMS ((tree)); + (tree); static tree cp_parser_scope_through_which_access_occurs (tree, tree, tree); /* Returns non-zero if we are parsing tentatively. */ static inline bool -cp_parser_parsing_tentatively (parser) - cp_parser *parser; +cp_parser_parsing_tentatively (cp_parser* parser) { return parser->context->next != NULL; } @@ -1821,8 +1790,7 @@ /* Returns non-zero if TOKEN is a string literal. */ static bool -cp_parser_is_string_literal (token) - cp_token *token; +cp_parser_is_string_literal (cp_token* token) { return (token->type == CPP_STRING || token->type == CPP_WSTRING); } @@ -1830,9 +1798,7 @@ /* Returns non-zero if TOKEN is the indicated KEYWORD. */ static bool -cp_parser_is_keyword (token, keyword) - cp_token *token; - enum rid keyword; +cp_parser_is_keyword (cp_token* token, enum rid keyword) { return token->keyword == keyword; } @@ -1841,8 +1807,7 @@ [temp.dep.type]. */ static bool -cp_parser_dependent_type_p (type) - tree type; +cp_parser_dependent_type_p (tree type) { tree scope; @@ -2025,8 +1990,7 @@ [temp.dep.expr]. */ static bool -cp_parser_type_dependent_expression_p (expression) - tree expression; +cp_parser_type_dependent_expression_p (tree expression) { if (!processing_template_decl) return false; @@ -2157,8 +2121,7 @@ declaration named. */ static tree -cp_parser_stop_deferring_access_checks (parser) - cp_parser *parser; +cp_parser_stop_deferring_access_checks (cp_parser* parser) { tree access_checks; @@ -2173,8 +2136,7 @@ documented with cp_parser_stop_deferrring_access_checks. */ static void -cp_parser_perform_deferred_access_checks (access_checks) - tree access_checks; +cp_parser_perform_deferred_access_checks (tree access_checks) { tree deferred_check; @@ -2194,12 +2156,9 @@ NESTED_NAME_SPECIFIER is `A'. */ tree -cp_parser_scope_through_which_access_occurs (decl, - object_type, - nested_name_specifier) - tree decl; - tree object_type; - tree nested_name_specifier; +cp_parser_scope_through_which_access_occurs (tree decl, + tree object_type, + tree nested_name_specifier) { tree scope; tree qualifying_type = NULL_TREE; @@ -2239,9 +2198,7 @@ /* Issue the indicated error MESSAGE. */ static void -cp_parser_error (parser, message) - cp_parser *parser; - const char *message; +cp_parser_error (cp_parser* parser, const char* message) { /* Output the MESSAGE -- unless we're parsing tentatively. */ if (!cp_parser_simulate_error (parser)) @@ -2253,8 +2210,7 @@ simulated; false if a messgae should be issued by the caller. */ static bool -cp_parser_simulate_error (parser) - cp_parser *parser; +cp_parser_simulate_error (cp_parser* parser) { if (cp_parser_parsing_tentatively (parser) && !cp_parser_committed_to_tentative_parse (parser)) @@ -2270,8 +2226,7 @@ issued. */ static void -cp_parser_check_type_definition (parser) - cp_parser *parser; +cp_parser_check_type_definition (cp_parser* parser) { /* If types are forbidden here, issue a message. */ if (parser->type_definition_forbidden_message) @@ -2340,8 +2295,7 @@ non-nested `}' comes first, then we stop before consuming that. */ static void -cp_parser_skip_to_end_of_statement (parser) - cp_parser *parser; +cp_parser_skip_to_end_of_statement (cp_parser* parser) { unsigned nesting_depth = 0; @@ -2400,8 +2354,7 @@ have consumed a non-nested `;'. */ static void -cp_parser_skip_to_end_of_block_or_statement (parser) - cp_parser *parser; +cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser) { unsigned nesting_depth = 0; @@ -2469,7 +2422,7 @@ /* Create a new C++ parser. */ static cp_parser * -cp_parser_new () +cp_parser_new (void) { cp_parser *parser; @@ -2516,8 +2469,7 @@ identifier. */ static tree -cp_parser_identifier (parser) - cp_parser *parser; +cp_parser_identifier (cp_parser* parser) { cp_token *token; @@ -2537,8 +2489,7 @@ Returns TRUE if all went well. */ static bool -cp_parser_translation_unit (parser) - cp_parser *parser; +cp_parser_translation_unit (cp_parser* parser) { while (true) { @@ -3211,11 +3162,9 @@ names are looked up in uninstantiated templates. */ static tree -cp_parser_unqualified_id (parser, template_keyword_p, - check_dependency_p) - cp_parser *parser; - bool template_keyword_p; - bool check_dependency_p; +cp_parser_unqualified_id (cp_parser* parser, + bool template_keyword_p, + bool check_dependency_p) { cp_token *token; @@ -4394,8 +4343,7 @@ is returned even if there is only a single expression in the list. */ static tree -cp_parser_expression_list (parser) - cp_parser *parser; +cp_parser_expression_list (cp_parser* parser) { tree expression_list = NULL_TREE; @@ -4444,10 +4392,9 @@ or ERROR_MARK_NODE if no type-name is present. */ static void -cp_parser_pseudo_destructor_name (parser, scope, type) - cp_parser *parser; - tree *scope; - tree *type; +cp_parser_pseudo_destructor_name (cp_parser* parser, + tree* scope, + tree* type) { bool nested_name_specifier_p; @@ -4692,8 +4639,7 @@ unary-operator, the corresponding tree code is returned. */ static enum tree_code -cp_parser_unary_operator (token) - cp_token *token; +cp_parser_unary_operator (cp_token* token) { switch (token->type) { @@ -4728,8 +4674,7 @@ Returns a representation of the expression. */ static tree -cp_parser_new_expression (parser) - cp_parser *parser; +cp_parser_new_expression (cp_parser* parser) { bool global_scope_p; tree placement; @@ -4785,8 +4730,7 @@ Returns the same representation as for an expression-list. */ static tree -cp_parser_new_placement (parser) - cp_parser *parser; +cp_parser_new_placement (cp_parser* parser) { tree expression_list; @@ -4810,8 +4754,7 @@ and whose TREE_VALUE is the new-declarator. */ static tree -cp_parser_new_type_id (parser) - cp_parser *parser; +cp_parser_new_type_id (cp_parser* parser) { tree type_specifier_seq; tree declarator; @@ -4844,8 +4787,7 @@ cp_parser_declarator for the representations used. */ static tree -cp_parser_new_declarator_opt (parser) - cp_parser *parser; +cp_parser_new_declarator_opt (cp_parser* parser) { enum tree_code code; tree type; @@ -4895,8 +4837,7 @@ documented for cp_parser_direct_declarator. */ static tree -cp_parser_direct_new_declarator (parser) - cp_parser *parser; +cp_parser_direct_new_declarator (cp_parser* parser) { tree declarator = NULL_TREE; @@ -4956,8 +4897,7 @@ expression-list, VOID_ZERO_NODE is returned. */ static tree -cp_parser_new_initializer (parser) - cp_parser *parser; +cp_parser_new_initializer (cp_parser* parser) { tree expression_list; @@ -4984,8 +4924,7 @@ Returns a representation of the expression. */ static tree -cp_parser_delete_expression (parser) - cp_parser *parser; +cp_parser_delete_expression (cp_parser* parser) { bool global_scope_p; bool array_p; @@ -5121,8 +5060,7 @@ Returns a representation of the expression. */ static tree -cp_parser_pm_expression (parser) - cp_parser *parser; +cp_parser_pm_expression (cp_parser* parser) { tree cast_expr; tree pm_expr; @@ -5173,8 +5111,7 @@ Returns a representation of the expression. */ static tree -cp_parser_multiplicative_expression (parser) - cp_parser *parser; +cp_parser_multiplicative_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_MULT, MULT_EXPR }, @@ -5198,8 +5135,7 @@ Returns a representation of the expression. */ static tree -cp_parser_additive_expression (parser) - cp_parser *parser; +cp_parser_additive_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_PLUS, PLUS_EXPR }, @@ -5222,8 +5158,7 @@ Returns a representation of the expression. */ static tree -cp_parser_shift_expression (parser) - cp_parser *parser; +cp_parser_shift_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_LSHIFT, LSHIFT_EXPR }, @@ -5254,8 +5189,7 @@ Returns a representation of the expression. */ static tree -cp_parser_relational_expression (parser) - cp_parser *parser; +cp_parser_relational_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_LESS, LT_EXPR }, @@ -5282,8 +5216,7 @@ Returns a representation of the expression. */ static tree -cp_parser_equality_expression (parser) - cp_parser *parser; +cp_parser_equality_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_EQ_EQ, EQ_EXPR }, @@ -5305,8 +5238,7 @@ Returns a representation of the expression. */ static tree -cp_parser_and_expression (parser) - cp_parser *parser; +cp_parser_and_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_AND, BIT_AND_EXPR }, @@ -5327,8 +5259,7 @@ Returns a representation of the expression. */ static tree -cp_parser_exclusive_or_expression (parser) - cp_parser *parser; +cp_parser_exclusive_or_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_XOR, BIT_XOR_EXPR }, @@ -5350,8 +5281,7 @@ Returns a representation of the expression. */ static tree -cp_parser_inclusive_or_expression (parser) - cp_parser *parser; +cp_parser_inclusive_or_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_OR, BIT_IOR_EXPR }, @@ -5372,8 +5302,7 @@ Returns a representation of the expression. */ static tree -cp_parser_logical_and_expression (parser) - cp_parser *parser; +cp_parser_logical_and_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_AND_AND, TRUTH_ANDIF_EXPR }, @@ -5394,8 +5323,7 @@ Returns a representation of the expression. */ static tree -cp_parser_logical_or_expression (parser) - cp_parser *parser; +cp_parser_logical_or_expression (cp_parser* parser) { static const cp_parser_token_tree_map map = { { CPP_OR_OR, TRUTH_ORIF_EXPR }, @@ -5421,8 +5349,7 @@ Returns a representation of the expression. */ static tree -cp_parser_conditional_expression (parser) - cp_parser *parser; +cp_parser_conditional_expression (cp_parser* parser) { tree logical_or_expr; @@ -5453,9 +5380,7 @@ ? : assignment-expression */ static tree -cp_parser_question_colon_clause (parser, logical_or_expr) - cp_parser *parser; - tree logical_or_expr; +cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr) { tree expr; tree assignment_expr; @@ -5491,8 +5416,7 @@ Returns a representation for the expression. */ static tree -cp_parser_assignment_expression (parser) - cp_parser *parser; +cp_parser_assignment_expression (cp_parser* parser) { tree expr; @@ -5553,8 +5477,7 @@ operator, ERROR_MARK is returned. */ static enum tree_code -cp_parser_assignment_operator_opt (parser) - cp_parser *parser; +cp_parser_assignment_operator_opt (cp_parser* parser) { enum tree_code op; cp_token *token; @@ -5637,8 +5560,7 @@ Returns a representation of the expression. */ static tree -cp_parser_expression (parser) - cp_parser *parser; +cp_parser_expression (cp_parser* parser) { tree expression = NULL_TREE; bool saw_comma_p = false; @@ -5695,8 +5617,7 @@ conditional-expression */ static tree -cp_parser_constant_expression (parser) - cp_parser *parser; +cp_parser_constant_expression (cp_parser* parser) { bool saved_constant_expression_p; tree expression; @@ -5745,8 +5666,7 @@ try-block */ static void -cp_parser_statement (parser) - cp_parser *parser; +cp_parser_statement (cp_parser* parser) { tree statement; cp_token *token; @@ -5846,8 +5766,7 @@ an ordinary label, returns a LABEL_STMT. */ static tree -cp_parser_labeled_statement (parser) - cp_parser *parser; +cp_parser_labeled_statement (cp_parser* parser) { cp_token *token; tree statement = NULL_TREE; @@ -5907,8 +5826,7 @@ statement consists of nothing more than an `;'. */ static tree -cp_parser_expression_statement (parser) - cp_parser *parser; +cp_parser_expression_statement (cp_parser* parser) { tree statement; @@ -5969,8 +5887,7 @@ statement-seq [opt] statement */ static void -cp_parser_statement_seq_opt (parser) - cp_parser *parser; +cp_parser_statement_seq_opt (cp_parser* parser) { /* Scan statements until there aren't any more. */ while (true) @@ -5995,8 +5912,7 @@ Returns the new IF_STMT or SWITCH_STMT. */ static tree -cp_parser_selection_statement (parser) - cp_parser *parser; +cp_parser_selection_statement (cp_parser* parser) { cp_token *token; enum rid keyword; @@ -6100,8 +6016,7 @@ Returns the expression that should be tested. */ static tree -cp_parser_condition (parser) - cp_parser *parser; +cp_parser_condition (cp_parser* parser) { tree type_specifiers; const char *saved_message; @@ -6181,8 +6096,7 @@ Returns the new WHILE_STMT, DO_STMT, or FOR_STMT. */ static tree -cp_parser_iteration_statement (parser) - cp_parser *parser; +cp_parser_iteration_statement (cp_parser* parser) { cp_token *token; enum rid keyword; @@ -6292,8 +6206,7 @@ simple-declaration */ static void -cp_parser_for_init_statement (parser) - cp_parser *parser; +cp_parser_for_init_statement (cp_parser* parser) { /* If the next token is a `;', then we have an empty expression-statement. Gramatically, this is also a @@ -6335,8 +6248,7 @@ GOTO_STMT. */ static tree -cp_parser_jump_statement (parser) - cp_parser *parser; +cp_parser_jump_statement (cp_parser* parser) { tree statement = error_mark_node; cp_token *token; @@ -6410,8 +6322,7 @@ block-declaration */ static void -cp_parser_declaration_statement (parser) - cp_parser *parser; +cp_parser_declaration_statement (cp_parser* parser) { /* Parse the block-declaration. */ cp_parser_block_declaration (parser, /*statement_p=*/true); @@ -6432,8 +6343,7 @@ Returns the new statement. */ static tree -cp_parser_implicitly_scoped_statement (parser) - cp_parser *parser; +cp_parser_implicitly_scoped_statement (cp_parser* parser) { tree statement; @@ -6461,8 +6371,7 @@ scope. */ static void -cp_parser_already_scoped_statement (parser) - cp_parser *parser; +cp_parser_already_scoped_statement (cp_parser* parser) { /* If the token is not a `{', then we must take special action. */ if (cp_lexer_next_token_is_not(parser->lexer, CPP_OPEN_BRACE)) @@ -6490,8 +6399,7 @@ declaration-seq declaration */ static void -cp_parser_declaration_seq_opt (parser) - cp_parser *parser; +cp_parser_declaration_seq_opt (cp_parser* parser) { while (true) { @@ -6548,8 +6456,7 @@ __extension__ declaration */ static void -cp_parser_declaration (parser) - cp_parser *parser; +cp_parser_declaration (cp_parser* parser) { cp_token token1; cp_token token2; @@ -6715,9 +6622,8 @@ function-definition as a simple-declaration. */ static void -cp_parser_simple_declaration (parser, function_definition_allowed_p) - cp_parser *parser; - bool function_definition_allowed_p; +cp_parser_simple_declaration (cp_parser* parser, + bool function_definition_allowed_p) { tree decl_specifiers; tree attributes; @@ -6871,12 +6777,10 @@ friendship is granted might not be a class. */ static tree -cp_parser_decl_specifier_seq (parser, flags, attributes, - declares_class_or_enum) - cp_parser *parser; - cp_parser_flags flags; - tree *attributes; - bool *declares_class_or_enum; +cp_parser_decl_specifier_seq (cp_parser* parser, + cp_parser_flags flags, + tree* attributes, + bool* declares_class_or_enum) { tree decl_specs = NULL_TREE; bool friend_p = false; @@ -7069,8 +6973,7 @@ Returns an IDENTIFIER_NODE corresponding to the keyword used. */ static tree -cp_parser_storage_class_specifier_opt (parser) - cp_parser *parser; +cp_parser_storage_class_specifier_opt (cp_parser* parser) { switch (cp_lexer_peek_token (parser->lexer)->keyword) { @@ -7098,8 +7001,7 @@ Returns an IDENTIFIER_NODE corresponding to the keyword used. */ static tree -cp_parser_function_specifier_opt (parser) - cp_parser *parser; +cp_parser_function_specifier_opt (cp_parser* parser) { switch (cp_lexer_peek_token (parser->lexer)->keyword) { @@ -7121,8 +7023,7 @@ extern string-literal declaration */ static void -cp_parser_linkage_specification (parser) - cp_parser *parser; +cp_parser_linkage_specification (cp_parser* parser) { cp_token *token; tree linkage; @@ -7199,8 +7100,7 @@ Returns an IDENTIFIER_NODE representing the operator. */ static tree -cp_parser_conversion_function_id (parser) - cp_parser *parser; +cp_parser_conversion_function_id (cp_parser* parser) { tree type; tree saved_scope; @@ -7254,8 +7154,7 @@ Returns the TYPE specified. */ static tree -cp_parser_conversion_type_id (parser) - cp_parser *parser; +cp_parser_conversion_type_id (cp_parser* parser) { tree attributes; tree type_specifiers; @@ -7284,8 +7183,7 @@ cp_parser_declarator for details. */ static tree -cp_parser_conversion_declarator_opt (parser) - cp_parser *parser; +cp_parser_conversion_declarator_opt (cp_parser* parser) { enum tree_code code; tree class_type; @@ -7330,8 +7228,7 @@ Returns TRUE iff the ctor-initializer was actually present. */ static bool -cp_parser_ctor_initializer_opt (parser) - cp_parser *parser; +cp_parser_ctor_initializer_opt (cp_parser* parser) { /* If the next token is not a `:', then there is no ctor-initializer. */ @@ -7359,8 +7256,7 @@ mem-initializer , mem-initializer-list */ static void -cp_parser_mem_initializer_list (parser) - cp_parser *parser; +cp_parser_mem_initializer_list (cp_parser* parser) { tree mem_initializer_list = NULL_TREE; @@ -7407,8 +7303,7 @@ the TREE_VALUE is the expression-list. */ static tree -cp_parser_mem_initializer (parser) - cp_parser *parser; +cp_parser_mem_initializer (cp_parser* parser) { tree mem_initializer_id; tree expression_list; @@ -7447,8 +7342,7 @@ to be initialized for the second production. */ static tree -cp_parser_mem_initializer_id (parser) - cp_parser *parser; +cp_parser_mem_initializer_id (cp_parser* parser) { bool global_scope_p; bool nested_name_specifier_p; @@ -7515,8 +7409,7 @@ human-readable spelling of the identifier, e.g., `operator +'. */ static tree -cp_parser_operator_function_id (parser) - cp_parser *parser; +cp_parser_operator_function_id (cp_parser* parser) { /* Look for the `operator' keyword. */ if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'")) @@ -7541,8 +7434,7 @@ human-readable spelling of the identifier, e.g., `operator +'. */ static tree -cp_parser_operator (parser) - cp_parser *parser; +cp_parser_operator (cp_parser* parser) { tree id = NULL_TREE; cp_token *token; @@ -7803,9 +7695,7 @@ template < template-parameter-list > */ static void -cp_parser_template_declaration (parser, member_p) - cp_parser *parser; - bool member_p; +cp_parser_template_declaration (cp_parser* parser, bool member_p) { /* Check for `export'. */ if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT)) @@ -7829,8 +7719,7 @@ The nodes are connected via their TREE_CHAINs. */ static tree -cp_parser_template_parameter_list (parser) - cp_parser *parser; +cp_parser_template_parameter_list (cp_parser* parser) { tree parameter_list = NULL_TREE; @@ -7867,8 +7756,7 @@ TREE_PURPOSE is the default value, if any. */ static tree -cp_parser_template_parameter (parser) - cp_parser *parser; +cp_parser_template_parameter (cp_parser* parser) { cp_token *token; @@ -7933,8 +7821,7 @@ the declaration of the parameter. */ static tree -cp_parser_type_parameter (parser) - cp_parser *parser; +cp_parser_type_parameter (cp_parser* parser) { cp_token *token; tree parameter; @@ -8241,10 +8128,9 @@ names are looked up inside uninstantiated templates. */ static tree -cp_parser_template_name (parser, template_keyword_p, check_dependency_p) - cp_parser *parser; - bool template_keyword_p; - bool check_dependency_p; +cp_parser_template_name (cp_parser* parser, + bool template_keyword_p, + bool check_dependency_p) { tree identifier; tree decl; @@ -8344,8 +8230,7 @@ argument. */ static tree -cp_parser_template_argument_list (parser) - cp_parser *parser; +cp_parser_template_argument_list (cp_parser* parser) { tree arguments = NULL_TREE; @@ -8381,8 +8266,7 @@ OVERLOAD. */ static tree -cp_parser_template_argument (parser) - cp_parser *parser; +cp_parser_template_argument (cp_parser* parser) { tree argument; bool template_p; @@ -8459,8 +8343,7 @@ decl-specifier-seq [opt] declarator [opt] ; */ static void -cp_parser_explicit_instantiation (parser) - cp_parser *parser; +cp_parser_explicit_instantiation (cp_parser* parser) { bool declares_class_or_enum; tree decl_specifiers; @@ -8539,8 +8422,7 @@ template <> template-declaration */ static void -cp_parser_explicit_specialization (parser) - cp_parser *parser; +cp_parser_explicit_specialization (cp_parser* parser) { /* Look for the `template' keyword. */ cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"); @@ -8610,18 +8492,12 @@ is set to FALSE. */ static tree -cp_parser_type_specifier (parser, - flags, - is_friend, - is_declaration, - declares_class_or_enum, - is_cv_qualifier) - cp_parser *parser; - cp_parser_flags flags; - bool is_friend; - bool is_declaration; - bool *declares_class_or_enum; - bool *is_cv_qualifier; +cp_parser_type_specifier (cp_parser* parser, + cp_parser_flags flags, + bool is_friend, + bool is_declaration, + bool* declares_class_or_enum, + bool* is_cv_qualifier) { tree type_spec = NULL_TREE; cp_token *token; @@ -8741,9 +8617,7 @@ productions, the value returned is the indicated TYPE_DECL. */ static tree -cp_parser_simple_type_specifier (parser, flags) - cp_parser *parser; - cp_parser_flags flags; +cp_parser_simple_type_specifier (cp_parser* parser, cp_parser_flags flags) { tree type = NULL_TREE; cp_token *token; @@ -8860,8 +8734,7 @@ Returns a TYPE_DECL for the the type. */ static tree -cp_parser_type_name (parser) - cp_parser *parser; +cp_parser_type_name (cp_parser* parser) { tree type_decl; tree identifier; @@ -8924,10 +8797,9 @@ Returns the TYPE specified. */ static tree -cp_parser_elaborated_type_specifier (parser, is_friend, is_declaration) - cp_parser *parser; - bool is_friend; - bool is_declaration; +cp_parser_elaborated_type_specifier (cp_parser* parser, + bool is_friend, + bool is_declaration) { enum tag_types tag_type; tree identifier; @@ -9117,8 +8989,7 @@ Returns an ENUM_TYPE representing the enumeration. */ static tree -cp_parser_enum_specifier (parser) - cp_parser *parser; +cp_parser_enum_specifier (cp_parser* parser) { cp_token *token; tree identifier = NULL_TREE; @@ -9170,9 +9041,7 @@ enumerator-list , enumerator-definition */ static void -cp_parser_enumerator_list (parser, type) - cp_parser *parser; - tree type; +cp_parser_enumerator_list (cp_parser* parser, tree type) { while (true) { @@ -9209,9 +9078,7 @@ identifier */ static void -cp_parser_enumerator_definition (parser, type) - cp_parser *parser; - tree type; +cp_parser_enumerator_definition (cp_parser* parser, tree type) { cp_token *token; tree identifier; @@ -9248,8 +9115,7 @@ Returns the NAMESPACE_DECL for the namespace. */ static tree -cp_parser_namespace_name (parser) - cp_parser *parser; +cp_parser_namespace_name (cp_parser* parser) { tree identifier; tree namespace_decl; @@ -9313,8 +9179,7 @@ namespace { namespace-body } */ static void -cp_parser_namespace_definition (parser) - cp_parser *parser; +cp_parser_namespace_definition (cp_parser* parser) { tree identifier; @@ -9348,8 +9213,7 @@ declaration-seq [opt] */ static void -cp_parser_namespace_body (parser) - cp_parser *parser; +cp_parser_namespace_body (cp_parser* parser) { cp_parser_declaration_seq_opt (parser); } @@ -9360,8 +9224,7 @@ namespace identifier = qualified-namespace-specifier ; */ static void -cp_parser_namespace_alias_definition (parser) - cp_parser *parser; +cp_parser_namespace_alias_definition (cp_parser* parser) { tree identifier; tree namespace_specifier; @@ -9393,8 +9256,7 @@ namespace. */ static tree -cp_parser_qualified_namespace_specifier (parser) - cp_parser *parser; +cp_parser_qualified_namespace_specifier (cp_parser* parser) { /* Look for the optional `::'. */ cp_parser_global_scope_opt (parser, @@ -9416,8 +9278,7 @@ using :: unqualified-id ; */ static void -cp_parser_using_declaration (parser) - cp_parser *parser; +cp_parser_using_declaration (cp_parser* parser) { cp_token *token; bool typename_p = false; @@ -9497,8 +9358,7 @@ namespace-name ; */ static void -cp_parser_using_directive (parser) - cp_parser *parser; +cp_parser_using_directive (cp_parser* parser) { tree namespace_decl; @@ -9538,8 +9398,7 @@ : asm-operand-list [opt] ) ; */ static void -cp_parser_asm_definition (parser) - cp_parser *parser; +cp_parser_asm_definition (cp_parser* parser) { cp_token *token; tree string; @@ -9689,20 +9548,13 @@ is FALSE. */ static tree -cp_parser_init_declarator (parser, - decl_specifiers, - prefix_attributes, - access_checks, - function_definition_allowed_p, - member_p, - function_definition_p) - cp_parser *parser; - tree decl_specifiers; - tree prefix_attributes; - tree access_checks; - bool function_definition_allowed_p; - bool member_p; - bool *function_definition_p; +cp_parser_init_declarator (cp_parser* parser, + tree decl_specifiers, + tree prefix_attributes, + tree access_checks, + bool function_definition_allowed_p, + bool member_p, + bool* function_definition_p) { cp_token *token; tree declarator; @@ -10027,10 +9879,9 @@ expression, not a declaration.) */ static tree -cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p) - cp_parser *parser; - cp_parser_declarator_kind dcl_kind; - bool *ctor_dtor_or_conv_p; +cp_parser_declarator (cp_parser* parser, + cp_parser_declarator_kind dcl_kind, + bool* ctor_dtor_or_conv_p) { cp_token *token; tree declarator; @@ -10134,10 +9985,9 @@ indicating the size of the array is the second operand. */ static tree -cp_parser_direct_declarator (parser, dcl_kind, ctor_dtor_or_conv_p) - cp_parser *parser; - cp_parser_declarator_kind dcl_kind; - bool *ctor_dtor_or_conv_p; +cp_parser_direct_declarator (cp_parser* parser, + cp_parser_declarator_kind dcl_kind, + bool* ctor_dtor_or_conv_p) { cp_token *token; tree declarator = NULL_TREE; @@ -10429,10 +10279,9 @@ cv-qualifiers. Returns ERROR_MARK if an error occurred. */ static enum tree_code -cp_parser_ptr_operator (parser, type, cv_qualifier_seq) - cp_parser *parser; - tree *type; - tree *cv_qualifier_seq; +cp_parser_ptr_operator (cp_parser* parser, + tree* type, + tree* cv_qualifier_seq) { enum tree_code code = ERROR_MARK; cp_token *token; @@ -10507,8 +10356,7 @@ representation of a cv-qualifier. */ static tree -cp_parser_cv_qualifier_seq_opt (parser) - cp_parser *parser; +cp_parser_cv_qualifier_seq_opt (cp_parser* parser) { tree cv_qualifiers = NULL_TREE; @@ -10543,8 +10391,7 @@ __restrict__ */ static tree -cp_parser_cv_qualifier_opt (parser) - cp_parser *parser; +cp_parser_cv_qualifier_opt (cp_parser* parser) { cp_token *token; tree cv_qualifier = NULL_TREE; @@ -10584,8 +10431,7 @@ unqualified-id. */ static tree -cp_parser_declarator_id (parser) - cp_parser *parser; +cp_parser_declarator_id (cp_parser* parser) { tree id_expression; @@ -10623,8 +10469,7 @@ Returns the TYPE specified. */ static tree -cp_parser_type_id (parser) - cp_parser *parser; +cp_parser_type_id (cp_parser* parser) { tree type_specifier_seq; tree abstract_declarator; @@ -10662,8 +10507,7 @@ type-specifier, or the TREE_PURPOSE is a list of attributes. */ static tree -cp_parser_type_specifier_seq (parser) - cp_parser *parser; +cp_parser_type_specifier_seq (cp_parser* parser) { bool seen_type_specifier = false; tree type_specifier_seq = NULL_TREE; @@ -10725,8 +10569,7 @@ parameter-declaration-clause consisting only of an ellipsis. */ static tree -cp_parser_parameter_declaration_clause (parser) - cp_parser *parser; +cp_parser_parameter_declaration_clause (cp_parser* parser) { tree parameters; cp_token *token; @@ -10809,8 +10652,7 @@ `void_list_node' is never appended to the list. */ static tree -cp_parser_parameter_declaration_list (parser) - cp_parser *parser; +cp_parser_parameter_declaration_list (cp_parser* parser) { tree parameters = NULL_TREE; @@ -11109,9 +10951,7 @@ be a `friend'. */ static tree -cp_parser_function_definition (parser, friend_p) - cp_parser *parser; - bool *friend_p; +cp_parser_function_definition (cp_parser* parser, bool* friend_p) { tree decl_specifiers; tree attributes; @@ -11305,9 +11145,7 @@ set to FALSE if there is no initializer present. */ static tree -cp_parser_initializer (parser, is_parenthesized_init) - cp_parser *parser; - bool *is_parenthesized_init; +cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init) { cp_token *token; tree init; @@ -11365,8 +11203,7 @@ trailing `,' was provided. */ static tree -cp_parser_initializer_clause (parser) - cp_parser *parser; +cp_parser_initializer_clause (cp_parser* parser) { tree initializer; @@ -11419,8 +11256,7 @@ IDENTIFIER_NODE naming the field to initialize. */ static tree -cp_parser_initializer_list (parser) - cp_parser *parser; +cp_parser_initializer_list (cp_parser* parser) { tree initializers = NULL_TREE; @@ -11612,8 +11448,7 @@ Returns the TREE_TYPE representing the class. */ static tree -cp_parser_class_specifier (parser) - cp_parser *parser; +cp_parser_class_specifier (cp_parser* parser) { cp_token *token; tree type; @@ -11787,14 +11622,10 @@ body of the class. */ static tree -cp_parser_class_head (parser, - nested_name_specifier_p, - deferring_access_checks_p, - saved_access_checks) - cp_parser *parser; - bool *nested_name_specifier_p; - bool *deferring_access_checks_p; - tree *saved_access_checks; +cp_parser_class_head (cp_parser* parser, + bool* nested_name_specifier_p, + bool* deferring_access_checks_p, + tree* saved_access_checks) { cp_token *token; tree nested_name_specifier; @@ -12056,8 +11887,7 @@ error. */ static enum tag_types -cp_parser_class_key (parser) - cp_parser *parser; +cp_parser_class_key (cp_parser* parser) { cp_token *token; enum tag_types tag_type; @@ -12081,8 +11911,7 @@ access-specifier : member-specification [opt] */ static void -cp_parser_member_specification_opt (parser) - cp_parser *parser; +cp_parser_member_specification_opt (cp_parser* parser) { while (true) { @@ -12148,8 +11977,7 @@ identifier [opt] attributes [opt] : constant-expression */ static void -cp_parser_member_declaration (parser) - cp_parser *parser; +cp_parser_member_declaration (cp_parser* parser) { tree decl_specifiers; tree prefix_attributes; @@ -12495,8 +12323,7 @@ Otherwiser, ERROR_MARK_NODE is returned. */ static tree -cp_parser_pure_specifier (parser) - cp_parser *parser; +cp_parser_pure_specifier (cp_parser* parser) { cp_token *token; @@ -12522,8 +12349,7 @@ Returns a representation of the constant-expression. */ static tree -cp_parser_constant_initializer (parser) - cp_parser *parser; +cp_parser_constant_initializer (cp_parser* parser) { /* Look for the `=' token. */ if (!cp_parser_require (parser, CPP_EQ, "`='")) @@ -12570,8 +12396,7 @@ NULL_TREE, not ERROR_MARK_NODE. */ static tree -cp_parser_base_clause (parser) - cp_parser *parser; +cp_parser_base_clause (cp_parser* parser) { tree bases = NULL_TREE; @@ -12626,8 +12451,7 @@ (or the ERROR_MARK_NODE) indicating the type that was specified. */ static tree -cp_parser_base_specifier (parser) - cp_parser *parser; +cp_parser_base_specifier (cp_parser* parser) { cp_token *token; bool done = false; @@ -12776,8 +12600,7 @@ TREE_VALUE of each node is a type. */ static tree -cp_parser_exception_specification_opt (parser) - cp_parser *parser; +cp_parser_exception_specification_opt (cp_parser* parser) { cp_token *token; tree type_id_list; @@ -12829,8 +12652,7 @@ in the order that the types were presented. */ static tree -cp_parser_type_id_list (parser) - cp_parser *parser; +cp_parser_type_id_list (cp_parser* parser) { tree types = NULL_TREE; @@ -12861,8 +12683,7 @@ try compound-statement handler-seq */ static tree -cp_parser_try_block (parser) - cp_parser *parser; +cp_parser_try_block (cp_parser* parser) { tree try_block; @@ -12882,8 +12703,7 @@ try ctor-initializer [opt] function-body handler-seq */ static bool -cp_parser_function_try_block (parser) - cp_parser *parser; +cp_parser_function_try_block (cp_parser* parser) { tree try_block; bool ctor_initializer_p; @@ -12912,8 +12732,7 @@ handler handler-seq [opt] */ static void -cp_parser_handler_seq (parser) - cp_parser *parser; +cp_parser_handler_seq (cp_parser* parser) { while (true) { @@ -12935,8 +12754,7 @@ catch ( exception-declaration ) compound-statement */ static void -cp_parser_handler (parser) - cp_parser *parser; +cp_parser_handler (cp_parser* parser) { tree handler; tree declaration; @@ -12963,8 +12781,7 @@ ellipsis variant is used. */ static tree -cp_parser_exception_declaration (parser) - cp_parser *parser; +cp_parser_exception_declaration (cp_parser* parser) { tree type_specifiers; tree declarator; @@ -13006,8 +12823,7 @@ Returns a THROW_EXPR representing the throw-expression. */ static tree -cp_parser_throw_expression (parser) - cp_parser *parser; +cp_parser_throw_expression (cp_parser* parser) { tree expression; @@ -13035,8 +12851,7 @@ NULL_TREE. */ static tree -cp_parser_asm_specification_opt (parser) - cp_parser *parser; +cp_parser_asm_specification_opt (cp_parser* parser) { cp_token *token; tree asm_specification; @@ -13083,8 +12898,7 @@ is a STRING_CST for the string literal before the parenthesis. */ static tree -cp_parser_asm_operand_list (parser) - cp_parser *parser; +cp_parser_asm_operand_list (cp_parser* parser) { tree asm_operands = NULL_TREE; @@ -13143,8 +12957,7 @@ appeared. The TREE_VALUE of each node is a STRING_CST. */ static tree -cp_parser_asm_clobber_list (parser) - cp_parser *parser; +cp_parser_asm_clobber_list (cp_parser* parser) { tree clobbers = NULL_TREE; @@ -13180,8 +12993,7 @@ The return value is as for cp_parser_attribute_list. */ static tree -cp_parser_attributes_opt (parser) - cp_parser *parser; +cp_parser_attributes_opt (cp_parser* parser) { tree attributes = NULL_TREE; @@ -13241,8 +13053,7 @@ any. */ static tree -cp_parser_attribute_list (parser) - cp_parser *parser; +cp_parser_attribute_list (cp_parser* parser) { tree attribute_list = NULL_TREE; @@ -13339,9 +13150,7 @@ for restoring the value of the PEDANTIC flag. */ static bool -cp_parser_extension_opt (parser, saved_pedantic) - cp_parser *parser; - int *saved_pedantic; +cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic) { /* Save the old value of the PEDANTIC flag. */ *saved_pedantic = pedantic; @@ -13370,8 +13179,7 @@ identifier */ static void -cp_parser_label_declaration (parser) - cp_parser *parser; +cp_parser_label_declaration (cp_parser* parser) { /* Look for the `__label__' keyword. */ cp_parser_require_keyword (parser, RID_LABEL, "`__label__'"); @@ -13627,9 +13435,7 @@ TRUE. */ static tree -cp_parser_lookup_name_simple (parser, name) - cp_parser *parser; - tree name; +cp_parser_lookup_name_simple (cp_parser* parser, tree name) { return cp_parser_lookup_name (parser, name, /*check_access=*/true, @@ -13644,9 +13450,7 @@ extremely limited situations. */ static tree -cp_parser_resolve_typename_type (parser, type) - cp_parser *parser; - tree type; +cp_parser_resolve_typename_type (cp_parser* parser, tree type) { tree scope; tree name; @@ -13745,9 +13549,8 @@ and FALSE otherwise. */ static bool -cp_parser_check_declarator_template_parameters (parser, declarator) - cp_parser *parser; - tree declarator; +cp_parser_check_declarator_template_parameters (cp_parser* parser, + tree declarator) { unsigned num_templates; @@ -13822,9 +13625,8 @@ return TRUE. */ static bool -cp_parser_check_template_parameters (parser, num_templates) - cp_parser *parser; - unsigned num_templates; +cp_parser_check_template_parameters (cp_parser* parser, + unsigned num_templates) { /* If there are more template classes than parameter lists, we have something like: @@ -13864,10 +13666,9 @@ the two sub-expressions. */ static tree -cp_parser_binary_expression (parser, token_tree_map, fn) - cp_parser *parser; - const cp_parser_token_tree_map token_tree_map; - cp_parser_expression_fn fn; +cp_parser_binary_expression (cp_parser* parser, + const cp_parser_token_tree_map token_tree_map, + cp_parser_expression_fn fn) { tree lhs; @@ -13919,9 +13720,7 @@ present, and NULL_TREE otherwise. */ static tree -cp_parser_global_scope_opt (parser, current_scope_valid_p) - cp_parser *parser; - bool current_scope_valid_p; +cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p) { cp_token *token; @@ -14075,12 +13874,11 @@ static tree cp_parser_function_definition_from_specifiers_and_declarator - (parser, decl_specifiers, attributes, declarator, access_checks) - cp_parser *parser; - tree decl_specifiers; - tree attributes; - tree declarator; - tree access_checks; + (cp_parser* parser, + tree decl_specifiers, + tree attributes, + tree declarator, + tree access_checks) { tree fn; bool success_p; @@ -14118,10 +13916,8 @@ Returns the function defined. */ static tree -cp_parser_function_definition_after_declarator (parser, - inline_p) - cp_parser *parser; - bool inline_p; +cp_parser_function_definition_after_declarator (cp_parser* parser, + bool inline_p) { tree fn; bool ctor_initializer_p = false; @@ -14183,9 +13979,7 @@ is as for cp_parser_template_declaration. */ static void -cp_parser_template_declaration_after_export (parser, member_p) - cp_parser *parser; - bool member_p; +cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) { tree decl = NULL_TREE; tree parameter_list; @@ -14263,12 +14057,9 @@ *FRIEND_P is set to TRUE iff the declaration is a friend. */ static tree -cp_parser_single_declaration (parser, - member_p, - friend_p) - cp_parser *parser; - bool member_p; - bool *friend_p; +cp_parser_single_declaration (cp_parser* parser, + bool member_p, + bool* friend_p) { bool declares_class_or_enum; tree decl = NULL_TREE; @@ -14346,9 +14137,7 @@ representing the cast. */ static tree -cp_parser_functional_cast (parser, type) - cp_parser *parser; - tree type; +cp_parser_functional_cast (cp_parser* parser, tree type) { tree expression_list; @@ -14372,9 +14161,7 @@ parse them now. */ static void -cp_parser_late_parsing_for_member (parser, member_function) - cp_parser *parser; - tree member_function; +cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function) { cp_lexer *saved_lexer; @@ -14503,9 +14290,7 @@ encountered. */ static tree -cp_parser_sizeof_operand (parser, keyword) - cp_parser *parser; - enum rid keyword; +cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword) { static const char *format; tree expr = NULL_TREE; @@ -14598,8 +14383,7 @@ Returns TRUE iff `friend' appears among the DECL_SPECIFIERS. */ static bool -cp_parser_friend_p (decl_specifiers) - tree decl_specifiers; +cp_parser_friend_p (tree decl_specifiers) { while (decl_specifiers) { @@ -14622,10 +14406,9 @@ Otherwise, returns NULL. */ static cp_token * -cp_parser_require (parser, type, token_desc) - cp_parser *parser; - enum cpp_ttype type; - const char *token_desc; +cp_parser_require (cp_parser* parser, + enum cpp_ttype type, + const char* token_desc) { if (cp_lexer_next_token_is (parser->lexer, type)) return cp_lexer_consume_token (parser->lexer); @@ -14643,10 +14426,9 @@ the next token is not as expected. */ static void -cp_parser_skip_until_found (parser, type, token_desc) - cp_parser *parser; - enum cpp_ttype type; - const char *token_desc; +cp_parser_skip_until_found (cp_parser* parser, + enum cpp_ttype type, + const char* token_desc) { cp_token *token; unsigned nesting_depth = 0; @@ -14692,10 +14474,9 @@ Otherwise, returns NULL. */ static cp_token * -cp_parser_require_keyword (parser, keyword, token_desc) - cp_parser *parser; - enum rid keyword; - const char *token_desc; +cp_parser_require_keyword (cp_parser* parser, + enum rid keyword, + const char* token_desc) { cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc); @@ -14719,8 +14500,7 @@ function-definition. */ static bool -cp_parser_token_starts_function_definition_p (token) - cp_token *token; +cp_parser_token_starts_function_definition_p (cp_token* token) { return (/* An ordinary function-body begins with an `{'. */ token->type == CPP_OPEN_BRACE @@ -14748,8 +14528,7 @@ or none_type otherwise. */ static enum tag_types -cp_parser_token_is_class_key (token) - cp_token *token; +cp_parser_token_is_class_key (cp_token* token) { switch (token->keyword) { @@ -14852,8 +14631,7 @@ tokens. */ static void -cp_parser_parse_tentatively (parser) - cp_parser *parser; +cp_parser_parse_tentatively (cp_parser* parser) { /* Enter a new parsing context. */ parser->context = cp_parser_context_new (parser->context); @@ -14868,8 +14646,7 @@ /* Commit to the currently active tentative parse. */ static void -cp_parser_commit_to_tentative_parse (parser) - cp_parser *parser; +cp_parser_commit_to_tentative_parse (cp_parser* parser) { cp_parser_context *context; cp_lexer *lexer; @@ -14891,8 +14668,7 @@ will be rolled back, and no diagnostics will be issued. */ static void -cp_parser_abort_tentative_parse (parser) - cp_parser *parser; +cp_parser_abort_tentative_parse (cp_parser* parser) { cp_parser_simulate_error (parser); /* Now, pretend that we want to see if the construct was @@ -14905,8 +14681,7 @@ Returns true if no error occurred; false otherwise. */ static bool -cp_parser_parse_definitely (parser) - cp_parser *parser; +cp_parser_parse_definitely (cp_parser* parser) { bool error_occurred; cp_parser_context *context; @@ -14951,8 +14726,7 @@ we will stick with this tentative parse, even if errors occur. */ static bool -cp_parser_committed_to_tentative_parse (parser) - cp_parser *parser; +cp_parser_committed_to_tentative_parse (cp_parser* parser) { return (cp_parser_parsing_tentatively (parser) && parser->context->status == CP_PARSER_STATUS_KIND_COMMITTED); @@ -14962,8 +14736,7 @@ tentative parse. */ static bool -cp_parser_error_occurred (parser) - cp_parser *parser; +cp_parser_error_occurred (cp_parser* parser) { return (cp_parser_parsing_tentatively (parser) && parser->context->status == CP_PARSER_STATUS_KIND_ERROR); @@ -14972,8 +14745,7 @@ /* Returns non-zero if GNU extensions are allowed. */ static bool -cp_parser_allow_gnu_extensions_p (parser) - cp_parser *parser; +cp_parser_allow_gnu_extensions_p (cp_parser* parser) { return parser->allow_gnu_extensions_p; } @@ -14989,7 +14761,7 @@ /* Parse the entire translation unit. */ int -yyparse () +yyparse (void) { bool error_occurred; @@ -15003,7 +14775,7 @@ /* Clean up after parsing the entire translation unit. */ void -free_parser_stacks () +free_parser_stacks (void) { /* Nothing to do. */ } From gcc-patches-return-75308-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:05:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 13385 invoked by alias); 9 Jan 2003 03:05:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 13369 invoked from network); 9 Jan 2003 03:05:49 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by 209.249.29.67 with SMTP; 9 Jan 2003 03:05:49 -0000 Received: from mailgate1.apple.com (A17-128-100-225.apple.com [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id h0935bI08700 for ; Wed, 8 Jan 2003 19:05:37 -0800 (PST) Received: from scv3.apple.com (scv3.apple.com) by mailgate1.apple.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Wed, 8 Jan 2003 19:05:08 -0800 Received: from apple.com (goldte.apple.com [17.201.21.104]) by scv3.apple.com (8.11.3/8.11.3) with ESMTP id h0935af03461; Wed, 8 Jan 2003 19:05:36 -0800 (PST) Date: Wed, 8 Jan 2003 19:05:36 -0800 Subject: Re: [C++ PATCH] Improve enum handling Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v551) Cc: Devang Patel , gcc-patches@gcc.gnu.org To: Jason Merrill From: Devang Patel In-Reply-To: Message-Id: <394F2388-237F-11D7-94BD-0003935AAA26@apple.com> Content-Transfer-Encoding: 7bit On Wednesday, January 8, 2003, at 04:36 PM, Jason Merrill wrote: > I would think that you could also defer setting the type of the > enumerator > values until template instantiation time; rather than move it into the > big > loop, just swap it with the if (processing_template_decl) bit. It did not work. I tried to delay it until instantiating enum in tsubst_enum(). I will continue to explore it, meanwhile OK to commit this ? Thanks, -Devang From gcc-patches-return-75309-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:07:05 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14444 invoked by alias); 9 Jan 2003 03:07:05 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14436 invoked from network); 9 Jan 2003 03:07:04 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 03:07:04 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h09323108175; Wed, 8 Jan 2003 22:02:03 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h0936qn07872; Wed, 8 Jan 2003 22:06:52 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h0936qE29410; Wed, 8 Jan 2003 19:06:52 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h0936pH03749; Wed, 8 Jan 2003 19:06:51 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 8 Jan 2003 19:06:51 -0800 From: Richard Henderson To: Andreas Jaeger Cc: gcc-patches@gcc.gnu.org Subject: Re: Remove warning in unwind-d2-fde.h Message-ID: <20030109030651.GF3100@redhat.com> Mail-Followup-To: Richard Henderson , Andreas Jaeger , gcc-patches@gcc.gnu.org References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i On Mon, Dec 30, 2002 at 07:22:23PM +0100, Andreas Jaeger wrote: > * unwind-dw2-fde.h (last_fde): Add unused attribute for obj. No, look at the logs -- this is not accepted by C++. r~ From gcc-patches-return-75310-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:13:21 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16686 invoked by alias); 9 Jan 2003 03:13:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16673 invoked from network); 9 Jan 2003 03:13:17 -0000 Received: from unknown (HELO c007.snv.cp.net) (209.228.33.236) by 209.249.29.67 with SMTP; 9 Jan 2003 03:13:17 -0000 Received: (cpmta 1643 invoked from network); 8 Jan 2003 19:13:06 -0800 Received: from 65.189.196.97 (HELO ?192.168.1.100?) by smtp.directvinternet.com (209.228.33.236) with SMTP; 8 Jan 2003 19:13:06 -0800 X-Sent: 9 Jan 2003 03:13:06 GMT Subject: Re: [3.3 branch, Fortran, committed] was: [Trunk, Fortran, committed]Patch to enable use of any kind integer in case statements. From: bud davis To: "Kaveh R. Ghazi" Cc: toon@moene.indiv.nluug.nl, gcc-patches@gcc.gnu.org In-Reply-To: <200301041434.JAA09709@caip.rutgers.edu> References: <200301041434.JAA09709@caip.rutgers.edu> Content-Type: multipart/mixed; boundary="=-0ujvX2oJQAxm31WoCefz" Date: 08 Jan 2003 22:19:55 -0600 Message-Id: <1042086003.20094.10.camel@localhost.localdomain> Mime-Version: 1.0 --=-0ujvX2oJQAxm31WoCefz Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, 2003-01-04 at 08:34, Kaveh R. Ghazi wrote: > > > Toon Moene wrote: > > > > > > I committed the attached patch after bootstrap, check (C and > > > Fortran only) on powerpc-unknown-linux-gnu (Debian testing as of > > > three weeks ago). > > > > > > It allows use of INTEGER*{1,2,8} in CASE statements and issues a > > > warning when the case labels exceed the range of the KIND. > > > > And ditto for the 3.3 branch (it's a bug that this wasn't supported). > > Testcases? > > -- > Kaveh R. Ghazi ghazi@caip.rutgers.edu > Attached is a testcase for the above mentioned patch. The file should go in gcc/testsuite/g77.f-torture/execute/select.f, please. And of course, it does PASS on a current cvs checkout of gcc:) --bud davis --=-0ujvX2oJQAxm31WoCefz Content-Disposition: attachment; filename=select.f Content-Transfer-Encoding: quoted-printable Content-Type: text/x-fortran; name=select.f; charset=ISO-8859-15 IMPLICIT NONE=20 C this test demonstrates the acceptance of all integer types C in SELECT / CASE=20 C INTEGER*1 IB /1/ INTEGER*2 IH /2/ INTEGER*4 IW /3/ INTEGER*8 ID /4/ C C SELECT CASE (IB) CASE (1) CASE (2) CALL ABORT CASE (3) CALL ABORT CASE DEFAULT CALL ABORT END SELECT SELECT CASE (IH) CASE (1) CALL ABORT CASE (2) CASE (3) CALL ABORT CASE DEFAULT CALL ABORT END SELECT SELECT CASE (IW) CASE (1) CALL ABORT=20 CASE (2) CALL ABORT CASE (3) CASE DEFAULT CALL ABORT END SELECT SELECT CASE (ID) CASE (1) CALL ABORT CASE (2) CALL ABORT CASE (3) CALL ABORT CASE DEFAULT END SELECT END --=-0ujvX2oJQAxm31WoCefz-- From gcc-patches-return-75311-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:33:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9198 invoked by alias); 9 Jan 2003 03:33:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9191 invoked from network); 9 Jan 2003 03:33:10 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 9 Jan 2003 03:33:10 -0000 Received: from prospero.boston.redhat.com (dell-paw-2.cambridge.redhat.com [195.224.55.226]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 9B0C4ABAF8; Thu, 9 Jan 2003 03:32:58 +0000 (GMT) Received: by prospero.boston.redhat.com (Postfix, from userid 4046) id 201BEF7F9F; Thu, 9 Jan 2003 03:32:27 +0000 (GMT) To: Devang Patel Cc: gcc-patches@gcc.gnu.org Subject: Re: [C++ PATCH] Improve enum handling References: <394F2388-237F-11D7-94BD-0003935AAA26@apple.com> From: Jason Merrill In-Reply-To: <394F2388-237F-11D7-94BD-0003935AAA26@apple.com> (Devang Patel's message of "Wed, 8 Jan 2003 19:05:36 -0800") Date: Wed, 08 Jan 2003 22:32:27 -0500 Message-ID: Lines: 16 User-Agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Wed, 8 Jan 2003 19:05:36 -0800, Devang Patel wrote: > On Wednesday, January 8, 2003, at 04:36 PM, Jason Merrill wrote: > >> I would think that you could also defer setting the type of the enumerator >> values until template instantiation time; rather than move it into the big >> loop, just swap it with the if (processing_template_decl) bit. > > It did not work. I tried to delay it until instantiating enum in > tsubst_enum(). > I will continue to explore it, meanwhile OK to commit this ? No, let's wait for a complete fix. Thanks, Jason From gcc-patches-return-75312-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:39:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10798 invoked by alias); 9 Jan 2003 03:39:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10773 invoked from network); 9 Jan 2003 03:39:48 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 03:39:48 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h093dTY04742; Wed, 8 Jan 2003 22:39:29 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h093dSfL009915; Thu, 9 Jan 2003 01:39:28 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h093dQ0A009817; Thu, 9 Jan 2003 01:39:26 -0200 To: Richard Henderson Cc: "Kaveh R. Ghazi" , gcc-patches@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) References: <200212142145.QAA25890@caip.rutgers.edu> <200212170531.AAA15561@caip.rutgers.edu> <20030107215515.GQ12992@redhat.com> <20030108220758.GD27635@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 01:39:26 -0200 In-Reply-To: <20030108220758.GD27635@redhat.com> Message-ID: Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 8, 2003, Richard Henderson wrote: > I suggest that these routines _not_ be exported from libgcc.so. > They only exist to support the TFmode bits. Right. I thought the default was to not export. Isn't it? -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75313-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:48:43 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15578 invoked by alias); 9 Jan 2003 03:48:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15544 invoked from network); 9 Jan 2003 03:48:37 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 03:48:37 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h093mKY05937; Wed, 8 Jan 2003 22:48:20 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h093mJfL002737; Thu, 9 Jan 2003 01:48:19 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h093mJ82002723; Thu, 9 Jan 2003 01:48:19 -0200 To: Richard Henderson Cc: "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) References: <200212170531.AAA15561@caip.rutgers.edu> <200212241434.JAA22361@caip.rutgers.edu> <20030107221549.GR12992@redhat.com> <20030108220455.GC27635@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 01:48:19 -0200 In-Reply-To: <20030108220455.GC27635@redhat.com> Message-ID: Lines: 29 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 8, 2003, Richard Henderson wrote: > On Wed, Jan 08, 2003 at 03:17:49PM -0200, Alexandre Oliva wrote: >> I've no idea of what LIA-1 is, but it does have as many denormal bits >> as normal bits, it's just that the minimum exponent for a denormal is >> higher than that of a plain doubles, since denormals start with the >> higher double still being normal. > Huh? No it doesn't. The minimum normalized double-double is > { DBL_MIN_FLT, 0 }. Nevermind, I was thinking having a denormal in the lower double would make the whole thing denormal, but in this case the lower double definitely isn't denormal. Anyway, without this hunk, we get an incorrect DENORM_MIN, and tests fail. DENORM_MIN isn't as low as MIN_FLT / 2**106, and that's the problem. This was the cleanest way I found to introduce the possibility of having fewer denorm bits than mantissa bits, which is exactly the case of this FP format. Any better suggestions on how to accomplish this? I think claiming we don't have denormals is not the right answer either. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75314-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 03:48:44 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15783 invoked by alias); 9 Jan 2003 03:48:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15587 invoked from network); 9 Jan 2003 03:48:42 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 9 Jan 2003 03:48:42 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id WAA16916; Wed, 8 Jan 2003 22:48:29 -0500 (EST) Date: Wed, 8 Jan 2003 22:48:29 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301090348.WAA16916@caip.rutgers.edu> To: rth@redhat.com Subject: Re: Remove warning in unwind-d2-fde.h Cc: aj@suse.de, gcc-patches@gcc.gnu.org References: <20030109030651.GF3100@redhat.com> > From: Richard Henderson > > On Mon, Dec 30, 2002 at 07:22:23PM +0100, Andreas Jaeger wrote: > > * unwind-dw2-fde.h (last_fde): Add unused attribute for obj. > > No, look at the logs -- this is not accepted by C++. > r~ Hmm... luckily, I believe Mark fixed this in the new parser here: http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00097.html However the 3.3. branch doesn't seem to have had this one-liner backported to it. If it's also this easy in the old parser, we may as well enable it there too. --Kaveh PS: remind me please why unwind-dw2-fde.h needs to be compiled with g++? -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From gcc-patches-return-75315-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:08:14 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 25842 invoked by alias); 9 Jan 2003 04:08:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 25827 invoked from network); 9 Jan 2003 04:08:09 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 04:08:09 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0947uY08942; Wed, 8 Jan 2003 23:07:56 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h0947tfL016250; Thu, 9 Jan 2003 02:07:55 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h0947qhG016229; Thu, 9 Jan 2003 02:07:52 -0200 To: gcc-patches@gcc.gnu.org Cc: "Joseph S. Myers" , Subject: Re: Problems with texinfo 4.1 on mainline/3.3 References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 02:07:52 -0200 In-Reply-To: Message-ID: Lines: 38 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 1, 2003, Andreas Jaeger wrote: > "Joseph S. Myers" writes: >> On Wed, 1 Jan 2003, Andreas Jaeger wrote: >> >>> Am I forced to upgrade or is a make rule missing for this case? >> >> The treelang Make-lang.in should be changed to follow others (e.g. java, >> f) in disabling building info if BUILD_INFO isn't set to indicate it > Like the appended patch? I just tested it with make treelang.info. > Ok to commit for 3.3 and mainline? Unfortunately, even though the patch follows existing practice in other front-ends, they're all wrong. This change would cause `make info' to not attempt to generate info files for the front-ends, like it does for cpp, gcc and gccint, even if using an old version of makeinfo. It seems to me that the correct patch would instead remove the dependency on the info files from the front-end install-info rules, and then, to avoid problems with make -j install, replace those dependencies with doc, such that, if info files are to be generated, doc depends on info depends on lang.info depends on .info depends on the front-end info files. If you'd rather have more accurate dependencies for make -j install, to avoid stalling the install of info files, you may want to try instead having the .install-info depend on .$(BUILD_INFO), defining a phony . target for the case of an empty BUILD_INFO. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75316-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:17:58 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 28241 invoked by alias); 9 Jan 2003 04:17:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28234 invoked from network); 9 Jan 2003 04:17:56 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 9 Jan 2003 04:17:56 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h094Ct114230; Wed, 8 Jan 2003 23:12:55 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h094Hhn12830; Wed, 8 Jan 2003 23:17:43 -0500 Received: from [192.168.64.12] (vpn50-26.rdu.redhat.com [172.16.50.26]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h094HfE07197; Wed, 8 Jan 2003 20:17:41 -0800 Subject: Re: [mips patch' rfa] Add MIPS32 Release 2 support. From: Anthony Green To: "cgd@broadcom.com" Cc: Richard Sandiford , Eric Christopher , gcc-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 08 Jan 2003 20:19:59 -0800 Message-Id: <1042086003.1625.13.camel@escape> Mime-Version: 1.0 On Tue, 2003-01-07 at 22:38, cgd@broadcom.com wrote: > (uh, i couldn't > find sources or an offer for sources on their web site ... would > others look and sanity check that i'm not missing something obvious... > www.algor.co.uk), Fortunately we won't need the Supreme Court to settle this AlGor situation. There's a pointer to sources off their site here: http://www.mips-uk.com/ftp/pub/software/sde5/ AG From gcc-patches-return-75317-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:21:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 29457 invoked by alias); 9 Jan 2003 04:21:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29426 invoked from network); 9 Jan 2003 04:21:12 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 04:21:12 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h094KtY11246; Wed, 8 Jan 2003 23:20:55 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h094KrfL006972; Thu, 9 Jan 2003 02:20:54 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h094KrSq006967; Thu, 9 Jan 2003 02:20:53 -0200 To: Richard Henderson Cc: "Kaveh R. Ghazi" , gcc-bugs@gcc.gnu.org, gcc-patches@gcc.gnu.org, gcc@gcc.gnu.org, libstdc++@gcc.gnu.org, oldham@codesourcery.com, ro@TechFak.Uni-Bielefeld.DE Subject: Re: Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith) References: <200212170531.AAA15561@caip.rutgers.edu> <200212241434.JAA22361@caip.rutgers.edu> <20030107221549.GR12992@redhat.com> <20030108220455.GC27635@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 02:20:52 -0200 In-Reply-To: Message-ID: Lines: 38 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 9, 2003, Alexandre Oliva wrote: > On Jan 8, 2003, Richard Henderson wrote: >> On Wed, Jan 08, 2003 at 03:17:49PM -0200, Alexandre Oliva wrote: >>> I've no idea of what LIA-1 is, but it does have as many denormal bits >>> as normal bits, it's just that the minimum exponent for a denormal is >>> higher than that of a plain doubles, since denormals start with the >>> higher double still being normal. >> Huh? No it doesn't. The minimum normalized double-double is >> { DBL_MIN_FLT, 0 }. > Nevermind, I was thinking having a denormal in the lower double would > make the whole thing denormal, but in this case the lower double > definitely isn't denormal. On third thought :-), it actually is a denormal, not in the double representation, but in the notion that implies that denormals don't have as much precision as normals. Even though there is an implicit one in the representation of the first double, if you represented the mantissa as a sequence of 106 bits, you'd get this implicit one within the denormal range. The fact that you can represent it as a normal is just an artifact of the long double representation. Well, not really, since the exponent range still enables you to represent it as normal, but it really depends on which aspects of denormals matter. My thought is that loss of mantissa bits is more important than whether there is an implied one next to the MSB of the mantissa, so I'm now trying to model that. This means LDBL_MIN_FLT should be bumped up to represent this fact too, but I suspect this would trigger other sorts of problems, so... There's no Right Thing (TM) to do... Darn, who came up with this long double representation, and why? :-( -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75318-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:24:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 454 invoked by alias); 9 Jan 2003 04:24:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 440 invoked from network); 9 Jan 2003 04:24:10 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 9 Jan 2003 04:24:10 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18WUEX-00079J-00; Wed, 08 Jan 2003 20:23:57 -0800 To: "Joseph S. Myers" Cc: Nathanael Nerode , Subject: Re: (web pages, committed) tweak 3.4 changes From: Zack Weinberg Date: Wed, 08 Jan 2003 20:23:57 -0800 In-Reply-To: ("Joseph S. Myers"'s message of "Wed, 8 Jan 2003 23:35:28 +0000 (GMT)") Message-ID: <87adib2boi.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii "Joseph S. Myers" writes: > On Wed, 8 Jan 2003, Zack Weinberg wrote: > >> Nor have we even nailed down the list of systems to be obsoleted. I >> hope to be getting back to this later today. > > But we do have the list of systems obsoleted in 3.3, they can always be > removed from mainline before the next lot is deprecated. Er? The list I was kicking around last month was intended to be systems obsoleted in 3.3. I know there's a few already marked obsolete in 3.3 config.gcc but I was hoping to cast a wider net. zw From gcc-patches-return-75319-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:25:24 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 1653 invoked by alias); 9 Jan 2003 04:25:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1642 invoked from network); 9 Jan 2003 04:25:24 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 9 Jan 2003 04:25:24 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18WUFk-00079R-00; Wed, 08 Jan 2003 20:25:12 -0800 To: Nathanael Nerode Cc: gcc-patches@gcc.gnu.org Subject: Re: (web pages, committed) tweak 3.4 changes From: Zack Weinberg Date: Wed, 08 Jan 2003 20:25:12 -0800 In-Reply-To: <20030109003306.GA6480@doctormoo> (Nathanael Nerode's message of "Wed, 8 Jan 2003 19:33:06 -0500") Message-ID: <87wulf0x1z.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <20030109003306.GA6480@doctormoo> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: > I guess not everyone was as aggressive as I was in deleting things from > b-i-b. :-) Right, change back however you like. What we did last time was wait until 3.1.0 was officially released before deleting stuff from then-mainline (now 3.3). I'm not averse to doing it earlier though. I *would* like to have a nailed-down list first. zw From gcc-patches-return-75320-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:32:42 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 5114 invoked by alias); 9 Jan 2003 04:32:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 5105 invoked from network); 9 Jan 2003 04:32:40 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by 209.249.29.67 with SMTP; 9 Jan 2003 04:32:40 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18WUMm-00079i-00; Wed, 08 Jan 2003 20:32:28 -0800 To: Nathanael Nerode Cc: gcc-patches@gcc.gnu.org Subject: Re: ANSIfy cp/parser.c From: Zack Weinberg Date: Wed, 08 Jan 2003 20:32:28 -0800 In-Reply-To: <20030109030342.GA20609@doctormoo> (Nathanael Nerode's message of "Wed, 8 Jan 2003 22:03:42 -0500") Message-ID: <87bs2r0wpv.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090011 (Oort Gnus v0.11) Emacs/21.2 (i386-pc-linux-gnu) References: <20030109030342.GA20609@doctormoo> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Nathanael Nerode writes: > Bootstrapped on i686-pc-linux-gnu. OK to commit? > > I'm doing these one file at a time because they're *huge* (and because I > have to do most of it by hand). I'm asking > for approval because the ANSIfication of the function defintions (the > way formal parameters are specified) doesn't appear to fall under the > 'obvious' rule. If someone says it does, I'll start putting these in > as soon as they bootstrap. :-) I have ambitions of applying the new parser to C as well as C++; therefore I would appreciate this *not* being applied, unless we are going to reexamine the requirement for K+R C in the C front end. zw From gcc-patches-return-75321-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:51:10 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8778 invoked by alias); 9 Jan 2003 04:51:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8764 invoked from network); 9 Jan 2003 04:51:07 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 04:51:07 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h094ooY15536; Wed, 8 Jan 2003 23:50:50 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h094onfL031722; Thu, 9 Jan 2003 02:50:49 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h094ocVI031147; Thu, 9 Jan 2003 02:50:38 -0200 To: Christian Cornelssen , Andreas Jaeger Cc: , libstdc++@gcc.gnu.org Subject: Re: [3.4] DESTDIR support completed References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 02:50:38 -0200 In-Reply-To: Message-ID: Lines: 33 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Hello, Christian, Thank you very much for pursuing this goal. destdir4.diff is ok, but I'm not entirely comfortable with this change: On Jan 3, 2003, Christian Cornelssen wrote: > Index: libstdc++-v3/ChangeLog > + * include/Makefile.am (install-data-local): [...] > + Use ${c_base_builddir} and ${std_builddir} > + as destination subdirectories to achieve consistency with > + preceding mkinstalldirs commands. No effect because both > + variables contain "." only. I suppose the goal in the Makefile rules is to make it clear that the contents of these directories are not meant to be installed in subdirectories, even if they were kept in subdirectories in the build tree. But then, it may just be a historical left-over from a day in which they were kept in separate directories in the build tree. libstdc++ folks, can you please comment on this? Regardless, I think we may as well go ahead and install the change, even if we have to revert these two lines afterwards. Andreas, I'll take your kind offer, if you haven't changed your mind :-) Thank you both very much. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75322-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:52:19 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9707 invoked by alias); 9 Jan 2003 04:52:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9700 invoked from network); 9 Jan 2003 04:52:16 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 04:52:16 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h094q2Y15685; Wed, 8 Jan 2003 23:52:02 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h094q1fL005484; Thu, 9 Jan 2003 02:52:01 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h094q1sc005475; Thu, 9 Jan 2003 02:52:01 -0200 To: Christian Cornelssen Cc: Subject: Re: [3.4] DESTDIR support completed References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 02:52:01 -0200 In-Reply-To: Message-ID: Lines: 28 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 5, 2003, Christian Cornelssen wrote: > --- libiberty/Makefile.in~ 1 Jan 2003 17:32:05 -0000 > +++ libiberty/Makefile.in 5 Jan 2003 13:16:29 -0000 > @@ -262,6 +262,7 @@ > install: install_to_$(INSTALL_DEST) install-subdir > install_to_libdir: all > + ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR) > $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n > ( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n ) > mv -f $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB) > @@ -278,6 +279,7 @@ > @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install > install_to_tooldir: all > + ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR) > $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n > ( cd $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n ) > mv -f $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB) This is ok, thanks. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75323-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 04:57:16 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15422 invoked by alias); 9 Jan 2003 04:57:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15404 invoked from network); 9 Jan 2003 04:57:15 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 04:57:15 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h094v1Y16346; Wed, 8 Jan 2003 23:57:01 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h094uxfL021984; Thu, 9 Jan 2003 02:56:59 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h094uxDg021975; Thu, 9 Jan 2003 02:56:59 -0200 To: Christian Cornelssen Cc: Subject: Re: [3.4] DESTDIR support completed References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 02:56:59 -0200 In-Reply-To: Message-ID: Lines: 24 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 5, 2003, Christian Cornelssen wrote: > I have updated the tooldir-related paragraph in > `gcc/doc/install.texi' to make clear that this applies to > cross-compilers only. This looks good to me, but I'd appreciate if some eyeballs more accustomed to reviewing documentation patches would have a look before it goes in. > Is there interest for an adaptation of the DESTDIR patch to the > 3.3 branch? I'd definitely support such a goal, especially now that I've come up with a nice way to review changes that may actually matter (i.e., those other than mere addition of ${DESTDIR}). Here's what I did: sed '/^\+/ s,\$\+[({]DESTDIR[)}],,g' | patch -p0; cvs diff -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75324-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 06:23:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 8976 invoked by alias); 9 Jan 2003 06:23:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8967 invoked from network); 9 Jan 2003 06:23:08 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by 209.249.29.67 with SMTP; 9 Jan 2003 06:23:08 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h096MqY29882; Thu, 9 Jan 2003 01:22:52 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6) with ESMTP id h096MpfL001060; Thu, 9 Jan 2003 04:22:51 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.6/8.12.6/Submit) id h096Mnb2001056; Thu, 9 Jan 2003 04:22:49 -0200 To: kaz Kojima Cc: gcc-patches@gcc.gnu.org, joern.rennecke@superh.com Subject: Re: [PATCH/RFA] SH: Problem when compiling with -O0 References: <200212290058.gBT0wYO04382@r-rr.iij4u.or.jp> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 09 Jan 2003 04:22:49 -0200 In-Reply-To: <200212290058.gBT0wYO04382@r-rr.iij4u.or.jp> Message-ID: Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Dec 28, 2002, kaz Kojima wrote: > Ok for 3.3-branch and mainline? Ok. > I guess that to recompute in shorten_branches always is the simplest > solution though I'm unsure it's the right thing to do. Sounds like a reasonable fix for now. I know we have other problems in this area, especially when branch delay-slot filling is enabled, but they're probably not related with this particular failure mode. Patch pre-approved, with a comment explaining the situation. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From gcc-patches-return-75325-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 06:27:48 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10047 invoked by alias); 9 Jan 2003 06:27:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10037 invoked from network); 9 Jan 2003 06:27:46 -0000 Received: from unknown (HELO mta01ps.bigpond.com) (144.135.25.133) by 209.249.29.67 with SMTP; 9 Jan 2003 06:27:46 -0000 Received: from bubble.local ([144.135.25.78]) by mta01ps.bigpond.com (Netscape Messaging Server 4.15 mta01ps Jul 16 2002 22:47:55) with SMTP id H8FOLX00.1W5 for ; Thu, 9 Jan 2003 16:27:33 +1000 Received: from CPE-144-136-184-243.sa.bigpond.net.au ([144.136.184.243]) by PSMAM04.mailsvc.email.bigpond.com(MailRouter V3.0n 98/22860249); 09 Jan 2003 16:27:33 Received: (qmail 985 invoked by uid 179); 9 Jan 2003 06:27:34 -0000 Date: Thu, 9 Jan 2003 16:57:34 +1030 From: Alan Modra To: gcc-patches@gcc.gnu.org Subject: g++ testsuite addition Message-ID: <20030109062734.GZ943@bubble.sa.bigpond.net.au> Mail-Followup-To: gcc-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="DIOMP1UsTsWJauNi" Content-Disposition: inline User-Agent: Mutt/1.4i --DIOMP1UsTsWJauNi Content-Type: text/plain; charset=us-ascii Content-Disposition: inline I'd like to add the attached testcase as g++.dg/abi/param1.C. It currently fails on powerpc64-linux-g++, because C++ uses a TARGET_EXPR for "obj" while C uses a VAR_DECL. For C++, code at expr.c:8868 then performs the moves, which happens before calls.c:4572. /* Special handling is required if part of the parameter lies in the register parameter area. The argument may be copied into the stack slot using memcpy(), but the original contents of the register parameter area will be restored after the memcpy() call. To ensure that the part that lies in the register parameter area is copied correctly, we emit a separate push for that part. This push should be small enough to avoid a call to memcpy(). */ After looking over the code in this area of gcc, I'm inclined to call it horribly broken for c++, and non-optimal to say the least for C. For instance: /* Now that we have saved any slots that will be overwritten by this store, mark all slots this store will use. We must do this before we actually expand the argument since the expansion itself may trigger library calls which might need to use the same stack slot. */ Why are we worrying about the part of the argument block that is going to be written? Surely we don't want to stop libcalls until the store actually occurs? And won't that be the last thing to happen in the expansion of any particular arg? Or can expand_decl_cleanup_eh do horrible things in a function arg? gcc/testsuite/ChangeLog * g++.dg/abi/param1.C: New. -- Alan Modra IBM OzLabs - Linux Technology Centre --DIOMP1UsTsWJauNi Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="param1.C" // { dg-do run } // // Fails on powerpc64-linux for structure sizes > 64 and with size not a // multiple of 8 after padding. struct object { int i1; char s1[60]; int i2; char s2[64]; }; extern int subr (struct object obj); int main () { struct object obj; obj.i1 = 1234; obj.i2 = 5678; return subr (obj); } int subr (struct object obj) { return obj.i1 != 1234 || obj.i2 != 5678; } --DIOMP1UsTsWJauNi-- From gcc-patches-return-75326-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 06:49:40 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14812 invoked by alias); 9 Jan 2003 06:49:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14803 invoked from network); 9 Jan 2003 06:49:32 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 209.249.29.67 with SMTP; 9 Jan 2003 06:49:32 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.12.5/8.12.5) with ESMTP id h096nSMn008313; Wed, 8 Jan 2003 22:49:28 -0800 Message-ID: <3E1D1B6B.9060205@bothner.com> Date: Wed, 08 Jan 2003 22:49:15 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Geoff Keating CC: gcc-patches@gcc.gnu.org Subject: Re: PATCH - remove 6 pointer fields from C's lang_identifier References: <3E19F315.1070808@bothner.com> <20030106230843.GA30910@daikokuya.co.uk> <3E1B04D7.3000800@bothner.com> <3E1B31CE.8010208@bothner.com> <200301080118.h081ImV04530@desire.geoffk.org> In-Reply-To: <200301080118.h081ImV04530@desire.geoffk.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Geoff Keating wrote: >Could you also run a test on some chunk of code that doesn't change? Hm. The results are disappointing. I did a configure (--disable-checking --enable-languages=c) followed by a 'make quickstrap', both without and with the patch. I run them both using the same expr.i, which was pre-processed from expr.c. For each case I'm showing the last two runs of multiple identical runs: /usr/bin/time /tmp/cc1-unpatched -fpreprocessed /tmp/expr.i -quiet -dumpbase expr.i -auxbase-strip /tmp/expr.s -o /tmp/expr.s 9.50user 0.21system 0:09.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (890major+9570minor)pagefaults 0swaps 9.53user 0.18system 0:09.87elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (890major+9570minor)pagefaults 0swaps /usr/bin/time /tmp/cc1-patched -fpreprocessed /tmp/expr.i -quiet -dumpbase expr.i -auxbase-strip /tmp/expr.s -o /tmp/expr.s 9.56user 0.17system 0:10.06elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (888major+9776minor)pagefaults 0swaps 9.52user 0.22system 0:09.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (888major+9776minor)pagefaults 0swaps Very little difference - comparable to the variance between runs. Though the page faults were consistent over multiple runs. The patch saved 2 major faults and caused 206 minor faults. Not sure if that's a net win or not! Spu results are similar. /usr/bin/time /tmp/cc1-unpatched /tmp/expr.i -quiet -dumpbase expr.i -auxbase-strip ~/GNU/src/utils/spu/file0.c -o /tmp/expr.s 9.47user 0.22system 0:09.78elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (889major+9839minor)pagefaults 0swaps /usr/bin/time /tmp/cc1-patched /tmp/expr.i -quiet -dumpbase expr.i -auxbase-strip ~/GNU/src/utils/spu/file0.c -o /tmp/expr.s 9.54user 0.19system 0:09.84elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (888major+9514minor)pagefaults 0swaps It is possible the payoff will be better on a more memory-constrained system. It is also possible that the savings in date memory aren't enough to make up for expanding the reader macros into more complex code, and the writer macros ty a call to a not-quite-trivial function. -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From gcc-patches-return-75327-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 06:52:59 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 16265 invoked by alias); 9 Jan 2003 06:52:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 16258 invoked from network); 9 Jan 2003 06:52:56 -0000 Received: from unknown (HELO monkey.daikokuya.co.uk) (213.152.55.49) by 209.249.29.67 with SMTP; 9 Jan 2003 06:52:56 -0000 Received: from neil by monkey.daikokuya.co.uk with local (Exim 3.36 #1 (Debian)) id 18WWY5-0006qa-00; Thu, 09 Jan 2003 06:52:17 +0000 Date: Thu, 9 Jan 2003 06:52:17 +0000 From: Neil Booth To: Zack Weinberg Cc: Nathanael Nerode , gcc-patches@gcc.gnu.org Subject: Re: ANSIfy cp/parser.c Message-ID: <20030109065216.GA26264@daikokuya.co.uk> References: <20030109030342.GA20609@doctormoo> <87bs2r0wpv.fsf@egil.codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87bs2r0wpv.fsf@egil.codesourcery.com> User-Agent: Mutt/1.4i Zack Weinberg wrote:- > Nathanael Nerode writes: > > > Bootstrapped on i686-pc-linux-gnu. OK to commit? > > > > I'm doing these one file at a time because they're *huge* (and because I > > have to do most of it by hand). I'm asking > > for approval because the ANSIfication of the function defintions (the > > way formal parameters are specified) doesn't appear to fall under the > > 'obvious' rule. If someone says it does, I'll start putting these in > > as soon as they bootstrap. :-) > > I have ambitions of applying the new parser to C as well as C++; > therefore I would appreciate this *not* being applied, unless we are > going to reexamine the requirement for K+R C in the C front end. Are you going to do that? I'll say again that I think a combined C and C++ parser is a mistake; it penalizes C in so many ways. Neil. From gcc-patches-return-75328-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 07:38:52 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 7498 invoked by alias); 9 Jan 2003 07:38:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 7490 invoked from network); 9 Jan 2003 07:38:50 -0000 Received: from unknown (HELO r-rr.iij4u.or.jp) (210.130.0.76) by 209.249.29.67 with SMTP; 9 Jan 2003 07:38:50 -0000 Received: from localhost (frgw.3in.ne.jp [210.251.121.226]) by r-rr.iij4u.or.jp (8.11.6+IIJ/8.11.6) with ESMTP id h097cXO28902; Thu, 9 Jan 2003 16:38:34 +0900 (JST) Message-Id: <200301090738.h097cXO28902@r-rr.iij4u.or.jp> To: aoliva@redhat.com Cc: gcc-patches@gcc.gnu.org, joern.rennecke@superh.com Subject: Re: [PATCH/RFA] SH: Problem when compiling with -O0 In-Reply-To: Your message of "09 Jan 2003 04:22:49 -0200" References: Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Thu, 09 Jan 2003 16:10:12 +0900 From: kaz Kojima X-Dispatcher: imput version 971024 Lines: 39 Alexandre Oliva wrote: >> I guess that to recompute in shorten_branches always is the simplest >> solution though I'm unsure it's the right thing to do. > > Sounds like a reasonable fix for now. I know we have other problems > in this area, especially when branch delay-slot filling is enabled, > but they're probably not related with this particular failure mode. > Patch pre-approved, with a comment explaining the situation. How about this? Regards, kaz -- 2003-01-09 Kaz Kojima * final.c (shorten_branches): Recompute insn length even for a non-optimizing compile. --- ORIG/gcc/gcc/final.c Sat Jan 4 08:38:20 2003 +++ LOCAL/gcc/gcc/final.c Thu Jan 9 15:34:45 2003 @@ -1291,9 +1291,14 @@ shorten_branches (first) something_changed = 1; } } - /* For a non-optimizing compile, do only a single pass. */ - if (!optimize) - break; + + /* Originally, we did only a single pass for a non-optimizing compile. + But some architectures require to recompute insn length even for + such case. For example, SH has various conditional branch insns + having different length and the first pass chooses the longest one. + It causes a smaller estimation of (minus (match_dup 0) (pc)) and + the generation of conditional branch insn which jumps to the label + out of range if we do only a single pass. */ } free (varying_length); From gcc-patches-return-75329-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 07:42:50 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 9050 invoked by alias); 9 Jan 2003 07:42:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9042 invoked from network); 9 Jan 2003 07:42:45 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 209.249.29.67 with SMTP; 9 Jan 2003 07:42:45 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h097es1F008551; Thu, 9 Jan 2003 08:40:54 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h097erIs008550; Thu, 9 Jan 2003 08:40:53 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Neil Booth Cc: Zack Weinberg , Nathanael Nerode , gcc-patches@gcc.gnu.org Subject: Re: ANSIfy cp/parser.c References: <20030109030342.GA20609@doctormoo> <87bs2r0wpv.fsf@egil.codesourcery.com> <20030109065216.GA26264@daikokuya.co.uk> From: Gabriel Dos Reis In-Reply-To: <20030109065216.GA26264@daikokuya.co.uk> Organization: Integrable Solutions Date: 09 Jan 2003 08:40:53 +0100 Message-ID: Lines: 9 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Neil Booth writes: | I'll say again that I think a combined C and C++ parser is a mistake; | it penalizes C in so many ways. I'm not sure it is a mistake; but I believe it is a very premature thing for 3.4 (even for 3.5). -- Gaby From gcc-patches-return-75330-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 07:47:47 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 10103 invoked by alias); 9 Jan 2003 07:47:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 10091 invoked from network); 9 Jan 2003 07:47:43 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 9 Jan 2003 07:47:43 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id CC349142DA; Thu, 9 Jan 2003 08:47:31 +0100 (MET) To: "Kaveh R. Ghazi" Cc: rth@redhat.com, gcc-patches@gcc.gnu.org Subject: Re: Remove warning in unwind-d2-fde.h References: <20030109030651.GF3100@redhat.com> <200301090348.WAA16916@caip.rutgers.edu> From: Andreas Jaeger Date: Thu, 09 Jan 2003 08:47:31 +0100 In-Reply-To: <200301090348.WAA16916@caip.rutgers.edu> ("Kaveh R. Ghazi"'s message of "Wed, 8 Jan 2003 22:48:29 -0500 (EST)") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii "Kaveh R. Ghazi" writes: > > From: Richard Henderson > > > > On Mon, Dec 30, 2002 at 07:22:23PM +0100, Andreas Jaeger wrote: > > > * unwind-dw2-fde.h (last_fde): Add unused attribute for obj. > > > > No, look at the logs -- this is not accepted by C++. > > r~ Thanks for the reminder. > > Hmm... luckily, I believe Mark fixed this in the new parser here: > http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00097.html > > However the 3.3. branch doesn't seem to have had this one-liner > backported to it. If it's also this easy in the old parser, we may as > well enable it there too. > > --Kaveh > > PS: remind me please why unwind-dw2-fde.h needs to be compiled with g++? Ok, I remove it from the 3.3 branch now. Shall I also remove it from mainline - I don't think it's necessary there, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75331-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 07:53:02 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 11076 invoked by alias); 9 Jan 2003 07:53:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 11063 invoked from network); 9 Jan 2003 07:52:58 -0000 Received: from unknown (HELO mta05bw.bigpond.com) (139.134.6.95) by 209.249.29.67 with SMTP; 9 Jan 2003 07:52:58 -0000 Received: from bubble.local ([144.135.24.75]) by mta05bw.bigpond.com (Netscape Messaging Server 4.15 mta05bw Jul 16 2002 22:47:55) with SMTP id H8FSJX00.0N0 for ; Thu, 9 Jan 2003 17:52:45 +1000 Received: from CPE-144-136-184-243.sa.bigpond.net.au ([144.136.184.243]) by bwmam03.mailsvc.email.bigpond.com(MailRouter V3.0n 26/21385693); 09 Jan 2003 17:52:45 Received: (qmail 8787 invoked by uid 179); 9 Jan 2003 07:52:46 -0000 Date: Thu, 9 Jan 2003 18:22:46 +1030 From: Alan Modra To: gcc-patches@gcc.gnu.org Subject: calls.c tidy Message-ID: <20030109075246.GA943@bubble.sa.bigpond.net.au> Mail-Followup-To: gcc-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i This patch is mostly a tidy-up. The only functional change is to set the alignment of stack_area in restore_fixed_argument_area, improving code generated. On powerpc64-linux, we were doing the restore using 32-bit registers rather than 64-bit. * calls.c (save_fixed_argument_area): Tidy. (restore_fixed_argument_area): Tidy. Set alignment of stack_area. (expand_call): Comment typo fixes. Don't init low_to_save. Start call chain loop at 1 if !try_tail_call. Formatting. (emit_library_call_value_1): Don't init low_to_save or high_to_save. Use save_fixed_argument_area and restore_fixed_argument_area. Tested powerpc64-linux c,c++,f no new regressions. OK to install mainline and 3.3 branch? Index: gcc/calls.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/calls.c,v retrieving revision 1.247 diff -u -p -r1.247 calls.c --- gcc/calls.c 18 Dec 2002 05:57:43 -0000 1.247 +++ gcc/calls.c 9 Jan 2003 07:30:09 -0000 @@ -909,66 +909,68 @@ save_fixed_argument_area (reg_parm_stack int *low_to_save; int *high_to_save; { - int i; - rtx save_area = NULL_RTX; + int low; + int high; - /* Compute the boundary of the that needs to be saved, if any. */ + /* Compute the boundary of the area that needs to be saved, if any. */ + high = reg_parm_stack_space; #ifdef ARGS_GROW_DOWNWARD - for (i = 0; i < reg_parm_stack_space + 1; i++) -#else - for (i = 0; i < reg_parm_stack_space; i++) + high += 1; #endif - { - if (i >= highest_outgoing_arg_in_use - || stack_usage_map[i] == 0) - continue; - - if (*low_to_save == -1) - *low_to_save = i; - - *high_to_save = i; - } - - if (*low_to_save >= 0) - { - int num_to_save = *high_to_save - *low_to_save + 1; - enum machine_mode save_mode - = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1); - rtx stack_area; + if (high > highest_outgoing_arg_in_use) + high = highest_outgoing_arg_in_use; - /* If we don't have the required alignment, must do this in BLKmode. */ - if ((*low_to_save & (MIN (GET_MODE_SIZE (save_mode), - BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1))) - save_mode = BLKmode; + for (low = 0; low < high; low++) + if (stack_usage_map[low] != 0) + { + int num_to_save; + enum machine_mode save_mode; + int delta; + rtx stack_area; + rtx save_area; + + while (stack_usage_map[--high] == 0) + ; + + *low_to_save = low; + *high_to_save = high; + + num_to_save = high - low + 1; + save_mode = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1); + + /* If we don't have the required alignment, must do this + in BLKmode. */ + if ((low & (MIN (GET_MODE_SIZE (save_mode), + BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1))) + save_mode = BLKmode; #ifdef ARGS_GROW_DOWNWARD - stack_area - = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - - *high_to_save))); + delta = -high; #else - stack_area = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - *low_to_save))); + delta = low; #endif + stack_area = gen_rtx_MEM (save_mode, + memory_address (save_mode, + plus_constant (argblock, + delta))); - set_mem_align (stack_area, PARM_BOUNDARY); - if (save_mode == BLKmode) - { - save_area = assign_stack_temp (BLKmode, num_to_save, 0); - emit_block_move (validize_mem (save_area), stack_area, - GEN_INT (num_to_save), BLOCK_OP_CALL_PARM); - } - else - { - save_area = gen_reg_rtx (save_mode); - emit_move_insn (save_area, stack_area); - } - } + set_mem_align (stack_area, PARM_BOUNDARY); + if (save_mode == BLKmode) + { + save_area = assign_stack_temp (BLKmode, num_to_save, 0); + emit_block_move (validize_mem (save_area), stack_area, + GEN_INT (num_to_save), BLOCK_OP_CALL_PARM); + } + else + { + save_area = gen_reg_rtx (save_mode); + emit_move_insn (save_area, stack_area); + } + + return save_area; + } - return save_area; + return NULL_RTX; } static void @@ -979,19 +981,18 @@ restore_fixed_argument_area (save_area, int low_to_save; { enum machine_mode save_mode = GET_MODE (save_area); + int delta; + rtx stack_area; + #ifdef ARGS_GROW_DOWNWARD - rtx stack_area - = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - - high_to_save))); + delta = -high_to_save; #else - rtx stack_area - = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - low_to_save))); + delta = low_to_save; #endif + stack_area = gen_rtx_MEM (save_mode, + memory_address (save_mode, + plus_constant (argblock, delta))); + set_mem_align (stack_area, PARM_BOUNDARY); if (save_mode != BLKmode) emit_move_insn (stack_area, save_area); @@ -2143,8 +2144,8 @@ expand_call (exp, target, ignore) int is_integrable = 0; #ifdef REG_PARM_STACK_SPACE /* Define the boundary of the register parm stack space that needs to be - save, if any. */ - int low_to_save = -1, high_to_save; + saved, if any. */ + int low_to_save, high_to_save; rtx save_area = 0; /* Place that it is saved */ #endif @@ -2600,7 +2601,7 @@ expand_call (exp, target, ignore) /* We want to make two insn chains; one for a sibling call, the other for a normal call. We will select one of the two chains after initial RTL generation is complete. */ - for (pass = 0; pass < 2; pass++) + for (pass = try_tail_call ? 0 : 1; pass < 2; pass++) { int sibcall_failure = 0; /* We want to emit any pending stack adjustments before the tail @@ -2614,9 +2615,6 @@ expand_call (exp, target, ignore) if (pass == 0) { - if (! try_tail_call) - continue; - /* Emit any queued insns now; otherwise they would end up in only one of the alternates. */ emit_queue (); @@ -3287,10 +3285,8 @@ expand_call (exp, target, ignore) { #ifdef REG_PARM_STACK_SPACE if (save_area) - { - restore_fixed_argument_area (save_area, argblock, - high_to_save, low_to_save); - } + restore_fixed_argument_area (save_area, argblock, + high_to_save, low_to_save); #endif /* If we saved any argument areas, restore them. */ @@ -3478,7 +3474,7 @@ emit_library_call_value_1 (retval, orgfu #ifdef REG_PARM_STACK_SPACE /* Define the boundary of the register parm stack space that needs to be save, if any. */ - int low_to_save = -1, high_to_save = 0; + int low_to_save, high_to_save; rtx save_area = 0; /* Place that it is saved. */ #endif @@ -3859,62 +3855,9 @@ emit_library_call_value_1 (retval, orgfu { /* The argument list is the property of the called routine and it may clobber it. If the fixed area has been used for previous - parameters, we must save and restore it. - - Here we compute the boundary of the that needs to be saved, if any. */ - -#ifdef ARGS_GROW_DOWNWARD - for (count = 0; count < reg_parm_stack_space + 1; count++) -#else - for (count = 0; count < reg_parm_stack_space; count++) -#endif - { - if (count >= highest_outgoing_arg_in_use - || stack_usage_map[count] == 0) - continue; - - if (low_to_save == -1) - low_to_save = count; - - high_to_save = count; - } - - if (low_to_save >= 0) - { - int num_to_save = high_to_save - low_to_save + 1; - enum machine_mode save_mode - = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1); - rtx stack_area; - - /* If we don't have the required alignment, must do this in BLKmode. */ - if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode), - BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1))) - save_mode = BLKmode; - -#ifdef ARGS_GROW_DOWNWARD - stack_area = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - -high_to_save))); -#else - stack_area = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - low_to_save))); -#endif - if (save_mode == BLKmode) - { - save_area = assign_stack_temp (BLKmode, num_to_save, 0); - set_mem_align (save_area, PARM_BOUNDARY); - emit_block_move (save_area, stack_area, GEN_INT (num_to_save), - BLOCK_OP_CALL_PARM); - } - else - { - save_area = gen_reg_rtx (save_mode); - emit_move_insn (save_area, stack_area); - } - } + parameters, we must save and restore it. */ + save_area = save_fixed_argument_area (reg_parm_stack_space, argblock, + &low_to_save, &high_to_save); } #endif @@ -4159,29 +4102,8 @@ emit_library_call_value_1 (retval, orgfu { #ifdef REG_PARM_STACK_SPACE if (save_area) - { - enum machine_mode save_mode = GET_MODE (save_area); -#ifdef ARGS_GROW_DOWNWARD - rtx stack_area - = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, - - high_to_save))); -#else - rtx stack_area - = gen_rtx_MEM (save_mode, - memory_address (save_mode, - plus_constant (argblock, low_to_save))); -#endif - - set_mem_align (stack_area, PARM_BOUNDARY); - if (save_mode != BLKmode) - emit_move_insn (stack_area, save_area); - else - emit_block_move (stack_area, save_area, - GEN_INT (high_to_save - low_to_save + 1), - BLOCK_OP_CALL_PARM); - } + restore_fixed_argument_area (save_area, argblock, + high_to_save, low_to_save); #endif /* If we saved any argument areas, restore them. */ -- Alan Modra IBM OzLabs - Linux Technology Centre From gcc-patches-return-75332-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 07:55:25 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 14955 invoked by alias); 9 Jan 2003 07:55:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 14943 invoked from network); 9 Jan 2003 07:55:23 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 9 Jan 2003 07:55:23 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id A7F0C14033; Thu, 9 Jan 2003 08:55:11 +0100 (MET) To: Alexandre Oliva Cc: Christian Cornelssen , , libstdc++@gcc.gnu.org Subject: Re: [3.4] DESTDIR support completed References: From: Andreas Jaeger Date: Thu, 09 Jan 2003 08:55:10 +0100 In-Reply-To: (Alexandre Oliva's message of "09 Jan 2003 02:50:38 -0200") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Alexandre Oliva writes: > Hello, Christian, > > Thank you very much for pursuing this goal. destdir4.diff is ok, but > I'm not entirely comfortable with this change: > > On Jan 3, 2003, Christian Cornelssen wrote: > >> Index: libstdc++-v3/ChangeLog > >> + * include/Makefile.am (install-data-local): [...] >> + Use ${c_base_builddir} and ${std_builddir} >> + as destination subdirectories to achieve consistency with >> + preceding mkinstalldirs commands. No effect because both >> + variables contain "." only. > > I suppose the goal in the Makefile rules is to make it clear that the > contents of these directories are not meant to be installed in > subdirectories, even if they were kept in subdirectories in the build > tree. But then, it may just be a historical left-over from a day in > which they were kept in separate directories in the build tree. > > libstdc++ folks, can you please comment on this? > > Regardless, I think we may as well go ahead and install the change, > even if we have to revert these two lines afterwards. Andreas, I'll > take your kind offer, if you haven't changed your mind :-) Thank you > both very much. Ok, I install this changeset now to CVS mainline. Thanks for the review, Alexandre, and for the patch, Christian, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75333-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 08:11:37 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 15134 invoked by alias); 9 Jan 2003 08:11:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15123 invoked from network); 9 Jan 2003 08:11:34 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 9 Jan 2003 08:11:34 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id C6BF51474C; Thu, 9 Jan 2003 09:11:22 +0100 (MET) To: Alexandre Oliva Cc: Christian Cornelssen , Subject: Re: [3.4] DESTDIR support completed References: From: Andreas Jaeger Date: Thu, 09 Jan 2003 09:11:22 +0100 In-Reply-To: (Alexandre Oliva's message of "09 Jan 2003 02:52:01 -0200") Message-ID: User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Alexandre Oliva writes: > On Jan 5, 2003, Christian Cornelssen wrote: > >> --- libiberty/Makefile.in~ 1 Jan 2003 17:32:05 -0000 >> +++ libiberty/Makefile.in 5 Jan 2003 13:16:29 -0000 >> @@ -262,6 +262,7 @@ >> install: install_to_$(INSTALL_DEST) install-subdir > >> install_to_libdir: all >> + ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR) >> $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n >> ( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n ) >> mv -f $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB) >> @@ -278,6 +279,7 @@ >> @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install > >> install_to_tooldir: all >> + ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR) >> $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n >> ( cd $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n ) >> mv -f $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB) > > This is ok, thanks. Thanks, I committed this one also, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From gcc-patches-return-75334-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 08:22:12 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20763 invoked by alias); 9 Jan 2003 08:22:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20618 invoked from network); 9 Jan 2003 08:22:05 -0000 Received: from unknown (HELO cyclone.eis.ru) (195.201.69.16) by 209.249.29.67 with SMTP; 9 Jan 2003 08:22:05 -0000 Received: (qmail 84610 invoked from network); 9 Jan 2003 08:21:49 -0000 Received: from good.for.spb.ru (HELO wild.local.eis.ru) (195.201.69.80) by cyclone.for.spb.ru with SMTP; 9 Jan 2003 08:21:49 -0000 Content-Type: text/plain; charset="iso-8859-1" From: Dmitry Reply-To: diwil@eis.ru Organization: EIS To: Joel Sherrill Subject: Re: Embedded targets problem Date: Thu, 9 Jan 2003 11:17:23 +0300 User-Agent: KMail/1.4.3 Cc: gcc@gcc.gnu.org, gcc-patches@gcc.gnu.org References: <200301081733.41836.diwil@eis.ru> <3E1C4E9F.B6A01AC8@OARcorp.com> In-Reply-To: <3E1C4E9F.B6A01AC8@OARcorp.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200301091117.23289.diwil@eis.ru> > > It looks like new 'gcov' stuff breaks embedded targets builds. > > This is probably cause gcov refers to some includes such as 'stdio.h'= and > > 'fcntl.h' which not always exist for small machines. > > This shouldn't break any embedded target which either uses newlib and > is configured --with-newlib or has a modest C library that gcc is made Well, my (msp430) target has no newlib and this (--with-newlib) configure= =20 option does not help much. And yes, we have some sort of libc which obvio= usly=20 cannot be compiled without a cross gcc buld. > aware via the proper configure options. Are you trying to build with > no references to the C library at all? Yes, I am trying to build cross gcc and cross compile 'libgcc2.c' without= any=20 target-specific library installed I think the problem comes from Makefile.in where=20 LIB2FUNCS_ST =3D _eprintf _gcov __gcc_bcmp defined and cannot be overriden by any config options. Is it possible yo apply a small patch which will fix this problem? [2003-01-03]=09whoever =09* Makefile.in=09(LIB2FUNCS_ST): define this only in case=20 'config/target/t-target' has not defined LIB2FUNCS_ST allowing small mach= ines=20 avoid building unsupported functions. Index: Makefile.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/gcc/Makefile.in,v retrieving revision 1.963 diff -c -3 -p -r1.963 Makefile.in *** Makefile.in 7 Jan 2003 17:05:05 -0000 1.963 --- Makefile.in 9 Jan 2003 08:15:28 -0000 *************** LIB2FUNCS_2 =3D _floatdixf _fixunsxfsi _fi *** 799,805 **** _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _cto= rs # Defined in libgcc2.c, included only in the static library. ! LIB2FUNCS_ST =3D _eprintf _gcov __gcc_bcmp FPBIT_FUNCS =3D _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \ _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ --- 799,805 ---- _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _cto= rs # Defined in libgcc2.c, included only in the static library. ! LIB2FUNCS_ST?=3D _eprintf _gcov __gcc_bcmp FPBIT_FUNCS =3D _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \ _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ From gcc-patches-return-75335-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 11:36:26 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 2259 invoked by alias); 9 Jan 2003 11:36:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2252 invoked from network); 9 Jan 2003 11:36:20 -0000 Received: from unknown (HELO artax.karlin.mff.cuni.cz) (195.113.31.125) by 209.249.29.67 with SMTP; 9 Jan 2003 11:36:20 -0000 Received: by artax.karlin.mff.cuni.cz (Postfix, from userid 29129) id DD5CF41D5; Thu, 9 Jan 2003 12:36:07 +0100 (CET) Date: Thu, 9 Jan 2003 12:36:07 +0100 From: Josef Zlomek To: Richard Henderson Cc: gcc-patches@gcc.gnu.org Subject: Re: Fix latent bug in optabs Message-ID: <20030109113607.GA4653@artax.karlin.mff.cuni.cz> References: <20030105151805.GA6720@artax.karlin.mff.cuni.cz> <20030109025735.GE3100@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030109025735.GE3100@redhat.com> User-Agent: Mutt/1.3.28i > > * Makefile.in (optabs.o): Add dependencies on basic-block.h and > > hard-reg-set.h. > > * basic-block.h (control_flow_insn_p): Fuction was exported. > > * cfgbuild.c (control_flow_insn_p): Fuction was made non-static. > > * optabs.c (emit_libcall_block): Emit REG_LIBCALL and REG_RETVAL > > notes only when the region is contained in a single basic block. > > Ok. I was asking for approving only for mainline and 3_3-branch but the problem may occur also with 3_2-branch (although 3.2.1 compiles my testcase). OK for 3_2 too? Josef From gcc-patches-return-75336-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 11:40:15 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 3045 invoked by alias); 9 Jan 2003 11:40:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 3029 invoked from network); 9 Jan 2003 11:40:08 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 9 Jan 2003 11:40:08 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id h09Bdtk22843 for ; Thu, 9 Jan 2003 06:39:56 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18Wb0z-00005X-00 for ; Thu, 09 Jan 2003 06:38:25 -0500 Date: Thu, 9 Jan 2003 06:38:25 -0500 To: gcc-patches@gcc.gnu.org Subject: Re: ANSIfy cp/parser.c Message-ID: <20030109113825.GA334@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode Zack wrote: >Nathanael Nerode writes: > >> Bootstrapped on i686-pc-linux-gnu. OK to commit? >> >> I'm doing these one file at a time because they're *huge* (and because I >> have to do most of it by hand). I'm asking >> for approval because the ANSIfication of the function defintions (the >> way formal parameters are specified) doesn't appear to fall under the >> 'obvious' rule. If someone says it does, I'll start putting these in >> as soon as they bootstrap. :-) > >I have ambitions of applying the new parser to C as well as C++; >therefore I would appreciate this *not* being applied, unless we are >going to reexamine the requirement for K+R C in the C front end. > >zw First of all, we clearly *are* going to reexamine it. It only exists because HP still ships a K&R compiler by default with HPUX; this has to end or become irrelevant sometime. Second, the new parser code is already loaded with ANSI-isms. By normalizing style, I believe this would actually make it easier to de-ANSIfy it later using an automated tool. --Nathanael From gcc-patches-return-75337-listarch-gcc-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 12:07:11 2003 Return-Path: Delivered-To: listarch-gcc-patches@gcc.gnu.org Received: (qmail 20897 invoked by alias); 9 Jan 2003 12:07:09 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 20890 invoked from network); 9 Jan 2003 12:07:05 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 209.249.29.67 with SMTP; 9 Jan 2003 12:07:05 -0000 Received: from [128.130.111.28] (naos [128.130.111.28]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h09C6gB5016688; Thu, 9 Jan 2003 13:06:43 +0100 (CET) Date: Thu, 9 Jan 2003 13:06:41 +0100 (CET) From: Gerald Pfeifer To: Nathanael Nerode cc: gcc-patches@gcc.gnu.org Subject: Re: (web pages, committed) tweak 3.4 changes In-Reply-To: <20030108201123.GA6568@doctormoo> Message-ID: References: <20030108201123.GA6568@doctormoo> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 8 Jan 2003, Nathanael Nerode wrote: >