diff options
| author | tv <tv@NetBSD.org> | 1999-04-06 15:07:33 +0000 |
|---|---|---|
| committer | tv <tv@NetBSD.org> | 1999-04-06 15:07:33 +0000 |
| commit | d3989ee704c3e1fdfefef445156956ca39dee0c0 (patch) | |
| tree | 7323982e6ad5775d1b78931659998a61c62cac73 /gnu | |
| parent | bfb9b83441f81daed071c027973b0e6788eddcae (diff) | |
Import egcs 1.1.2 to fix some optimizer bugs on i386 and sparc, among others.
Diffstat (limited to 'gnu')
67 files changed, 2666 insertions, 1183 deletions
diff --git a/gnu/dist/gcc/README b/gnu/dist/gcc/README index 78d3ef6dd37..c606f65ad59 100644 --- a/gnu/dist/gcc/README +++ b/gnu/dist/gcc/README @@ -1,4 +1,4 @@ -This directory contains the egcs version 1.1.1 release of the GNU C +This directory contains the egcs version 1.1.2 release of the GNU C compiler. It includes all of the support for compiling C++ and Objective C, including a run-time library for Objective C. diff --git a/gnu/dist/gcc/SERVICE b/gnu/dist/gcc/SERVICE index 46441675fd0..6404b7c6a13 100644 --- a/gnu/dist/gcc/SERVICE +++ b/gnu/dist/gcc/SERVICE @@ -35,10 +35,28 @@ have nothing to go by. Please put each e-mail address inside "<>". Please put nothing else inside "<>". Thanks! For a current copy of this directory, or to have yourself listed, ask: - gnu@prep.ai.mit.edu + gnu@gnu.org ** Please keep the entries in this file alphabetical ** +Alc?ve <infos@alcove.fr> +12 place Indira Gandhi +92230 Gennevilliers +France + +http://www.alcove.fr +T?l.: +33 1 47 33 82 84 +Fax: +33 1 47 33 76 98 + +Alc?ve offers a comprehensive range of corporate-quality +Free Software related solutions, with technical support +via telephone, fax or email and remote system management. +We also offers consulting and training. + +Rates approximately 3000FF per day, depending on the job. + +Updated: 1998-09-09 + Altrasoft <info@altrasoft.com> 4880 Stevens Creek Blvd., Suite 205 San Jose, CA 95129-1034 @@ -98,53 +116,49 @@ Rates approximately 15 USD per hour. Updated: 1997-05-25 -Joseph Arceneaux <jla@ai.mit.edu> -PO Box 460633 http://www.samsara.com/~jla -San Francisco, CA 94146-0633 +Joseph Arceneaux <joe@arceneaux.com> +307 Chattanooga St. http://www.arceneaux.com +San Francisco, CA 94114 +1 415 648 9988 -+1 415 285 9088 - -Recently led the project making Wells Fargo Bank the first to provide -secure customer account access over the Internet. -Former FSF staffmember. Performed X11 implementation of Emacs version -19, designed and implemented WYSIWYG Emacs. Installed and -administered FSF network. Maintainer of GNU indent. Over 15 years -experience with Unix and other systems, from writing ROM monitors to -UI design and system administration. +I am a former FSF staffmember who made Wells Fargo Bank the first bank +to provide secure banking over the Internet. I have 20 years +experience with various computer systems. I performed the X11 +implementation of Emacs version 19, and designed and implemented +WYSIWYG features of Emacs. I also installed and administered FSF +network. Maintainer of GNU indent. I provide installation, porting, debugging and customization or -development of GNU and other Unix software. I also design and -implement free software projects and consult on software engineering -and systems design. Handholding and teaching services are also -available as well as things like LAN and compute--infrastructure design. +development of GNU and other software. I also design and implement +free software projects and consult on software engineering, security, +and intranet design. Time and material rates around $150 USD per hour, depending upon the particular job. I am also very interested in fixed-bid jobs. For selected non-profit organizations with worthy goals, I work for free. -Updated: 1995-10-17 +Updated: 1998-06-24 -Gerd Aschemann <Aschemann@Informatik.TH-Darmstadt.de> +Dipl.-Inform. Gerd Aschemann <Aschemann@Informatik.TU-Darmstadt.de> Osannstr. 49 D-64285 Darmstadt Tel.: +49 6151 16 2259 -http://www.informatik.th-darmstadt.de/~ascheman/ +http://www.informatik.tu-darmstadt.de/VS/Mitarbeiter/Aschemann/ -- System Administrator (UNIX) at CS Department, TU Darmstadt, Germany -- 17 years experience with CS, System administration on different platforms -- 10 years with UNIX/Networking/FreeWare/GNU/X11 -- 8 years organizer of Operating Systems and Distributed Systems courses +- System Administrator (UNIX and NT) at CS Department, TU Darmstadt, Germany +- 18 years working in the CS field, System administration on different platforms +- 12 years with UNIX/Networking/FreeWare/GNU/X11 +- 9 years courses on Operating Systems and Distributed Systems - Lectures on System and Network Administration -- Platforms: Solaris, SunOS, Ultrix, OSF1, HP-UX, Linux, FreeBSD, AIX, SCO -- Distributed Platforms and Information Systems (CORBA, WWW, Java, FTP) +- Platforms: Solaris, Linux, SunOS, Ultrix, HP-UX, Digital Unix, AIX, SCO, FreeBSDs +- Distributed Platforms and Information Systems (CORBA, WWW, Java) - Experience with parallel environments (Connection Machine, Meiko, Parsytec) - Consultant -Rates are at 130,-- DM (~80 US$) per hour minimum, depending on the job. +Rates are at 150,-- DM (~85 US$) per hour minimum, depending on the job. I am willing to travel for sufficiently large jobs. -Updated: 1997-05-07 +Updated: 1998-07-23 Basis Technology Corp. @@ -181,7 +195,7 @@ GNU Contributions: Contacts: Carl Hoffman, Steve Cohen, or Karen Watts -Updated: 1997-05-07 +Updated: 1998-07-23 Laurent Bernardin 16, rue Dicks @@ -196,48 +210,68 @@ Expertise: C, C++, Java, Motif, X, Unix administration, network security Rates: ~60 US$ / hour (Flux 2000.-) -Updated: 1997-05-07 +Updated: 1998-07-23 + +Dean Brettle Computer Consulting + +<dean@brettle.com> +http://www.brettle.com/ + +7485 Rush River Drive +Suite 710-193 +Sacramento, CA 95831 +916-422-8129 + +I provide development, technical support, and training for free software +and open source systems including GNU/Linux, the GNU development suite, +Tcl/Tk, Emacs, and the GIMP. + +I have over 9 years experience building and maintaining systems ranging +from computed tomography systems to airborne sensor control systems -- +all with free software. + +Rates range from $65.00/hr to $72.50/hr USD, depending upon work +location. I am also willing to work on fixed price contracts. + +Updated: 1998-07-07 Philip Brown <phil@mitre.org> (703) 893-8967 (prefer email) -Northern-VA, D.C. Area -Rates: $40/Hr; less for educational or charitable organizations +Northern-VA, D.C. Area (world-wide via internet) +Rates: $45/Hr + extra for site visit; less for educational or charitable organizations Systems Supported: - HP9000/7xx running HP/UX 8.07 - 10.X - IBM RS6000 running AIX 3.2.X - Also SGI/Indy and Sun/Sparcs + + Sun boxes running Solaris 2.5-up + HP9000s running HP/UX 8.07 - 10.X + IBM RS6000 running AIX 3.2.X-up + Also SGI/Indy Software Supported: - Most all FSF (Gnu) software - esp. GCC, Emacs, Binutils, GS, etc... + Most all FSF (Gnu) software + esp. GCC, GDB, Emacs, Binutils, GS, et al... Statement: I'd be more than happy to assist anyone in my area with acquiring, installing, and configuring any FSF tools/utilities on any of the above systems. I'm also willing to work with other UNIX systems not - listed above. In addition, I'd be happy to share my many years of + listed above. In addition, I'm glad to share my many years of experience with anyone having difficulty using or configuring these tools. I've been installing and using them for about 5 years now and I'll swear by their quality and the people/principles that made them available. - Phil Brown + Phil Brown -Updated: 1997-05-07 +Updated: 1998-07-23 James Craig Burley 97 Arrowhead Circle Ashland, MA 01721-1987 -508 881-6087, -4745 -(Please call only between 0900-1700 Eastern time, and only if you -are prepared to hire me -- ask me to help you for free only -via email, to which I might or might not respond.) -Email: <burley@gnu.org> --preferred-- - <burley@cygnus.com> - <burley@world.std.com> +(Email and postal mail contacts only, please.) +Email: <craig@jcb-sc.com> Expertise: Compiler Internals (author of GNU Fortran, for example) @@ -248,63 +282,71 @@ Expertise: Debugging (often asked to help debug Other People's Code) Documentation (authored many books and ran a few doc projects) Extensive experience with a variety of operating systems, hardware, - languages, and so on + languages, and so on Rate: $100/hour -- willing to consider flat-fee arrangements -Updated: 1997-05-07 +Updated: 1999-02-01 -Thomas Bushnell, n/BSG <thomas@gnu.org> +Thomas Bushnell, BSG <thomas@gnu.org> Becket House 66 Highland Ave. No. 8 Somerville, MA 02143 (617) 623-0654 - All GNU software: Installation, customization, answering simple or - complex questions, bug fixing, extension. + complex questions, bug fixing, extension. -Experience: I have done Unix and GNU programming for several years, - I am the primary author of the Hurd (which provides most - kernel related facilities for the GNU OS). +Experience: I have done Unix and GNU programming for many years. + I am the primary author of the Hurd (which provides most + kernel related facilities for the GNU OS). I am easily available in the Cambridge/Boston area; work via email. I am willing to travel for sufficiently large jobs. Rates: $100/hr, negotiable, less for non-profit organizations. -Updated: 1997-05-07 +Updated: 1998-07-27 - C2V Michel Delval <mfd@ccv.fr> - 82 bd Haussmann Jean-Alain Le Borgne <jalb@ccv.fr> - 75008 Paris - France - Tel (33 1) 40.08.07.07 - Fax (33 1) 43.87.35.99 - Compuserve 100413,1012 - http://c2v.com - - We offer source or source+binary distribution, installation, training, - maintenance, technical support, consulting, specific development and - followup on the GNU software development environment: Emacs, gcc/g++, - binutils, gas, gdb. - - Experience: adapted gcc, gas and binutils to work as cross-development - tools for the Thomson D950 DSP chip: GCC parser and typing system - have been augmented to allow the manipulation of variables located in - separated memory spaces. Porting on new platforms, and professionally - developing software with the GNU tools in the Unix/X11 environment - since they were first available. - - Rates: from 2000 FF/day to 150 000 FF/year, 40% discount for - educational institutions, add taxes and expenses. Ask for list. - -Updated: 1997-05-09 +C2V Michel Delval <mfd@c2v.com> +82 bd Haussmann Jean-Alain Le Borgne <jalb@c2v.com> +75008 Paris +France +Tel (33 1) 40.08.07.07 +Fax (33 1) 43.87.35.99 +Compuserve 100413,1012 +http://www.c2v.com/freesoft.htm +e-mail: <consult@c2v.com> + +Services: we offer source or source+binary distribution, +installation, training, maintenance, technical support, +consulting, specific development and followup on the GNU software +development environment: Emacs, gcc/g++, binutils, gas, gdb. + +Porting on new platforms, and professionally developing software +with the GNU tools in the Unix/X11 environment since they were +first available. + +Experience: GNU C Compilation toolchain for the SGS-Thomson D950 +and ST20 DSP chips. + +GNU C compilation toolchain (cross-compiler, compiler, linker, +assembler, debugger) for SparcV7 ERC32 based space systems +(Sextant Avionique / Alcatel Espace). + +Feasability study, analysis and prototyping of a complete +compilation toolchain based on the GNU programming tools for the +CSEM RISC microprocessor family. + +Rates: from 2000 FF/day to 150 000 FF/year, 40% discount for +educational institutions, add taxes and expenses. Ask for list. + +Updated: 1998-07-23 Bruce Dawson - <jbd@codemeta.com> CodeMeta, Inc. -Epping, NH USA -800-468-8750 +Manchester, NH USA +800-354-2209 Specializing in GNU tools such as guile, CVS, gnats, bash, gawk, fileutils... @@ -320,7 +362,7 @@ Rate: $75/hour or per quote. http://www.codemeta.com -Updated: 1997-05-09 +Updated: 1998-07-23 Kevin Cosgrove <kevinc@dOink.COM> @@ -335,52 +377,53 @@ Kevin Cosgrove <kevinc@dOink.COM> Updated: 1997-05-07 Couvares Consulting -211 W. Gilman St., Suite 3W -Madison, WI 53703 USA -Phone: (608) 256-6201 -EMail: <couvares@family.hampshire.edu> +1312 Chandler St. +Madison, WI 53715 +Phone: (608) 256-6901 +Email: <couvares@poboxes.com> Contact: Peter F. Couvares -Type of support: We offer phone/email support, installation, ongoing - administration, training, programming, and specialized consulting for - free software and other UNIX systems. +Type of support: We offer phone/email support, installation, systems +integration, systems programming, training, and specialized consulting +services for free software in UNIX and NT environments. -Sample prices: USD75/hour commercial, 40/hour nonprofit, sliding scale -for individuals. +Sample prices: USD100/hour commercial, 50/hour non-profit, sliding +scale for individuals. -Updated: 1996-12-04 +Updated: 1998-07-23 -Stuart Cracraft <cracraft@ai.mit.edu> -25682 Cresta Loma -Laguna Niguel, CA, 92677, USA -GNUline: 714-308-7900 -Website: http://www.earthlink.net/~cracraft/index.html -Rate: $90/hour +Stuart Cracraft <cracraft@ai.mit.edu> +P.O. Box 6752 +Laguna Niguel, CA, 92607, USA +Phone: 714-308-7900 +Website: http://home.earthlink.net/~cracraft/index.html +Rate: $50/hour, and as appropriate for the project. + Consultation topics: Entire GNU suite - porting, compilation, installation, -user-training, administrator-training -Method: telephone line support, call-in via modem to your site, -work over the Internet, or in-person visit. - -Experience: supporting GNU since the mid-1980's, coordinator -of GNU Chess (original author), GNU Shogi, GNU Go. Ported GNU Emacs -to Solaris (System V Release 4). Expertise in C, Emacs Lisp, Perl, -Expect, Oracle, Informix, SunOS, Solaris, NIS, NFS. +user-training, administrator-training. -Customized programming also available. +Method: via any combination of telephone, dialup, Internet, in-person, email. -Updated: 1997-05-07 +Experience: supporting GNU since project inception, original port of +GNU Emacs to Sun Solaris, original author of GNU Emacs online tutorial. +Expertise in C, Emacs Lisp, Perl, Expect, Oracle, Informix, SunOS, Solaris, +NIS, NFS, system-monitoring via paging. Unix System and Database +administration or development. Coordinator of the GNU mascots: GNU Chess, +GNU Shogi, GNU Go. + +Updated: 1998-07-23 Noel Cragg <noel@cyclic.com> 6244 Aberdeen Av Goleta CA 93117 -805-899-4695 +805-964-1892 I'll do installation, debugging, and extension of GNU tools on a contract basis. CVS and configuration management are my current specialties. Rate: $75/hour or per-project negotiated fee. -Updated: 1997-05-07 +Updated: 1998-07-22 Cygnus Solutions <info@cygnus.com> @@ -414,37 +457,46 @@ Cygnus Solutions contacts: Updated: 1997-09-02 by rms Marcus G. Daniels <marcusd@gnu.org> -31060 S. Kaufman Rd. <marcus@tdb.com> -Canby, OR 97013-9520 <marcus@sysc.pdx.edu> -(503) 651-2694 +1399 Hyde Park Road <mgd@santafe.edu> +Santa Fe, NM 87501 <marcus@tdb.com> +(505)984-8800 x267 I can customize, extend, port, and repair many types of free software. -I maintain the CLISP Common Lisp implementation and contribute to -several GNU packages (e.g. Emacs). Ten years of C and Unix -experience. Consulting rates start at $40 US/hr. +I have software maintenance experience (e.g. CLISP, Swarm), and have +contributed to several GNU packages (e.g. Emacs). Twelve years of C +and Unix experience. Consulting rates start at $60 US/hr. -Updated: 1997-05-07 +Updated: 1998-07-22 -Edgar Der-Danieliantz (Danielyan) <edd@acm.org> -P.O. Box 10 FAX +374 2 28 50 82 -Yerevan 375009 -ARMENIA +DSS Distributed Systems Software, Inc. +7500 Abercrombie Dr., Suite 103 <dss@dss.bc.ca> +Richmond, British Columbia V6Y 3J9 http://www.dss.bc.ca +CANADA (604) 270-9559 - Support for GCC, X Window System, WWW, Tcl/Tk, logic programming, - Internet security, TCP/IP. +GNU-related services: + We specialize in support for GCC (mainly C and C++), including porting, + retargeting, and customizing. + Also, GNU and other free software that falls within our areas of expertise. - Experience: - OS's: 4.4BSD, SVR4.2, FreeBSD, SCO, Solaris, UnixWare. - Languages: C, C++, Objective C, Pascal, Tcl/Tk, Perl, Prolog - Platforms: Intel, SPARC, Mac, VAX, NeXT. +Expertise: + DSS provides software design, implementation, and consulting services. - Rates: Depending on type of work, approx. $20/hour. Contact for more - information. - Negotiable for individuals and non-profit organizations. - FREE for individuals who can't pay. Your 'Thanks!' just enough! :-) - Payment by international wire transfer or check. + Distributed systems: + o Client/Server architectures, computer networking, communication +protocols + o Directory systems, including X.500 and LDAP + o High-performance and special-purpose distributed systems and databases: + scalability, reliability, availability, transactions + o Computer systems performance analysis -Updated: 1997-05-07 + Compilers, translators, and interpreters, including "small" and + special-purpose languages + +Rates: + Consulting rates are $85-$300 (Canadian dollars) per hour, plus + applicable taxes. Fixed-cost projects are also possible. + +Updated: 1998-06-24 Echo Labs <echo@iinet.net.au> 29 Weld St, http://www.iinet.net.au/~echo/ @@ -459,22 +511,51 @@ based on more traditional technologies. Internet/intranet and data communications solutions, for all platforms are undertaken. GUI front-ends done quickly. -While typically involved in engineering and technical area, any -GNU/freeware software will be supported. +While typically involved in engineering and technical areas, any +GNU/Open Source software will be supported. For further details see: http://www.iinet.net.au/~echo/ -Experience: 12+ years C/Unix, Sun, SCO, Linux, Win/NT. +Experience: 13+ years C/Unix, Sun, SCO, Linux, Win/NT. + Secure WWW servers (Apache SSL), Ecommerce solutions. Systems programming, device drivers, hardware interfacing. - GNU tools/utilities, - Embedded & realtime systems, software, firmware, hardware. + GNU tools/utilities, Embedded & realtime systems. Communications protocols and implementation. Degrees: BAppSc (CS), Curtin University, Perth Rates: AUS $50-75/hr neg. -Updated: 1997-05-09 +Updated: 1998-07-23 + +Andrew Ford <A.Ford@ford-mason.co.uk> +Ford & Mason Ltd. http://www.ford-mason.co.uk/aford/ +South Wing, Compton House Tel: +44 1531 829900 +Compton Green, Redmarley Fax: +44 1531 829901 +Gloucester, United Kingdom + +Experience: + * 18 years in the computer industry + * 14 years Unix/C programming experience + * 10 years experience with GNU software + * 4 years web experience (author of the first book about setting up a web site) + +Services offered: + * Installing and customizing GNU and other free software + * GNU Emacs customization and emacs lisp coding + * Perl module development + * TeX and LaTeX macro development + * software development (especially in Perl, C, C++) + * web site setup (with Apache) + * web application development with mod_perl + * translation (German -> English) + * writing documentation + +Rates: + around 60 pounds/hour (approx US$80/hour) plus expenses + less for charities and non-profit organization + +Updated: 1998-06-24 Free Software Association of Germany Michaela Merz @@ -498,27 +579,28 @@ response team) : 300 US$ / hour Entered: 1994-04-14 -Noah Friedman <friedman@prep.ai.mit.edu> -1111 W. El Camino Real #109-331 -Sunnyvale, CA 94087 +Noah Friedman <friedman@splode.com> +4463 Moraga Avenue +Oakland, CA 94611 (permanent) Author of several Emacs Lisp packages and parts of Emacs, as well as numerous network and unix system utilities. Co-maintained GNU Texinfo and -Autoconf for a couple of years. Experienced unix systems administrator. +Autoconf for a couple of years. Experienced unix systems engineer. FSF employee Feb 1991--Sep 1994. I can perform installation, porting, and enhancement of all GNU software -and any other free software, including the Linux kernel; system design and -administration for unix-type systems and IP networks; and I am willing to -provide handholding for shell programming, Emacs Lisp development, and -version control systems such as RCS and CVS. - -Fees negotiable, averaging $75-$100/hour. I can work in the California bay -area or anywhere accessible on the Internet. For larger jobs I may be +and any other free software, especially for Linux/GNU systems; design +high-capacity hardware-redundant servers for production environments; +provide consulting on the use of version control management with CVS; and I +am willing to provide handholding for shell programming and Emacs Lisp +development. + +Fees negotiable, averaging $100-$150/hour. I can work in the California +bay area or anywhere accessible on the Internet. For larger jobs I may be willing to travel. -Updated: 1997-05-08 +Updated: 1998-06-24 Ronald F. Guilmette <rfg@monkeys.com> RG Consulting @@ -561,7 +643,30 @@ Other qualifications: Rates: Variable depending upon contract duration. Call for quote. -Updated: 1997-05-07 +Updated: 1998-07-10 + +Kevin Harris <gordie@cyberramp.net> +Dallas, Texas USA + +Entire GNU suite - porting, compilation, installation and maintenance +Platforms: Any unix variant (AIX, *BSD, Digital Unix, HP/UX, GNU/Linux, +Solaris, SunOS, et al) + +Method: Call-in via modem to your site, telnet, or on-site. + +Rates: US $0-75/hour depending upon client requirements + +Note: If you are an individual installing GNU software on your personal Linux +system, or are a non-profit organization, my hourly rate for you is simple: +FREE. You just have to pay for the phone calls and/or travel/lodging, if any is +required. + +Experience: I've used, supported and maintained GNU software on numerous unix +systems since 1989. + +I have extensive experience in C, Emacs Lisp, Perl and general unix systems. + +Updated: 1998-06-24 Michael P. Deignan Ideamation, Inc. @@ -574,49 +679,30 @@ Rate: Varies depending on complexity of task. Hourly and fixed-rate contracts are available. Programs Supported: All -Updated: 1997-05-07 - -Interactive Information Limited - -Interactive Information Limited is an Edinburgh-based company that -specialises in WWW services and support for using the Internet for -marketing. - -Our staff have many years experience in using, and developing lisp packages -within, Emacs, and in using other GNU/Unix tools, particularly under public -domain UNIXes. - -We can provide services throughout the UK, at any level from general -consultancy through fetching, installing and customising software to -bespoke programming. Fees would be in the range #300 - #600 per day, -depending primarily on the size of the job. - -You can contact us - by email: <enquire@interactive.co.uk> - by phone: 0370 30 40 52 (UK) - (+44) 370 30 40 52 (International) - by post: 3, Lauriston Gardens, - Edinburgh EH3 9HH - Scotland - -Entered: 1997-05-09 +Updated: 1998-07-23 -Scott D. Kalter <sdk@twinsun.com> -2032 Corral Canyon -Malibu, CA 90265-9503 -Home: (310) 456-0254 - -Very familiar with all levels of Elisp programming. Taught Emacs use -and customization in universities and industry. Extensive -troubleshooting and user support experience. Co-developed an -object-oriented extension to Elisp (Eoops) that can be used for -projects. Extensive Elisp level modification for rapid prototyping of -designs used in groupware research. This includes the development of -an infrastructure to support multiple, communicating Emacs processes. - -Prefer e-mail communication to telephone calls. - -Updated: 1997-05-07 + Interactive Information Limited is an Edinburgh-based company that + specialises in WWW services and in particular support for accessing + existing systems and information. + + Our staff have many years experience in using, and developing lisp packages + within, Emacs, and in using other GNU/Unix tools, particularly under public + domain UNIXes. + + We can provide services throughout the UK, at any level from general + consultancy through fetching, installing and customising software to + bespoke programming. Fees would be in the range #300 - #600 per day, + depending primarily on the size of the job. + + You can contact us + by email: <enquire@interactive.co.uk> + by phone: 0370 30 40 52 (UK) + (+44) 370 30 40 52 (International) + by post: 3, Lauriston Gardens, + Edinburgh EH3 9HH + Scotland + +Updated: 1998-07-24 Kaman Sciences Corporation Griffiss Business & Technology Park @@ -645,12 +731,12 @@ Updated: 1997-05-07 Joseph R. Kiniry <kiniry@cs.caltech.edu> Caltech Mailstop 256-80 http://www.cs.caltech.edu/~kiniry/ Pasadena, CA 91125 <jrk@metagenesis.com> -Phone: 818-395-4840 -Fax: 818-792-4257 +Phone: 626-395-4840 +Fax: 626-792-4257 -Long-term high-level consultant in a variety of domains. See -http://www.cs.caltech.edu/~kiniry/resume.html for more information on -professional and academic background. +Long-term high-level consultant with four advanced degrees in a +variety of domains. See http://www.cs.caltech.edu/~kiniry/resume.html +for more information on professional and academic background. I provide installation, porting, debugging, customization, design, and development of GNU and other UNIX and non-UNIX software. I am or have @@ -658,7 +744,7 @@ been a certified developer with Microsoft, SunSoft, NeXT, and Amiga. I have a great deal of development and management experience and an extremely broad background which contributes to my excellent system integration capabilities. I have a special expertise and conduct -research in distributed object technologies. +research in distributed systems and component/object technologies. Time and material rates for local work vary regionally, but are currently $250 per hour on the west coast. Other rates apply for @@ -666,20 +752,16 @@ long-term jobs (day rates, travel, etc.) and remote work (usually 1/2 fee). I am interested in fixed-bid jobs and will work for lower rates for non-profit organizations and educational institutions. -Updated: 1997-05-07 +Updated: 1998-08-27 Bradley M. Kuhn -<bkuhn@acm.org> +<bkuhn@ebb.org> http://www.ebb.org/bkuhn -I am available for Unix system administration consulting, including but not -limited to installation, configuration and integration of GNU tools and other -copy-lefted software such as GNU/Linux and the various distributions of -GNU/Linux. - -I am particularly skilled at integration of GNU and other copy-lefted software -into new environments that have not used such tools in the past, and porting -the GNU software to new Unix-based platforms. +I am available for Unix system administration and software development +consulting, including but not limited to installation, configuration and +integration of GNU tools and other copy-lefted software such as GNU/Linux +and the various distributions of GNU/Linux. Please visit my homepage for more information on my background and skills. My resume is also available there. @@ -688,20 +770,16 @@ I am available for both 1099 (preferred) and W2 on-site contracting in the Cincinnati, OH, USA metropolitan area, as well as remote consulting via dialup or Internet connection anywhere in the USA. I have no interest in permanent relocation at this time. - + My rate varies greatly between $25-$40/hour, depending on the circumstances. Rates for non-profit organizations are substantially lower, and possibly free. -Please note that I have no interest in working with any Micro$oft related -products! I want the primary focus of my work to be contributing -to the free software community. - -Updated: 1997-12-04 +Updated: 1998-09-12 -Fen Labalme <fen@comedia.com> -CoMedia Consulting http//www.comedia.com/comedia/ -40 Carl Street #4 WE ARE EVERYWHERE -San Francisco CA 94117 JUST SAY "KNOW" +Fen Labalme <fen@comedia.com> +CoMedia Consulting http://www.comedia.com/ +142 S. Lake Merced Hill WE ARE EVERYWHERE +San Francisco CA 94132 JUST SAY "KNOW" Consulting, installation, customization and training for GNU Emacs, and selected other GNU & network software. Design & implementation @@ -709,10 +787,10 @@ of free software projects, as well as software engineering & system design. I have been hacking Emacs since '76 when it was TECO and ^R macros (don't ask), and am inter/intra-network, UNIX & Web friendly. -Rates: $75 hour & up, depending; flat rate jobs considered. - Lower rates, barter or free for selected non-profits. +Rates: $150 hour & up, depending; flat rate jobs considered. + Lower rates, barter or free for selected non-profits. -Updated: 1997-05-07 +Updated: 1998-06-24 Greg Lehey LEMIS @@ -728,17 +806,50 @@ Mail <grog@lemis.com> Services: Supply, porting, installation, consultation on all GNU products. -Experience: 20 years OS and compiler experience, ports of most GNU +Experience: 25 years OS and compiler experience, ports of most GNU products. Author of ported software CD-ROM for UNIX System V.4.2, "Porting UNIX Software" (O'Reilly), "Installing and Running FreeBSD" and "The Complete FreeBSD" (both Walnut Creek). -Rates: Choice of AUD 120 per hour or hotline rates AUD 2.50 DM per -minute. Outside Australia, $US 100 per hour or $US 2 per minute. -Quick questions may be free. Limited free support available for +Rates: Choice of AUD 180 per hour or hotline rates AUD 3 per minute. +Outside Australia, $US 100 per hour or $US 2 per minute. Quick +questions may be free. Limited free support available for purchasers of LEMIS CD-ROMs. -Updated: 1997-05-09 +Updated: 1998-08-26 + +Alan Lehotsky <qsmgmt@tiac.net> +Quality Software Management +634 West St +Carlisle, MA 01741 + +Phone: (978)287-0435 +Fax: (978)287-0436 + +Services: + - Support for GNU compilers, including rehost/retarget + - General system software work (SW tools, O/S, device drivers) + - runtime library (especially floating point) + - project management + - software process improvement + +Experience: 15+ years of design and implementation of optimizing + compilers. "Mr. Bliss" at Digital in the 70's and early + 80's. Experience with Motorola 68k, PowerPC, SPARC, x86, + NS32K, ADI SHARC DSP. Compilers for languages including + Ada, BLISS, C, C++, FORTRAN, Pascal, Modula/2, O/S + experience includes Unix (OSF/1, SunOS, Solaris, AIX, HP/UX), + VAX/VMS, Windows/NT, MacOS. + + 4 years experience with GCC internals, including major + changes to support 8 bit bytes on word-address SHARC DSP. + +References available + +Rates: $100/hr + fixed price possible for well-defined deliverables + +Updated: 1998-06-24 Rohan Lenard <rjl@wr.com.au> 32 Holtermann St. @@ -746,7 +857,7 @@ Crows Nest, NSW 2065 AUSTRALIA +61 411250024 -* The human face behind the bug-g++@prep.ai.mit.edu mailing list - known +* The human face behind the bug-g++@gnu.org mailing list - known in the past as <rjl@iassf.easams.com.au> and <rjl@ot.com.au> - now known as <rjl@wr.com.au>. @@ -786,7 +897,7 @@ WWW: http://www.netvision.net.il/php/reuven Consulting rates: $75/hour, less for educational institutions. -Updated: 1997-05-07 +Updated: 1998-06-24 Richard Levitte (in TeX: Richard Levitte Levitte Programming Levitte Programming @@ -825,6 +936,28 @@ Your Rate: Updated: 1997-05-08 +Sean Levy <attila@StAlphonsos.COM> +352 Roup Ave http://www.StAlphonsos.COM/~attila/ +Pittsburgh, PA 15232 +1.412.361.7802 +USA + +I have been a professional hacker for over 15 years, and have worked on +everything from PDP-10's and -11's and early microcomputers to modern Unix +workstations of various kinds, at all levels. I've done every kind of +hacking, in many different languages (including some I designed and +implemented). Current efforts are focused on Linux, GNU software, WWW-based +systems, and security. My resume and PGP key are available via my web +pages. + +Based in Pittsburgh, PA, available anywhere via the Internet. Possibility +of travel for some jobs. Speak Spanish, have traveled in Europe and +Scandinavia. + +Rates: $100 USD/hour standard, lower for non-profits or other worthy causes, + $200 USD/hour for pager access and 24-hour support + +Updated: 1998-06-24 + Lexa Software info@lexa.com 1590 The Alameda, Suite 102 San Jose, CA 95126 @@ -843,32 +976,24 @@ to 2, 5, 25 and larger number of users via phone, email, ftp. Updated: 1997-05-01 Gord Matzigkeit <gord@gnu.org> -2220 Capitol Hill Crescent http://www.m-tech.ab.ca/~gord/ -Calgary, Alberta T2M 4B9 Voice: (403) 282-1387 -CANADA FAX: (403) 284-0137 +#15, 2105 Cornwall Street http://www.fig.org/~gord/ +Regina, Saskatchewan S4P 2K8 Voice: (306) 522-7884 +CANADA -I will help install badly-behaved source code packages, and have experience -fixing them to conform to GNU standards. I will gladly help novices and -intermediate computer users to understand, install, and use free software, -whether or not I have prior experience with that software. I know my -limitations well, and will freely give other contacts if I do not want to -solve your problem myself. +I will gladly help novice and intermediate computer users to install, +understand, and use free software, whether or not I have prior +experience with that software. I know my limitations well, and will +freely give other contacts if I cannot solve your problem myself. -I have installed and administered free and proprietary systems in home, -academic, and business environments. I have practical experience in most -aspects of Unix and network security. I know how to diagnose a complex -existing computer system and incrementally replace it with a superior free -system without disrupting service. +I have over 3 years of experience with several of the major free OSes: +Linux/GNU (Red Hat, Debian, Slackware), NetBSD, FreeBSD, and GNU/Hurd. +Some of my specialties are networking, Emacs, Automake, Autoconf, C, +Perl, and shell script programming. -I have over 2 years of experience with several of the major free OSes: -Linux/GNU (Red Hat, Debian, Slackware), NetBSD, FreeBSD, and GNU/Hurd. I am -the maintainer of GNU Libtool and GNU DLD. Some of my specialties are: -Emacs, Automake, Autoconf, SANE, C, Perl, and shell script programming. +My rates are negotiable depending on the task: usually $10-$40 +(Canadian) per hour. -My rates start at $10 (Canadian dollars) per hour. When I am not starving, I -do not charge worthy non-profit organizations. - -Updated: 1997-05-08 +Updated: 1998-10-19 Andrew McCallum 6623 Dalzell Place @@ -898,63 +1023,111 @@ Rates: $90-$150 / hour, negotiable, depending on many variables. Updated: 1997-05-07 -Erik Naggum <erik@naggum.no> -P.O. Box 1570 Vika http://www.naggum.no -0118 OSLO phone: +47 8800 8879 -NORWAY NIC handle: EN9 - -Background: I have extensive experience with programming under Unix, in C -in particular (since 1983), with standards and specifications for Internet -protocols (since 1987), International Standards for character sets and -encoding schemes (since 1988), ISO 8879 SGML (since 1990, national head of -delegation to ISO/IEC JTC 1/SC 18/WG 8 since 1991), and ANSI X3.226 Common -Lisp (since early 1994). I have been an Emacs user and programmer from -1984 to 1987 (TOPS-20) and from 1991 to present (Unix). since early 1994, -I have worked on GNU Emacs development, in both Lisp and C, and since mid -1995, I have been tracking the development code. - -Services I offer the free software community include supporting Emacs users -and programmers with expert advice (gratis on USENET or mailing lists where -others may benefit), customizing and writing Emacs functions and packages, -delivering courses and seminars from tutorials to writing Emacs Lisp and C -extensions, and providing general aid with all GNU software. - -My standard rate is a flat USD 80 per hour or USD 2 per minute (you decide -which time unit to apply), but to offset the cost of processing money, the -minimum credit card charge is USD 100 and the minimum invoiced amount is -USD 250. Discounts are available to worthy causes -- present your case. -Time away from home is billed at USD 40 per hour around the clock to -encourage remote work. (Courses and seminars are negotiated individually.) - -Please call only about actual work, I prefer mail for all other questions. - -Updated: 1997-07-18 - -NET-Community <sales@net-community.com> -522 SW 5th Avenue http://www.net-community.com -Suite 1105 -Portland, OR 97204 USA -1-800-919-0060 voice -1-503-274-4423 voice -1-503-274-5406 fax +Mark P. Mitchell <mmitchell@usa.net> +3421 El Camino Real #35 +Atherton, CA 94027 +(650) 364-5360 +http://home.earthlink.net/~mbmitchell/consulting.html + +Experience +---------- +I am an experienced software engineer, with particular expertise in +the field of programming tools. I am responsible for the +implementation of member templates in currently available versions of +G++ as well as many other G++ bug-fixes, and continue to work actively on +improving G++. + +I am willing to work on any and all projects involving free software. + +Please see my resume at the above URL for further information on +my experience and qualifications. + +Rates +----- +My standard rate is $125/hr, but I am willing to negotiate flat fees, and +discounts for deserving organizations. + +Updated: 1998-02-13 + +NET-Community <scottc@net-community.com> +526 NW 21st, #48 http://www.net-community.com +Portland, OR 97209 USA +1-503-279-8845 voice NET-Community provides support for the complete GNUstep toolset including the Objective-C runtime within GCC, the GNUstep Base Library, the Display Ghostscript system, the GNUstep GUI Library, the GNUstep X/DPS GUI Backend, and the GNUstep Database Library. NET-Community also provides support for its own MediaBook software including the MediaBook -Random Library and the MediaBook Speech Synthesis Library. +Random Library and the MediaBook Speech Synthesis Library. NET-Community actively supports and develops free software on all GNUstep platforms; a portion of the proceeds, usually 20%, generated from CD-ROM sales go towards additional development and enhancement of GNUstep. -Updated: 1997-05-12 +Updated: 1998-09-08 - Open Systems Consultants a.s - St. Olavsgt. 24 - N-0166 OSLO - NORWAY +Thi Nguyen <ttn@netcom.com> +San Jose, CA, USA +1 408 314 3470 + +Expertise: Hardware Verification Tools and Environment + - simulators / transactors / stimulus generators + - scripts of all sorts / environment / flows + - elisp customizations + - speak: C, C++, elisp, Scheme, Perl, Verilog, sh + +Please see ftp://ftp.netcom.com/pub/tt/ttn/resume.html for resume. + +Rate: $100/hr, possibly less + +Updated: 1998-06-24 + +Peter Olsen +P.O. Box 410 +Simpsonville, MD 21150 + +pcolsen@acm.org + +What I do: Mathematical modeling and model building using Gnu + and other Free Software. Scientific and engineering + analysis, modeling, and programming in FORTRAN, C, LISP, + Java, and Smalltalk. Statistical analysis. + Emacs customization. + +Examples of my previous work: + 1. I built the model used predict the + amount of work required to clean up the Exxon Valdez oil + spill. Model was completed in ten days, used to allocate + resources for $2 billion summer cleanup, predictions were + accurate. + 2. I built a model applying commercial capital + investment standards to a Federal Agency budget, helped + support $250 Million budget increase. + +Credo: Engineering is the art of applying a professional + knowledge of mathematics and the physical sciences to + improve the quality of life. + +Rates: $225/hour (+ travel and expenses) on site, + $175/hour remote access. + +Notes: 1. Visiting Lecturer for Society for Industrial and Applied + Mathematics: Will speak without fee about Valdez model + (or other work) to Educational and not-for-profit + organizations (plus most-economical travel and living + expenses or travel or living arrangements in kind). + + 2. I do not accept offers which pose even the appearance + of conflict of interest with any present or former client + or employer. + +Updated: 1998-06-24 + + Open Systems Consultants a.s Open Systems Consultants a.s + St. Olavsgt. 24 Fabrikkvn 8 + N-0166 OSLO N-4033 FORUS + NORWAY NORWAY + Phone: Fax: +47 22 20 40 50 +47 22 20 02 85 @@ -965,9 +1138,10 @@ Web: E-mail: Open Systems Consultants a.s can provide programming support for all GNU software -- extending or adopting it to meet customer needs. Prices vary with software and project. Hourly fees are in the $80-120 -range. Fixed-priced projects are also available. No phone support. +range. Fixed-priced projects are also available. Phone support is +available only for customers with support contracts. -Updated: 1997-05-08 +Updated: 1998-08-26 Francesco Potorti` <F.Potorti@cnuce.cnr.it> Via S.Stefano, 8 @@ -991,30 +1165,23 @@ Qualifications: Electronic Engineering degree, Pisa. Full time researcher in CNUCE-CNR. Familiar with elisp programming and porting of C programs. -Updated: 1997-05-08 +Updated: 1998-08-26 -Dipl.-Inform. Klaus Kaempf <kkaempf@progis.de> -proGIS Software -Jakobstr. 117 -D-52064 Aachen +Dipl.-Inform. Klaus K?mpf <kkaempf@rmi.de> +L?hnerstrasse 14 +D-90491 N?rnberg Germany -http://www.progis.de -Tel +49 241 470670 -Fax +49 241 4706729 - 15 years C/Unix experience - 6 years VMS experience - Ported BFD library, Binutils, GNU Assembler, GNU C, GNU C++, GNU C++ libraries, and GNU Make to openVMS/Alpha. -We do a lot of cross-platform (Unix-VMS-WindowsNT) development -mostly with the GNU compiler environment. We are actively -supporting GNU software on openVMS/Alpha. - -Rates start at 160.- DM / hour for support and -installation. Larger projects are negotiable. +I do a lot of cross-platform (Unix/Linux-OpenVMS-WindowsNT) development +mostly with the GNU compiler environment. I am actively supporting GNU +software on OpenVMS/Alpha and OpenVMS/VAX. -Updated: 1997-05-08 +Updated: 1998-08-26 Quiotix Corporation Menlo Park, CA @@ -1073,20 +1240,19 @@ Entered 1997-07-17 Vin Shelton EtherSoft, Inc -617.924.6437 -<acs@acm.org> +781.488.5135 +<acs@alumni.princeton.edu> I have been a professional programmer for 20 years, with most of that time spent doing UNIX/C/C++ hacking. My specialties are (in no particular order): system/kernel hacking, speech recognition, perl, object-oriented design and analysis, FSF software (I have built nearly every FSF package on several different platforms), small language design and implementation, and -HTML/web programming. Currently I'm a member of the XEmacs beta testing -team - I'm responsible for maintaining the version 19.15 patches and have -written a few small packages/lisp hacks. My rates vary from $60 - $100 per -hour, depending on the size of the project. +HTML/web programming. Currently I'm a member of the XEmacs and egcs beta +teams. My rates vary from $60 - $100 per hour, depending on the size of the +project. -Updated: 1997-05-09 +Updated: 1998-06-24 Signum Support AB <info@signum.se> Teknikringen 8 @@ -1285,13 +1451,13 @@ to port (really rewrite) the GUI of a 50K line C++ Netscape plugin from Win32 to Unix/X/Motif. Unless otherwise required by a client, all the software I write is covered -by the GNU Public License. My basic rate is Can$50/hour for work I can do -remotely over the Internet, more for on-site work, less for selected +by the GNU General Public License. My basic rate is Can$50/hour for work I +can do remotely over the Internet, more for on-site work, less for selected non-profit organizations. Updated: 1997-05-19 -Leonard H. Tower Jr. <tower@prep.ai.mit.edu> +Leonard H. Tower Jr. <tower@ai.mit.edu> 36 Porter Street Somerville, MA 02143 USA @@ -1300,13 +1466,14 @@ USA Will work on most GNU software. Installation, handholding, trouble shooting, extensions, teaching. -Rates: $ 150.00/hour + travel expenses. Negotiable for non-profits. +Rates: $ 150.00/hour + travel expenses. Fixed fee quotes available. + Negotiable for non-profits. Experience: Have hacked on over a dozen architectures in many languages. Have system mothered too many varieties of Unixes. Assisted rms with the front end of gcc and its back-end support. Resume available on request. -Updated: 1997-05-24 +Updated: 1998-02-10 noris network GmbH Matthias Urlichs @@ -1344,15 +1511,15 @@ Rates: Updated: 1997-08-04 Paul C.A. van Gool - <P.vanGool@LR.TUDelft.NL> + <vangool@fel.tno.nl> -Address: Faculty of Aerospace Engineering - Delft University of Technology - Kluyverweg 1, 2629 HS Delft +Address: Netherlands Organization for Applied Scientific Research + Physics and Electronics Laboratory + PO Box 96864, 2509 JG the Hague The Netherlands -Phone: +31-15-2785370 -Fax : +31-15-2786480 +Phone: +31-70-3740260 +Fax : +31-70-3740652 I would like to provide unpaid support for the following things: @@ -1361,7 +1528,29 @@ I would like to provide unpaid support for the following things: - f2c - compilation and installation of most GNU packages -Updated: 1997-05-12 +Updated: 1998-06-24 + +Joel N. Weber II +185 Lowell St #2 +Somerville, MA 02144-2629 +devnull@gnu.org + +I can install GNU software, customize it, fix bugs, answer questions, +and teach. + +I am fluent in C, emacs lisp, Bourne shell, and awk. I also have a +good understanding of automake and autoconf. + +I have modified identd, cvs, and ftpd to change their security +procedures; I have modified the GNU fileutils to understand new flag +bits that were added to the Hurd. I have been involved in developing +Hurd translators. Long ago, I worked on developing a web browser; +that project was eventually killed, but I learned a lot in the +process. + +I am experienced in webmastering and system administration. + +Rate: $100/hour, negotiable. Arne Wichmann @@ -1415,6 +1604,6 @@ Updated: 1996-12-04 For a current copy of this directory, or to have yourself listed, ask: - gnu@prep.ai.mit.edu + gnu@gnu.org ** Please keep the entries in this file alphabetical ** diff --git a/gnu/dist/gcc/alias.c b/gnu/dist/gcc/alias.c index de471394d56..172b6769f76 100644 --- a/gnu/dist/gcc/alias.c +++ b/gnu/dist/gcc/alias.c @@ -942,9 +942,15 @@ true_dependence (mem, mem_mode, x, varies) If either memory reference is a variable structure the other is a fixed scalar and there is no aliasing. */ - if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr)) - || (MEM_IN_STRUCT_P (x) && varies (x_addr))) - return 0; + + /* Disabled by default for egcs 1.1.x as alias analysis isn't good + enough yet to discover all cases where this doesn't apply. */ + if (flag_structure_noalias) + { + if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr)) + || (MEM_IN_STRUCT_P (x) && varies (x_addr))) + return 0; + } return 1; } @@ -1174,7 +1180,8 @@ init_alias_analysis () && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0 && REG_N_SETS (REGNO (SET_DEST (set))) == 1) || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0) - && GET_CODE (XEXP (note, 0)) != EXPR_LIST) + && GET_CODE (XEXP (note, 0)) != EXPR_LIST + && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0))) { int regno = REGNO (SET_DEST (set)); reg_known_value[regno] = XEXP (note, 0); diff --git a/gnu/dist/gcc/combine.c b/gnu/dist/gcc/combine.c index 155585b9f1c..db9bb381d85 100644 --- a/gnu/dist/gcc/combine.c +++ b/gnu/dist/gcc/combine.c @@ -1,5 +1,5 @@ /* Optimize by combining instructions for GNU compiler. - Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 92-98, 1999 Free Software Foundation, Inc. This file is part of GNU CC. @@ -3060,103 +3060,154 @@ subst (x, from, to, in_dest, unique_copy) if (COMBINE_RTX_EQUAL_P (x, to)) return to; - len = GET_RTX_LENGTH (code); - fmt = GET_RTX_FORMAT (code); + /* Parallel asm_operands need special attention because all of the + inputs are shared across the arms. Furthermore, unsharing the + rtl results in recognition failures. Failure to handle this case + specially can result in circular rtl. - /* We don't need to process a SET_DEST that is a register, CC0, or PC, so - set up to skip this common case. All other cases where we want to - suppress replacing something inside a SET_SRC are handled via the - IN_DEST operand. */ - if (code == SET - && (GET_CODE (SET_DEST (x)) == REG - || GET_CODE (SET_DEST (x)) == CC0 - || GET_CODE (SET_DEST (x)) == PC)) - fmt = "ie"; - - /* Get the mode of operand 0 in case X is now a SIGN_EXTEND of a - constant. */ - if (fmt[0] == 'e') - op0_mode = GET_MODE (XEXP (x, 0)); + Solve this by doing a normal pass across the first entry of the + parallel, and only processing the SET_DESTs of the subsequent + entries. Ug. */ - for (i = 0; i < len; i++) + if (code == PARALLEL + && GET_CODE (XVECEXP (x, 0, 0)) == SET + && GET_CODE (SET_SRC (XVECEXP (x, 0, 0))) == ASM_OPERANDS) { - if (fmt[i] == 'E') + new = subst (XVECEXP (x, 0, 0), from, to, 0, unique_copy); + + /* If this substitution failed, this whole thing fails. */ + if (GET_CODE (new) == CLOBBER + && XEXP (new, 0) == const0_rtx) + return new; + + SUBST (XVECEXP (x, 0, 0), new); + + for (i = XVECLEN (x, 0) - 1; i >= 1; i--) { - register int j; - for (j = XVECLEN (x, i) - 1; j >= 0; j--) + rtx dest = SET_DEST (XVECEXP (x, 0, i)); + + if (GET_CODE (dest) != REG + && GET_CODE (dest) != CC0 + && GET_CODE (dest) != PC) { - if (COMBINE_RTX_EQUAL_P (XVECEXP (x, i, j), from)) - { - new = (unique_copy && n_occurrences ? copy_rtx (to) : to); - n_occurrences++; - } - else - { - new = subst (XVECEXP (x, i, j), from, to, 0, unique_copy); + new = subst (dest, from, to, 0, unique_copy); - /* If this substitution failed, this whole thing fails. */ - if (GET_CODE (new) == CLOBBER && XEXP (new, 0) == const0_rtx) - return new; - } + /* If this substitution failed, this whole thing fails. */ + if (GET_CODE (new) == CLOBBER + && XEXP (new, 0) == const0_rtx) + return new; - SUBST (XVECEXP (x, i, j), new); + SUBST (SET_DEST (XVECEXP (x, 0, i)), new); } } - else if (fmt[i] == 'e') + } + else + { + len = GET_RTX_LENGTH (code); + fmt = GET_RTX_FORMAT (code); + + /* We don't need to process a SET_DEST that is a register, CC0, + or PC, so set up to skip this common case. All other cases + where we want to suppress replacing something inside a + SET_SRC are handled via the IN_DEST operand. */ + if (code == SET + && (GET_CODE (SET_DEST (x)) == REG + || GET_CODE (SET_DEST (x)) == CC0 + || GET_CODE (SET_DEST (x)) == PC)) + fmt = "ie"; + + /* Get the mode of operand 0 in case X is now a SIGN_EXTEND of a + constant. */ + if (fmt[0] == 'e') + op0_mode = GET_MODE (XEXP (x, 0)); + + for (i = 0; i < len; i++) { - if (COMBINE_RTX_EQUAL_P (XEXP (x, i), from)) + if (fmt[i] == 'E') { - /* In general, don't install a subreg involving two modes not - tieable. It can worsen register allocation, and can even - make invalid reload insns, since the reg inside may need to - be copied from in the outside mode, and that may be invalid - if it is an fp reg copied in integer mode. - - We allow two exceptions to this: It is valid if it is inside - another SUBREG and the mode of that SUBREG and the mode of - the inside of TO is tieable and it is valid if X is a SET - that copies FROM to CC0. */ - if (GET_CODE (to) == SUBREG - && ! MODES_TIEABLE_P (GET_MODE (to), - GET_MODE (SUBREG_REG (to))) - && ! (code == SUBREG - && MODES_TIEABLE_P (GET_MODE (x), - GET_MODE (SUBREG_REG (to)))) + register int j; + for (j = XVECLEN (x, i) - 1; j >= 0; j--) + { + if (COMBINE_RTX_EQUAL_P (XVECEXP (x, i, j), from)) + { + new = (unique_copy && n_occurrences + ? copy_rtx (to) : to); + n_occurrences++; + } + else + { + new = subst (XVECEXP (x, i, j), from, to, 0, + unique_copy); + + /* If this substitution failed, this whole thing + fails. */ + if (GET_CODE (new) == CLOBBER + && XEXP (new, 0) == const0_rtx) + return new; + } + + SUBST (XVECEXP (x, i, j), new); + } + } + else if (fmt[i] == 'e') + { + if (COMBINE_RTX_EQUAL_P (XEXP (x, i), from)) + { + /* In general, don't install a subreg involving two + modes not tieable. It can worsen register + allocation, and can even make invalid reload + insns, since the reg inside may need to be copied + from in the outside mode, and that may be invalid + if it is an fp reg copied in integer mode. + + We allow two exceptions to this: It is valid if + it is inside another SUBREG and the mode of that + SUBREG and the mode of the inside of TO is + tieable and it is valid if X is a SET that copies + FROM to CC0. */ + + if (GET_CODE (to) == SUBREG + && ! MODES_TIEABLE_P (GET_MODE (to), + GET_MODE (SUBREG_REG (to))) + && ! (code == SUBREG + && MODES_TIEABLE_P (GET_MODE (x), + GET_MODE (SUBREG_REG (to)))) #ifdef HAVE_cc0 - && ! (code == SET && i == 1 && XEXP (x, 0) == cc0_rtx) + && ! (code == SET && i == 1 && XEXP (x, 0) == cc0_rtx) #endif - ) - return gen_rtx_CLOBBER (VOIDmode, const0_rtx); + ) + return gen_rtx_CLOBBER (VOIDmode, const0_rtx); - new = (unique_copy && n_occurrences ? copy_rtx (to) : to); - n_occurrences++; + new = (unique_copy && n_occurrences ? copy_rtx (to) : to); + n_occurrences++; + } + else + /* If we are in a SET_DEST, suppress most cases unless we + have gone inside a MEM, in which case we want to + simplify the address. We assume here that things that + are actually part of the destination have their inner + parts in the first expression. This is true for SUBREG, + STRICT_LOW_PART, and ZERO_EXTRACT, which are the only + things aside from REG and MEM that should appear in a + SET_DEST. */ + new = subst (XEXP (x, i), from, to, + (((in_dest + && (code == SUBREG || code == STRICT_LOW_PART + || code == ZERO_EXTRACT)) + || code == SET) + && i == 0), unique_copy); + + /* If we found that we will have to reject this combination, + indicate that by returning the CLOBBER ourselves, rather than + an expression containing it. This will speed things up as + well as prevent accidents where two CLOBBERs are considered + to be equal, thus producing an incorrect simplification. */ + + if (GET_CODE (new) == CLOBBER && XEXP (new, 0) == const0_rtx) + return new; + + SUBST (XEXP (x, i), new); } - else - /* If we are in a SET_DEST, suppress most cases unless we - have gone inside a MEM, in which case we want to - simplify the address. We assume here that things that - are actually part of the destination have their inner - parts in the first expression. This is true for SUBREG, - STRICT_LOW_PART, and ZERO_EXTRACT, which are the only - things aside from REG and MEM that should appear in a - SET_DEST. */ - new = subst (XEXP (x, i), from, to, - (((in_dest - && (code == SUBREG || code == STRICT_LOW_PART - || code == ZERO_EXTRACT)) - || code == SET) - && i == 0), unique_copy); - - /* If we found that we will have to reject this combination, - indicate that by returning the CLOBBER ourselves, rather than - an expression containing it. This will speed things up as - well as prevent accidents where two CLOBBERs are considered - to be equal, thus producing an incorrect simplification. */ - - if (GET_CODE (new) == CLOBBER && XEXP (new, 0) == const0_rtx) - return new; - - SUBST (XEXP (x, i), new); } } @@ -7943,13 +7994,15 @@ num_sign_bit_copies (x, mode) is known to be positive, the number of sign bit copies is the same as that of the input. Finally, if the input has just one bit that might be nonzero, all the bits are copies of the sign bit. */ + num0 = num_sign_bit_copies (XEXP (x, 0), mode); + if (bitwidth > HOST_BITS_PER_WIDE_INT) + return num0 > 1 ? num0 - 1 : 1; + nonzero = nonzero_bits (XEXP (x, 0), mode); if (nonzero == 1) return bitwidth; - num0 = num_sign_bit_copies (XEXP (x, 0), mode); if (num0 > 1 - && bitwidth <= HOST_BITS_PER_WIDE_INT && (((HOST_WIDE_INT) 1 << (bitwidth - 1)) & nonzero)) num0--; @@ -7993,19 +8046,27 @@ num_sign_bit_copies (x, mode) result = bitwidth - (bitwidth - num0) - (bitwidth - num1); if (result > 0 - && bitwidth <= HOST_BITS_PER_WIDE_INT - && ((nonzero_bits (XEXP (x, 0), mode) - & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) - && ((nonzero_bits (XEXP (x, 1), mode) - & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)) + && (bitwidth > HOST_BITS_PER_WIDE_INT + || (((nonzero_bits (XEXP (x, 0), mode) + & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) + && ((nonzero_bits (XEXP (x, 1), mode) + & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)))) result--; return MAX (1, result); case UDIV: - /* The result must be <= the first operand. */ - return num_sign_bit_copies (XEXP (x, 0), mode); - + /* The result must be <= the first operand. If the first operand + has the high bit set, we know nothing about the number of sign + bit copies. */ + if (bitwidth > HOST_BITS_PER_WIDE_INT) + return 1; + else if ((nonzero_bits (XEXP (x, 0), mode) + & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) + return 1; + else + return num_sign_bit_copies (XEXP (x, 0), mode); + case UMOD: /* The result must be <= the scond operand. */ return num_sign_bit_copies (XEXP (x, 1), mode); @@ -8016,20 +8077,20 @@ num_sign_bit_copies (x, mode) to add 1. */ result = num_sign_bit_copies (XEXP (x, 0), mode); if (result > 1 - && bitwidth <= HOST_BITS_PER_WIDE_INT - && (nonzero_bits (XEXP (x, 1), mode) - & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) - result --; + && (bitwidth > HOST_BITS_PER_WIDE_INT + || (nonzero_bits (XEXP (x, 1), mode) + & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)) + result--; return result; case MOD: result = num_sign_bit_copies (XEXP (x, 1), mode); if (result > 1 - && bitwidth <= HOST_BITS_PER_WIDE_INT - && (nonzero_bits (XEXP (x, 1), mode) - & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) - result --; + && (bitwidth > HOST_BITS_PER_WIDE_INT + || (nonzero_bits (XEXP (x, 1), mode) + & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)) + result--; return result; diff --git a/gnu/dist/gcc/config/alpha/openbsd.h b/gnu/dist/gcc/config/alpha/openbsd.h new file mode 100644 index 00000000000..60591d554f5 --- /dev/null +++ b/gnu/dist/gcc/config/alpha/openbsd.h @@ -0,0 +1,126 @@ +/* Configuration file for an alpha OpenBSD target. + Copyright (C) 1999 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. */ + +/* We settle for little endian for now. */ +#define TARGET_ENDIAN_DEFAULT 0 + +#include <alpha/alpha.h> + +#define OBSD_NO_DYNAMIC_LIBRARIES +#define OBSD_HAS_DECLARE_FUNCTION_NAME +#define OBSD_HAS_DECLARE_FUNCTION_SIZE +#define OBSD_HAS_DECLARE_OBJECT + +/* alpha ecoff supports only weak aliases, see below. */ +#define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS (FILE,NAME,0) + +#include <openbsd.h> + +/* Controlling the compilation driver. */ + +/* alpha needs __start. */ +#undef LINK_SPEC +#define LINK_SPEC \ + "%{!nostdlib:%{!r*:%{!e*:-e __start}}} -dc -dp %{assert*}" + +/* run-time target specifications */ +#define CPP_PREDEFINES "-D__unix__ -D__ANSI_COMPAT -Asystem(unix) \ +-D__OpenBSD__ -D__alpha__ -D__alpha" + +/* Layout of source language data types. */ + +/* This must agree with <machine/ansi.h> */ +#undef SIZE_TYPE +#define SIZE_TYPE "long unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "long int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + + +#undef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG + +#define LOCAL_LABEL_PREFIX "." + +/* We don't have an init section yet. */ +#undef HAS_INIT_SECTION + +/* collect2 support (assembler format: macros for initialization). */ + +/* Don't tell collect2 we use COFF as we don't have (yet ?) a dynamic ld + library with the proper functions to handle this -> collect2 will + default to using nm. */ +#undef OBJECT_FORMAT_COFF +#undef EXTENDED_COFF + +/* Assembler format: exception region output. */ + +/* All configurations that don't use elf must be explicit about not using + dwarf unwind information. egcs doesn't try too hard to check internal + configuration files... */ +#ifdef INCOMING_RETURN_ADDR_RTX +#undef DWARF2_UNWIND_INFO +#define DWARF2_UNWIND_INFO 0 +#endif + +/* Assembler format: file framework. */ + +/* Taken from alpha/osf.h. This used to be common to all alpha + configurations, but elf has departed from it. + Check alpha/alpha.h, alpha/osf.h for it when egcs is upgraded. */ +#ifndef ASM_FILE_START +#define ASM_FILE_START(FILE) \ +{ \ + alpha_write_verstamp (FILE); \ + fprintf (FILE, "\t.set noreorder\n"); \ + fprintf (FILE, "\t.set volatile\n"); \ + fprintf (FILE, "\t.set noat\n"); \ + if (TARGET_SUPPORT_ARCH) \ + fprintf (FILE, "\t.arch %s\n", \ + alpha_cpu == PROCESSOR_EV6 ? "ev6" \ + : (alpha_cpu == PROCESSOR_EV5 \ + ? (TARGET_MAX ? "pca56" : TARGET_BWX ? "ev56" : "ev5") \ + : "ev4")); \ + \ + ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \ +} +#endif + +/* Assembler format: label output. */ + +#define ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,VALUE) \ + do { \ + fputs ("\t.weakext\t", FILE); \ + assemble_name (FILE, NAME); \ + if (VALUE) \ + { \ + fputs (" , ", FILE); \ + assemble_name (FILE, VALUE); \ + } \ + fputc ('\n', FILE); \ + } while (0) + + diff --git a/gnu/dist/gcc/config/alpha/va_list.h b/gnu/dist/gcc/config/alpha/va_list.h new file mode 100644 index 00000000000..c9ab2b0b50e --- /dev/null +++ b/gnu/dist/gcc/config/alpha/va_list.h @@ -0,0 +1,16 @@ +/* A replacement for Digital Unix's <va_list.h>. */ + +#include <va-alpha.h> + +#if !defined(_VA_LIST) && !defined(_HIDDEN_VA_LIST) +#define _VA_LIST +typedef __gnuc_va_list va_list; + +#elif defined(_HIDDEN_VA_LIST) && !defined(_HIDDEN_VA_LIST_DONE) +#define _HIDDEN_VA_LIST_DONE +typedef __gnuc_va_list __va_list; + +#elif defined(_HIDDEN_VA_LIST) && defined(_VA_LIST) +#undef _HIDDEN_VA_LIST + +#endif diff --git a/gnu/dist/gcc/config/alpha/x-alpha b/gnu/dist/gcc/config/alpha/x-alpha index 99197479798..9686ab96472 100644 --- a/gnu/dist/gcc/config/alpha/x-alpha +++ b/gnu/dist/gcc/config/alpha/x-alpha @@ -1 +1,2 @@ CLIB=-lmld +EXTRA_HEADERS = $(srcdir)/config/alpha/va_list.h diff --git a/gnu/dist/gcc/config/alpha/xm-openbsd.h b/gnu/dist/gcc/config/alpha/xm-openbsd.h new file mode 100644 index 00000000000..50f436695a7 --- /dev/null +++ b/gnu/dist/gcc/config/alpha/xm-openbsd.h @@ -0,0 +1,23 @@ +/* Configuration file for an host running alpha OpenBSD. + Copyright (C) 1999 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. */ + +#include <xm-openbsd.h> +#include <alpha/xm-alpha.h> + diff --git a/gnu/dist/gcc/config/aoutos.h b/gnu/dist/gcc/config/aoutos.h index e9caa719905..6f4e2623c64 100644 --- a/gnu/dist/gcc/config/aoutos.h +++ b/gnu/dist/gcc/config/aoutos.h @@ -39,50 +39,3 @@ Boston, MA 02111-1307, USA. */ /* Define a symbol indicating that we are using aoutos.h. */ #define USING_AOUTOS_H - -/* A C statement (sans semicolon) to output an element in the table of - global constructors. - If using GNU LD, tell it that this is part of the static destructor set. - This code works for any machine provided you use GNU as/ld. - If not using GNU LD, rely on a "collect" program to look for names defined - in the particular form we choose as global constructor function names. */ - -#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - if (flag_gnu_linker) \ - { \ - /* Output an N_SETT (0x16, 22.) for the name. */ \ - fprintf (FILE, "%s \"___CTOR_LIST__\",22,0,0,", ASM_STABS_OP); \ - assemble_name (FILE, NAME); \ - fputc ('\n', FILE); \ - } \ - } while (0) - - -/* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - -#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - if (flag_gnu_linker) \ - { \ - /* Output an N_SETT (0x16, 22.) for the name. */ \ - fprintf (FILE, "%s \"___DTOR_LIST__\",22,0,0,", ASM_STABS_OP); \ - assemble_name (FILE, NAME); \ - fputc ('\n', FILE); \ - } \ - } while (0) - -/* Likewise for entries we want to record for garbage collection. - Garbage collection is still under development. */ - -#define ASM_OUTPUT_GC_ENTRY(FILE,NAME) \ - do { \ - if (flag_gnu_linker) \ - { \ - /* Output an N_SETT (0x16, 22.) for the name. */ \ - fprintf (FILE, "%s \"___PTR_LIST__\",22,0,0,", ASM_STABS_OP); \ - assemble_name (FILE, NAME); \ - fputc ('\n', FILE); \ - } \ - } while (0) diff --git a/gnu/dist/gcc/config/h8300/h8300.c b/gnu/dist/gcc/config/h8300/h8300.c index e0dff83c9d3..3f66b0630b5 100644 --- a/gnu/dist/gcc/config/h8300/h8300.c +++ b/gnu/dist/gcc/config/h8300/h8300.c @@ -2996,7 +2996,7 @@ h8300_encode_label (decl) newstr = obstack_alloc (saveable_obstack, len + 2); strcpy (newstr + 1, str); - *newstr = '*'; + *newstr = '&'; XSTR (XEXP (DECL_RTL (decl), 0), 0) = newstr; } diff --git a/gnu/dist/gcc/config/h8300/h8300.h b/gnu/dist/gcc/config/h8300/h8300.h index 4da7c9ea96f..758f448c530 100644 --- a/gnu/dist/gcc/config/h8300/h8300.h +++ b/gnu/dist/gcc/config/h8300/h8300.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. Hitachi H8/300 version generating coff - Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1992, 93-98, 1999 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). @@ -1117,7 +1117,7 @@ readonly_data() \ } \ } -#define TINY_DATA_NAME_P(NAME) (*(NAME) == '*') +#define TINY_DATA_NAME_P(NAME) (*(NAME) == '&') /* If we are referencing a function that is supposed to be called through the function vector, the SYMBOL_REF_FLAG in the rtl @@ -1138,7 +1138,7 @@ readonly_data() \ /* Store the user-specified part of SYMBOL_NAME in VAR. This is sort of inverse to ENCODE_SECTION_INFO. */ #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ - (VAR) = (SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*' || (SYMBOL_NAME)[0] == '@'); + (VAR) = (SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*' || (SYMBOL_NAME)[0] == '@' || (SYMBOL_NAME)[0] == '&') /* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number (see above). */ @@ -1186,6 +1186,9 @@ readonly_data() \ #define ASM_OUTPUT_LABEL(FILE, NAME) \ do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0) +#define ASM_OUTPUT_LABELREF(FILE,NAME) \ + asm_fprintf ((FILE), "%U%s", (NAME) + (TINY_DATA_NAME_P (NAME) ? 1 : 0)) + #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) /* This is how to output a command to make the user-level label named NAME diff --git a/gnu/dist/gcc/config/i386/i386.c b/gnu/dist/gcc/config/i386/i386.c index d3410635266..b2512a02980 100644 --- a/gnu/dist/gcc/config/i386/i386.c +++ b/gnu/dist/gcc/config/i386/i386.c @@ -1,5 +1,5 @@ /* Subroutines for insn-output.c for Intel X86. - Copyright (C) 1988, 92, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. + Copyright (C) 1988, 92, 94-98, 1999 Free Software Foundation, Inc. This file is part of GNU CC. @@ -5208,12 +5208,6 @@ output_fp_conditional_move (which_alternative, operands) output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); break; - case 2: - /* r <- cond ? r : arg */ - output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); - output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); - break; - default: abort (); } @@ -5273,17 +5267,6 @@ output_int_conditional_move (which_alternative, operands) output_asm_insn (AS2 (cmov%c1,%3,%0), xops); break; - case 2: - /* rm <- cond ? arg1 : arg2 */ - output_asm_insn (AS2 (cmov%C1,%2,%0), operands); - output_asm_insn (AS2 (cmov%c1,%3,%0), operands); - if (mode == DImode) - { - output_asm_insn (AS2 (cmov%C1,%2,%0), xops); - output_asm_insn (AS2 (cmov%c1,%3,%0), xops); - } - break; - default: abort (); } diff --git a/gnu/dist/gcc/config/i386/i386.md b/gnu/dist/gcc/config/i386/i386.md index ca63bf49ba6..f85992fd2ca 100644 --- a/gnu/dist/gcc/config/i386/i386.md +++ b/gnu/dist/gcc/config/i386/i386.md @@ -1,5 +1,5 @@ ; GCC machine description for Intel X86. -;; Copyright (C) 1988, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. +;; Copyright (C) 1988, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc. ;; Mostly by William Schelter. ;; This file is part of GNU CC. @@ -4544,8 +4544,7 @@ byte_xor_operation: "" "* { - rtx xops[4], low[1], high[1]; - static HOST_WIDE_INT ashldi_label_number; + rtx xops[5], low[1], high[1]; CC_STATUS_INIT; @@ -4554,15 +4553,16 @@ byte_xor_operation: xops[1] = GEN_INT (32); xops[2] = low[0]; xops[3] = high[0]; + xops[4] = gen_label_rtx (); output_asm_insn (AS3_SHIFT_DOUBLE (shld%L3,%0,%2,%3), xops); output_asm_insn (AS2 (sal%L2,%0,%2), xops); output_asm_insn (AS2 (test%B0,%1,%b0), xops); - asm_fprintf (asm_out_file, \"\\tje %LLASHLDI%d\\n\", ashldi_label_number); + output_asm_insn (AS1 (je,%X4), xops); output_asm_insn (AS2 (mov%L3,%2,%3), xops); /* Fast shift by 32 */ output_asm_insn (AS2 (xor%L2,%2,%2), xops); - asm_fprintf (asm_out_file, \"%LLASHLDI%d:\\n\", ashldi_label_number++); - + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xops[4])); RET; }") @@ -4732,8 +4732,7 @@ byte_xor_operation: "" "* { - rtx xops[4], low[1], high[1]; - static HOST_WIDE_INT ashrdi_label_number; + rtx xops[5], low[1], high[1]; CC_STATUS_INIT; @@ -4742,16 +4741,17 @@ byte_xor_operation: xops[1] = GEN_INT (32); xops[2] = low[0]; xops[3] = high[0]; + xops[4] = gen_label_rtx (); output_asm_insn (AS3_SHIFT_DOUBLE (shrd%L2,%0,%3,%2), xops); output_asm_insn (AS2 (sar%L3,%0,%3), xops); output_asm_insn (AS2 (test%B0,%1,%b0), xops); - asm_fprintf (asm_out_file, \"\\tje %LLASHRDI%d\\n\", ashrdi_label_number); + output_asm_insn (AS1 (je,%X4), xops); xops[1] = GEN_INT (31); output_asm_insn (AS2 (mov%L2,%3,%2), xops); output_asm_insn (AS2 (sar%L3,%1,%3), xops); /* shift by 32 */ - asm_fprintf (asm_out_file, \"%LLASHRDI%d:\\n\", ashrdi_label_number++); - + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xops[4])); RET; }") @@ -4887,8 +4887,7 @@ byte_xor_operation: "" "* { - rtx xops[4], low[1], high[1]; - static HOST_WIDE_INT lshrdi_label_number; + rtx xops[5], low[1], high[1]; CC_STATUS_INIT; @@ -4897,15 +4896,16 @@ byte_xor_operation: xops[1] = GEN_INT (32); xops[2] = low[0]; xops[3] = high[0]; + xops[4] = gen_label_rtx (); output_asm_insn (AS3_SHIFT_DOUBLE (shrd%L2,%0,%3,%2), xops); output_asm_insn (AS2 (shr%L3,%0,%3), xops); output_asm_insn (AS2 (test%B0,%1,%b0), xops); - asm_fprintf (asm_out_file, \"\\tje %LLLSHRDI%d\\n\", lshrdi_label_number); + output_asm_insn (AS1 (je,%X4), xops); output_asm_insn (AS2 (mov%L2,%3,%2), xops); /* Fast shift by 32 */ output_asm_insn (AS2 (xor%L3,%3,%3), xops); - asm_fprintf (asm_out_file, \"%LLLSHRDI%d:\\n\", lshrdi_label_number++); - + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xops[4])); RET; }") @@ -7238,32 +7238,32 @@ byte_xor_operation: }") (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") (if_then_else:SI (match_operator 1 "comparison_operator" - [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m,q,m") - (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn,qmn,qn")]) - (match_operand:SI 4 "nonimmediate_operand" "rm,rm,0,0,rm,rm") - (match_operand:SI 5 "nonimmediate_operand" "0,0,rm,rm,rm,rm")))] + [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m") + (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn")]) + (match_operand:SI 4 "nonimmediate_operand" "rm,rm,0,0") + (match_operand:SI 5 "nonimmediate_operand" "0,0,rm,rm")))] "TARGET_CMOVE" "#") (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") (if_then_else:SI (match_operator 1 "comparison_operator" - [(match_operand 2 "nonimmediate_operand" "r,m,r,m,r,m") - (match_operand 3 "general_operand" "rmi,ri,rmi,ri,rmi,ri")]) - (match_operand:SI 4 "nonimmediate_operand" "rm,rm,0,0,rm,rm") - (match_operand:SI 5 "nonimmediate_operand" "0,0,rm,rm,rm,rm")))] + [(match_operand 2 "nonimmediate_operand" "r,m,r,m") + (match_operand 3 "general_operand" "rmi,ri,rmi,ri")]) + (match_operand:SI 4 "nonimmediate_operand" "rm,rm,0,0") + (match_operand:SI 5 "nonimmediate_operand" "0,0,rm,rm")))] "TARGET_CMOVE && GET_MODE_CLASS (GET_MODE (operands[2])) == MODE_INT" "#") (define_split - [(set (match_operand:SI 0 "register_operand" "=r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r") (if_then_else:SI (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (const_int 0)]) - (match_operand:SI 3 "nonimmediate_operand" "rm,0,rm") - (match_operand:SI 4 "nonimmediate_operand" "0,rm,rm")))] + (match_operand:SI 3 "nonimmediate_operand" "rm,0") + (match_operand:SI 4 "nonimmediate_operand" "0,rm")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (match_dup 2)) @@ -7273,12 +7273,12 @@ byte_xor_operation: "") (define_split - [(set (match_operand:SI 0 "register_operand" "=r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r") (if_then_else:SI (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (match_operand 3 "general_operand" "")]) - (match_operand:SI 4 "nonimmediate_operand" "rm,0,rm") - (match_operand:SI 5 "nonimmediate_operand" "0,rm,rm")))] + (match_operand:SI 4 "nonimmediate_operand" "rm,0") + (match_operand:SI 5 "nonimmediate_operand" "0,rm")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (compare (match_dup 2) (match_dup 3))) (set (match_dup 0) @@ -7287,11 +7287,11 @@ byte_xor_operation: "") (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r") (if_then_else:SI (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:SI 2 "nonimmediate_operand" "rm,0,rm") - (match_operand:SI 3 "nonimmediate_operand" "0,rm,rm")))] + (match_operand:SI 2 "nonimmediate_operand" "rm,0") + (match_operand:SI 3 "nonimmediate_operand" "0,rm")))] "TARGET_CMOVE && reload_completed" "* return output_int_conditional_move (which_alternative, operands);") @@ -7312,32 +7312,32 @@ byte_xor_operation: }") (define_insn "" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r") (if_then_else:HI (match_operator 1 "comparison_operator" - [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m,q,m") - (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn,qmn,qn")]) - (match_operand:HI 4 "nonimmediate_operand" "rm,rm,0,0,rm,rm") - (match_operand:HI 5 "nonimmediate_operand" "0,0,rm,rm,rm,rm")))] + [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m") + (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn")]) + (match_operand:HI 4 "nonimmediate_operand" "rm,rm,0,0") + (match_operand:HI 5 "nonimmediate_operand" "0,0,rm,rm")))] "TARGET_CMOVE" "#") (define_insn "" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r") (if_then_else:HI (match_operator 1 "comparison_operator" - [(match_operand 2 "nonimmediate_operand" "r,m,r,m,r,m") - (match_operand 3 "general_operand" "rmi,ri,rmi,ri,rmi,ri")]) - (match_operand:HI 4 "nonimmediate_operand" "rm,rm,0,0,rm,rm") - (match_operand:HI 5 "nonimmediate_operand" "0,0,rm,rm,rm,rm")))] + [(match_operand 2 "nonimmediate_operand" "r,m,r,m") + (match_operand 3 "general_operand" "rmi,ri,rmi,ri")]) + (match_operand:HI 4 "nonimmediate_operand" "rm,rm,0,0") + (match_operand:HI 5 "nonimmediate_operand" "0,0,rm,rm")))] "TARGET_CMOVE && GET_MODE_CLASS (GET_MODE (operands[2])) == MODE_INT" "#") (define_split - [(set (match_operand:HI 0 "register_operand" "=r,r,r") + [(set (match_operand:HI 0 "register_operand" "=r,r") (if_then_else:HI (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (const_int 0)]) - (match_operand:HI 3 "nonimmediate_operand" "rm,0,rm") - (match_operand:HI 4 "nonimmediate_operand" "0,rm,rm")))] + (match_operand:HI 3 "nonimmediate_operand" "rm,0") + (match_operand:HI 4 "nonimmediate_operand" "0,rm")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (match_dup 2)) @@ -7347,12 +7347,12 @@ byte_xor_operation: "") (define_split - [(set (match_operand:HI 0 "register_operand" "=r,r,r") + [(set (match_operand:HI 0 "register_operand" "=r,r") (if_then_else:HI (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (match_operand 3 "general_operand" "")]) - (match_operand:HI 4 "nonimmediate_operand" "rm,0,rm") - (match_operand:HI 5 "nonimmediate_operand" "0,rm,rm")))] + (match_operand:HI 4 "nonimmediate_operand" "rm,0") + (match_operand:HI 5 "nonimmediate_operand" "0,rm")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (compare (match_dup 2) (match_dup 3))) @@ -7362,11 +7362,11 @@ byte_xor_operation: "") (define_insn "" - [(set (match_operand:HI 0 "register_operand" "=r,r,r") + [(set (match_operand:HI 0 "register_operand" "=r,r") (if_then_else:HI (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:HI 2 "nonimmediate_operand" "rm,0,rm") - (match_operand:HI 3 "nonimmediate_operand" "0,rm,rm")))] + (match_operand:HI 2 "nonimmediate_operand" "rm,0") + (match_operand:HI 3 "nonimmediate_operand" "0,rm")))] "TARGET_CMOVE && reload_completed" "* return output_int_conditional_move (which_alternative, operands);") @@ -7411,36 +7411,36 @@ byte_xor_operation: }") (define_insn "" - [(set (match_operand:SF 0 "register_operand" "=f,f,f,f,f,f") + [(set (match_operand:SF 0 "register_operand" "=f,f,f,f") (if_then_else:SF (match_operator 1 "comparison_operator" - [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m,q,m") - (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn,qmn,qn")]) - (match_operand:SF 4 "register_operand" "f,f,0,0,f,f") - (match_operand:SF 5 "register_operand" "0,0,f,f,f,f")))] + [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m") + (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn")]) + (match_operand:SF 4 "register_operand" "f,f,0,0") + (match_operand:SF 5 "register_operand" "0,0,f,f")))] "TARGET_CMOVE && GET_CODE (operands[1]) != LT && GET_CODE (operands[1]) != LE && GET_CODE (operands[1]) != GE && GET_CODE (operands[1]) != GT" "#") (define_insn "" - [(set (match_operand:SF 0 "register_operand" "=f,f,f,f,f,f") + [(set (match_operand:SF 0 "register_operand" "=f,f,f,f") (if_then_else:SF (match_operator 1 "comparison_operator" - [(match_operand 2 "nonimmediate_operand" "r,m,r,m,r,m") - (match_operand 3 "general_operand" "rmi,ri,rmi,ri,rmi,ri")]) - (match_operand:SF 4 "register_operand" "f,f,0,0,f,f") - (match_operand:SF 5 "register_operand" "0,0,f,f,f,f")))] + [(match_operand 2 "nonimmediate_operand" "r,m,r,m") + (match_operand 3 "general_operand" "rmi,ri,rmi,ri")]) + (match_operand:SF 4 "register_operand" "f,f,0,0") + (match_operand:SF 5 "register_operand" "0,0,f,f")))] "TARGET_CMOVE && GET_MODE_CLASS (GET_MODE (operands[2])) == MODE_INT && GET_CODE (operands[1]) != LT && GET_CODE (operands[1]) != LE && GET_CODE (operands[1]) != GE && GET_CODE (operands[1]) != GT" "#") (define_split - [(set (match_operand:SF 0 "register_operand" "=f,f,f") + [(set (match_operand:SF 0 "register_operand" "=f,f") (if_then_else:SF (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (const_int 0)]) - (match_operand:SF 3 "register_operand" "f,0,f") - (match_operand:SF 4 "register_operand" "0,f,f")))] + (match_operand:SF 3 "register_operand" "f,0") + (match_operand:SF 4 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (match_dup 2)) @@ -7450,12 +7450,12 @@ byte_xor_operation: "") (define_split - [(set (match_operand:SF 0 "register_operand" "=f,f,f") + [(set (match_operand:SF 0 "register_operand" "=f,f") (if_then_else:SF (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (match_operand 3 "general_operand" "")]) - (match_operand:SF 4 "register_operand" "f,0,f") - (match_operand:SF 5 "register_operand" "0,f,f")))] + (match_operand:SF 4 "register_operand" "f,0") + (match_operand:SF 5 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (compare (match_dup 2) (match_dup 3))) (set (match_dup 0) @@ -7464,11 +7464,11 @@ byte_xor_operation: "") (define_insn "" - [(set (match_operand:SF 0 "register_operand" "=f,f,f") + [(set (match_operand:SF 0 "register_operand" "=f,f") (if_then_else:SF (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:SF 2 "register_operand" "f,0,f") - (match_operand:SF 3 "register_operand" "0,f,f")))] + (match_operand:SF 2 "register_operand" "f,0") + (match_operand:SF 3 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" "* return output_fp_conditional_move (which_alternative, operands);") @@ -7513,36 +7513,36 @@ byte_xor_operation: }") (define_insn "" - [(set (match_operand:DF 0 "register_operand" "=f,f,f,f,f,f") + [(set (match_operand:DF 0 "register_operand" "=f,f,f,f") (if_then_else:DF (match_operator 1 "comparison_operator" - [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m,q,m") - (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn,qmn,qn")]) - (match_operand:DF 4 "register_operand" "f,f,0,0,f,f") - (match_operand:DF 5 "register_operand" "0,0,f,f,f,f")))] + [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m") + (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn")]) + (match_operand:DF 4 "register_operand" "f,f,0,0") + (match_operand:DF 5 "register_operand" "0,0,f,f")))] "TARGET_CMOVE && GET_CODE (operands[1]) != LT && GET_CODE (operands[1]) != LE && GET_CODE (operands[1]) != GE && GET_CODE (operands[1]) != GT" "#") (define_insn "" - [(set (match_operand:DF 0 "register_operand" "=f,f,f,f,f,f") + [(set (match_operand:DF 0 "register_operand" "=f,f,f,f") (if_then_else:DF (match_operator 1 "comparison_operator" - [(match_operand 2 "nonimmediate_operand" "r,m,r,m,r,m") - (match_operand 3 "general_operand" "rmi,ri,rmi,ri,rmi,ri")]) - (match_operand:DF 4 "register_operand" "f,f,0,0,f,f") - (match_operand:DF 5 "register_operand" "0,0,f,f,f,f")))] + [(match_operand 2 "nonimmediate_operand" "r,m,r,m") + (match_operand 3 "general_operand" "rmi,ri,rmi,ri")]) + (match_operand:DF 4 "register_operand" "f,f,0,0") + (match_operand:DF 5 "register_operand" "0,0,f,f")))] "TARGET_CMOVE && GET_MODE_CLASS (GET_MODE (operands[2])) == MODE_INT && GET_CODE (operands[1]) != LT && GET_CODE (operands[1]) != LE && GET_CODE (operands[1]) != GE && GET_CODE (operands[1]) != GT" "#") (define_split - [(set (match_operand:DF 0 "register_operand" "=f,f,f") + [(set (match_operand:DF 0 "register_operand" "=f,f") (if_then_else:DF (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (const_int 0)]) - (match_operand:DF 3 "register_operand" "f,0,f") - (match_operand:DF 4 "register_operand" "0,f,f")))] + (match_operand:DF 3 "register_operand" "f,0") + (match_operand:DF 4 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (match_dup 2)) @@ -7552,12 +7552,12 @@ byte_xor_operation: "") (define_split - [(set (match_operand:DF 0 "register_operand" "=f,f,f") + [(set (match_operand:DF 0 "register_operand" "=f,f") (if_then_else:DF (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (match_operand 3 "general_operand" "")]) - (match_operand:DF 4 "register_operand" "f,0,f") - (match_operand:DF 5 "register_operand" "0,f,f")))] + (match_operand:DF 4 "register_operand" "f,0") + (match_operand:DF 5 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (compare (match_dup 2) (match_dup 3))) (set (match_dup 0) @@ -7566,11 +7566,11 @@ byte_xor_operation: "") (define_insn "" - [(set (match_operand:DF 0 "register_operand" "=f,f,f") + [(set (match_operand:DF 0 "register_operand" "=f,f") (if_then_else:DF (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:DF 2 "register_operand" "f,0,f") - (match_operand:DF 3 "register_operand" "0,f,f")))] + (match_operand:DF 2 "register_operand" "f,0") + (match_operand:DF 3 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" "* return output_fp_conditional_move (which_alternative, operands);") @@ -7615,36 +7615,36 @@ byte_xor_operation: }") (define_insn "" - [(set (match_operand:XF 0 "register_operand" "=f,f,f,f,f,f") + [(set (match_operand:XF 0 "register_operand" "=f,f,f,f") (if_then_else:XF (match_operator 1 "comparison_operator" - [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m,q,m") - (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn,qmn,qn")]) - (match_operand:XF 4 "register_operand" "f,f,0,0,f,f") - (match_operand:XF 5 "register_operand" "0,0,f,f,f,f")))] + [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m") + (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn")]) + (match_operand:XF 4 "register_operand" "f,f,0,0") + (match_operand:XF 5 "register_operand" "0,0,f,f")))] "TARGET_CMOVE && GET_CODE (operands[1]) != LT && GET_CODE (operands[1]) != LE && GET_CODE (operands[1]) != GE && GET_CODE (operands[1]) != GT" "#") (define_insn "" - [(set (match_operand:XF 0 "register_operand" "=f,f,f,f,f,f") + [(set (match_operand:XF 0 "register_operand" "=f,f,f,f") (if_then_else:XF (match_operator 1 "comparison_operator" - [(match_operand 2 "nonimmediate_operand" "r,m,r,m,r,m") - (match_operand 3 "general_operand" "rmi,ri,rmi,ri,rmi,ri")]) - (match_operand:XF 4 "register_operand" "f,f,0,0,f,f") - (match_operand:XF 5 "register_operand" "0,0,f,f,f,f")))] + [(match_operand 2 "nonimmediate_operand" "r,m,r,m") + (match_operand 3 "general_operand" "rmi,ri,rmi,ri")]) + (match_operand:XF 4 "register_operand" "f,f,0,0") + (match_operand:XF 5 "register_operand" "0,0,f,f")))] "TARGET_CMOVE && GET_MODE_CLASS (GET_MODE (operands[2])) == MODE_INT && GET_CODE (operands[1]) != LT && GET_CODE (operands[1]) != LE && GET_CODE (operands[1]) != GE && GET_CODE (operands[1]) != GT" "#") (define_split - [(set (match_operand:XF 0 "register_operand" "=f,f,f") + [(set (match_operand:XF 0 "register_operand" "=f,f") (if_then_else:XF (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (const_int 0)]) - (match_operand:XF 3 "register_operand" "f,0,f") - (match_operand:XF 4 "register_operand" "0,f,f")))] + (match_operand:XF 3 "register_operand" "f,0") + (match_operand:XF 4 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (match_dup 2)) @@ -7654,12 +7654,12 @@ byte_xor_operation: "") (define_split - [(set (match_operand:XF 0 "register_operand" "=f,f,f") + [(set (match_operand:XF 0 "register_operand" "=f,f") (if_then_else:XF (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (match_operand 3 "general_operand" "")]) - (match_operand:XF 4 "register_operand" "f,0,f") - (match_operand:XF 5 "register_operand" "0,f,f")))] + (match_operand:XF 4 "register_operand" "f,0") + (match_operand:XF 5 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (compare (match_dup 2) (match_dup 3))) (set (match_dup 0) @@ -7668,11 +7668,11 @@ byte_xor_operation: "") (define_insn "" - [(set (match_operand:XF 0 "register_operand" "=f,f,f") + [(set (match_operand:XF 0 "register_operand" "=f,f") (if_then_else:XF (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:XF 2 "register_operand" "f,0,f") - (match_operand:XF 3 "register_operand" "0,f,f")))] + (match_operand:XF 2 "register_operand" "f,0") + (match_operand:XF 3 "register_operand" "0,f")))] "TARGET_CMOVE && reload_completed" "* return output_fp_conditional_move (which_alternative, operands);") @@ -7693,32 +7693,32 @@ byte_xor_operation: }") (define_insn "" - [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r,&r,&r,&r") + [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r,&r") (if_then_else:DI (match_operator 1 "comparison_operator" - [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m,q,m") - (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn,qmn,qn")]) - (match_operand:DI 4 "nonimmediate_operand" "ro,ro,0,0,ro,ro") - (match_operand:DI 5 "nonimmediate_operand" "0,0,ro,ro,ro,ro")))] + [(match_operand:QI 2 "nonimmediate_operand" "q,m,q,m") + (match_operand:QI 3 "general_operand" "qmn,qn,qmn,qn")]) + (match_operand:DI 4 "nonimmediate_operand" "ro,ro,0,0") + (match_operand:DI 5 "nonimmediate_operand" "0,0,ro,ro")))] "TARGET_CMOVE" "#") (define_insn "" - [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r,&r,&r,&r") + [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r,&r") (if_then_else:DI (match_operator 1 "comparison_operator" - [(match_operand 2 "nonimmediate_operand" "r,m,r,m,r,m") - (match_operand 3 "general_operand" "rmi,ri,rmi,ri,rmi,ri")]) - (match_operand:DI 4 "nonimmediate_operand" "ro,ro,0,0,ro,ro") - (match_operand:DI 5 "nonimmediate_operand" "0,0,ro,ro,ro,ro")))] + [(match_operand 2 "nonimmediate_operand" "r,m,r,m") + (match_operand 3 "general_operand" "rmi,ri,rmi,ri")]) + (match_operand:DI 4 "nonimmediate_operand" "ro,ro,0,0") + (match_operand:DI 5 "nonimmediate_operand" "0,0,ro,ro")))] "TARGET_CMOVE && GET_MODE_CLASS (GET_MODE (operands[2])) == MODE_INT" "#") (define_split - [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r") + [(set (match_operand:DI 0 "register_operand" "=&r,&r") (if_then_else:DI (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (const_int 0)]) - (match_operand:DI 3 "nonimmediate_operand" "ro,0,ro") - (match_operand:DI 4 "nonimmediate_operand" "0,ro,ro")))] + (match_operand:DI 3 "nonimmediate_operand" "ro,0") + (match_operand:DI 4 "nonimmediate_operand" "0,ro")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (match_dup 2)) @@ -7728,12 +7728,12 @@ byte_xor_operation: "") (define_split - [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r") + [(set (match_operand:DI 0 "register_operand" "=&r,&r") (if_then_else:DI (match_operator 1 "comparison_operator" [(match_operand 2 "nonimmediate_operand" "") (match_operand 3 "general_operand" "")]) - (match_operand:DI 4 "nonimmediate_operand" "ro,0,ro") - (match_operand:DI 5 "nonimmediate_operand" "0,ro,ro")))] + (match_operand:DI 4 "nonimmediate_operand" "ro,0") + (match_operand:DI 5 "nonimmediate_operand" "0,ro")))] "TARGET_CMOVE && reload_completed" [(set (cc0) (compare (match_dup 2) (match_dup 3))) (set (match_dup 0) @@ -7742,11 +7742,11 @@ byte_xor_operation: "") (define_insn "" - [(set (match_operand:DI 0 "register_operand" "=&r,&r,&r") + [(set (match_operand:DI 0 "register_operand" "=&r,&r") (if_then_else:DI (match_operator 1 "comparison_operator" [(cc0) (const_int 0)]) - (match_operand:DI 2 "nonimmediate_operand" "ro,0,ro") - (match_operand:DI 3 "nonimmediate_operand" "0,ro,ro")))] + (match_operand:DI 2 "nonimmediate_operand" "ro,0") + (match_operand:DI 3 "nonimmediate_operand" "0,ro")))] "TARGET_CMOVE && reload_completed" "* return output_int_conditional_move (which_alternative, operands);") diff --git a/gnu/dist/gcc/config/i386/openbsd.h b/gnu/dist/gcc/config/i386/openbsd.h new file mode 100644 index 00000000000..1b56262d9a5 --- /dev/null +++ b/gnu/dist/gcc/config/i386/openbsd.h @@ -0,0 +1,130 @@ +/* Configuration for an OpenBSD i386 target. + + Copyright (C) 1999 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. */ + +/* This is tested by i386gas.h. */ +#define YES_UNDERSCORES + +#include <i386/gstabs.h> + +/* Get perform_* macros to build libgcc.a. */ +#include <i386/perform.h> + +/* Get generic OpenBSD definitions. */ +#define OBSD_OLD_GAS +#include <openbsd.h> + +/* Run-time target specifications */ +#define CPP_PREDEFINES "-D__unix__ -D__i386__ -D__OpenBSD__ -Asystem(unix) -Asystem(OpenBSD) -Acpu(i386) -Amachine(i386)" + +/* Layout of source language data types. */ + +/* This must agree with <machine/ansi.h> */ +#undef SIZE_TYPE +#define SIZE_TYPE "unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +/* Assembler format: overall framework. */ + +#undef ASM_APP_ON +#define ASM_APP_ON "#APP\n" + +#undef ASM_APP_OFF +#define ASM_APP_OFF "#NO_APP\n" + +/* The following macros were originally stolen from i386v4.h. + These have to be defined to get PIC code correct. */ + +/* Assembler format: dispatch tables. */ + +/* How to output an element of a case-vector that is relative. + This is only used for PIC code. See comments by the `casesi' insn in + i386.md for an explanation of the expression this outputs. */ +#undef ASM_OUTPUT_ADDR_DIFF_ELT +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ + fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) + +/* Assembler format: sections. */ + +/* Indicate when jump tables go in the text section. This is + necessary when compiling PIC code. */ +#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) + +/* Stack & calling: aggregate returns. */ + +/* Don't default to pcc-struct-return, because gcc is the only compiler, and + we want to retain compatibility with older gcc versions. */ +#define DEFAULT_PCC_STRUCT_RETURN 0 + +/* Assembler format: alignment output. */ + +/* Kludgy test: when gas is upgraded, it will have p2align, and no problems + with nops. */ +#ifndef HAVE_GAS_MAX_SKIP_P2ALIGN +/* i386 OpenBSD still uses an older gas that doesn't insert nops by default + when the .align directive demands to insert extra space in the text + segment. */ +#undef ASM_OUTPUT_ALIGN +#define ASM_OUTPUT_ALIGN(FILE,LOG) \ + if ((LOG)!=0) fprintf ((FILE), "\t.align %d,0x90\n", (LOG)) +#endif + +/* Stack & calling: profiling. */ + +/* OpenBSD's profiler recovers all information from the stack pointer. + The icky part is not here, but in machine/profile.h. */ +#undef FUNCTION_PROFILER +#define FUNCTION_PROFILER(FILE, LABELNO) \ + fputs (flag_pic ? "\tcall mcount@PLT\n": "\tcall mcount\n", FILE); + +/* Assembler format: exception region output. */ + +/* All configurations that don't use elf must be explicit about not using + dwarf unwind information. egcs doesn't try too hard to check internal + configuration files... */ +#define DWARF2_UNWIND_INFO 0 + +/* Assembler format: alignment output. */ + +/* A C statement to output to the stdio stream FILE an assembler + command to advance the location counter to a multiple of 1<<LOG + bytes if it is within MAX_SKIP bytes. + + This will be used to align code labels according to Intel + recommendations, in prevision of binutils upgrade. */ +#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN +#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ + do { \ + if ((LOG) != 0) \ + if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ + else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ + } while (0) +#endif + +/* Note that we pick up ASM_OUTPUT_MI_THUNK from unix.h. */ + diff --git a/gnu/dist/gcc/config/i386/xm-openbsd.h b/gnu/dist/gcc/config/i386/xm-openbsd.h new file mode 100644 index 00000000000..1a79e83bc4a --- /dev/null +++ b/gnu/dist/gcc/config/i386/xm-openbsd.h @@ -0,0 +1,23 @@ +/* Configuration file for i386 hosts running OpenBSD. + Copyright (C) 1999 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. */ + +#include <xm-openbsd.h> +#include <i386/xm-i386.h> + diff --git a/gnu/dist/gcc/config/m68k/m68k.md b/gnu/dist/gcc/config/m68k/m68k.md index dfe0cbc313e..a95b32259c8 100644 --- a/gnu/dist/gcc/config/m68k/m68k.md +++ b/gnu/dist/gcc/config/m68k/m68k.md @@ -1,5 +1,5 @@ ;;- Machine description for GNU compiler, Motorola 68000 Version -;; Copyright (C) 1987, 88, 93-97, 1998 Free Software Foundation, Inc. +;; Copyright (C) 1987, 88, 93-98, 1999 Free Software Foundation, Inc. ;; This file is part of GNU CC. @@ -2099,7 +2099,7 @@ ;; (plus:DI (match_operand:DI 2 "general_operand" "%0") ;; (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") ;; (const_int 32))))] - (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "o,r") + (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,r") (const_int 32)) (match_operand:DI 2 "general_operand" "0,0")))] "" @@ -2118,7 +2118,7 @@ ;; (plus:DI (match_operand:DI 2 "general_operand" "%0") ;; (ashift:DI (match_operand:DI 1 "general_operand" "ro") ;; (const_int 32))))] - (plus:DI (ashift:DI (match_operand:DI 1 "general_operand" "o,r") + (plus:DI (ashift:DI (match_operand:DI 1 "general_operand" "ro,r") (const_int 32)) (match_operand:DI 2 "general_operand" "0,0")))] "" @@ -4558,9 +4558,10 @@ [(set (match_operand:DI 0 "general_operand" "=d") (ashift:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] - "((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3) - || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16 - || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63))" + "(!TARGET_5200 + && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3) + || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16 + || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)))" "* { operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); @@ -4589,13 +4590,15 @@ [(set (match_operand:DI 0 "general_operand" "") (ashift:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] - "" + "!TARGET_5200" " { + /* ??? This is a named pattern like this is not allowed to FAIL based + on its operands. */ if (GET_CODE (operands[2]) != CONST_INT - || ((INTVAL (operands[2]) < 1 || INTVAL (operands[2]) > 3) - && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16 - && (INTVAL (operands[2]) < 32 || INTVAL (operands[2]) > 63))) + || ((INTVAL (operands[2]) < 1 || INTVAL (operands[2]) > 3) + && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16 + && (INTVAL (operands[2]) < 32 || INTVAL (operands[2]) > 63))) FAIL; } ") @@ -4758,11 +4761,11 @@ [(set (match_operand:DI 0 "general_operand" "=d") (ashiftrt:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] - "!TARGET_5200 + "(!TARGET_5200 && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3) - || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16 - || INTVAL (operands[2]) == 31 - || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63))" + || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16 + || INTVAL (operands[2]) == 31 + || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)))" "* { operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); @@ -4801,10 +4804,12 @@ "!TARGET_5200" " { + /* ??? This is a named pattern like this is not allowed to FAIL based + on its operands. */ if (GET_CODE (operands[2]) != CONST_INT - || ((INTVAL (operands[2]) < 1 || INTVAL (operands[2]) > 3) - && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16 - && (INTVAL (operands[2]) < 31 || INTVAL (operands[2]) > 63))) + || ((INTVAL (operands[2]) < 1 || INTVAL (operands[2]) > 3) + && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16 + && (INTVAL (operands[2]) < 31 || INTVAL (operands[2]) > 63))) FAIL; } ") @@ -4929,10 +4934,10 @@ [(set (match_operand:DI 0 "general_operand" "=d") (lshiftrt:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] - "!TARGET_5200 + "(!TARGET_5200 && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3) - || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16 - || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63))" + || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16 + || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)))" "* { operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); @@ -4967,10 +4972,12 @@ "!TARGET_5200" " { + /* ??? This is a named pattern like this is not allowed to FAIL based + on its operands. */ if (GET_CODE (operands[2]) != CONST_INT - || ((INTVAL (operands[2]) < 1 || INTVAL (operands[2]) > 3) - && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16 - && (INTVAL (operands[2]) < 32 || INTVAL (operands[2]) > 63))) + || ((INTVAL (operands[2]) < 1 || INTVAL (operands[2]) > 3) + && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16 + && (INTVAL (operands[2]) < 32 || INTVAL (operands[2]) > 63))) FAIL; } ") diff --git a/gnu/dist/gcc/config/m68k/openbsd.h b/gnu/dist/gcc/config/m68k/openbsd.h new file mode 100644 index 00000000000..bdec4563393 --- /dev/null +++ b/gnu/dist/gcc/config/m68k/openbsd.h @@ -0,0 +1,121 @@ +/* Configuration file for an m68k OpenBSD target. + Copyright (C) 1999 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. */ + +/* m68k is an old configuration that does not yet use the TARGET_CPU_DEFAULT + framework. */ +#define TARGET_DEFAULT (MASK_BITFIELD | MASK_68881 | MASK_68020) + +#include <m68k/m68k.h> + +/* Get generic OpenBSD definitions. */ +#define OBSD_OLD_GAS +#include <openbsd.h> + +/* Define __HAVE_68881__ in preprocessor, unless -msoft-float is specified. + This will control the use of inline 68881 insns in certain macros. */ +#undef CPP_SPEC +#define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__ -D__HAVE_FPU__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" + +/* Run-time target specifications */ +#define CPP_PREDEFINES "-D__unix__ -D__m68k__ -D__mc68000__ -D__mc68020__ -D__OpenBSD__ -Asystem(unix) -Asystem(OpenBSD) -Acpu(m68k) -Amachine(m68k)" + +/* TODO: activate subtarget types when gas is updated. +#define ASM_SPEC "%| %{m68030} %{m68040} %{m68060} %{fpic:-k} %{fPIC:-k -K}" + */ + +/* Layout of source language data types. */ + +/* This must agree with <machine/ansi.h> */ +#undef SIZE_TYPE +#define SIZE_TYPE "unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +/* Storage layout. */ + +/* Every structure or union's size must be a multiple of 2 bytes. */ +#define STRUCTURE_SIZE_BOUNDARY 16 + +/* Specific options for DBX Output. */ + +/* This is BSD, so it wants DBX format. */ +#define DBX_DEBUGGING_INFO + +/* Do not break .stabs pseudos into continuations. */ +#define DBX_CONTIN_LENGTH 0 + +/* This is the char to use for continuation (in case we need to turn + continuation back on). */ +#define DBX_CONTIN_CHAR '?' + +/* Stack & calling: aggregate returns. */ + +/* Don't default to pcc-struct-return, because gcc is the only compiler, and + we want to retain compatibility with older gcc versions. */ +#define DEFAULT_PCC_STRUCT_RETURN 0 + +/* Assembler format: exception region output. */ + +/* All configurations that don't use elf must be explicit about not using + dwarf unwind information. egcs doesn't try too hard to check internal + configuration files... */ +#define DWARF2_UNWIND_INFO 0 + + +/* TODO: ASM_OUTPUT_MI_THUNK is busted. I need to figure out + what bra func@PLTPC means under linux, and find the corresponding + construction for our gas/pic setup. */ +#if 0 +/* Taken from linux.h. Processor dependent optimized code to handle C++ + multiple inheritance vtable lookup. */ + +/* Output code to add DELTA to the first argument, and then jump to FUNCTION. + Used for C++ multiple inheritance. */ +#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ +do { \ + if (DELTA > 0 && DELTA <= 8) \ + asm_fprintf (FILE, "\taddq.l %I%d,4(%Rsp)\n", DELTA); \ + else if (DELTA < 0 && DELTA >= -8) \ + asm_fprintf (FILE, "\tsubq.l %I%d,4(%Rsp)\n", -DELTA); \ + else \ + asm_fprintf (FILE, "\tadd.l %I%d,4(%Rsp)\n", DELTA); \ + \ + if (flag_pic) \ + { \ + fprintf (FILE, "\tbra.l "); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "@PLTPC\n"); \ + } \ + else \ + { \ + fprintf (FILE, "\tjmp "); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "\n"); \ + } \ +} while (0) +#endif + diff --git a/gnu/dist/gcc/config/m68k/xm-openbsd.h b/gnu/dist/gcc/config/m68k/xm-openbsd.h new file mode 100644 index 00000000000..c4312ff8725 --- /dev/null +++ b/gnu/dist/gcc/config/m68k/xm-openbsd.h @@ -0,0 +1,23 @@ +/* Configuration file for an host running m68k OpenBSD. + Copyright (C) 1999 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. */ + +#include <xm-openbsd.h> +#include <m68k/xm-m68k.h> + diff --git a/gnu/dist/gcc/config/m88k/dgux.h b/gnu/dist/gcc/config/m88k/dgux.h index 33234c8182c..838bb1983ae 100644 --- a/gnu/dist/gcc/config/m88k/dgux.h +++ b/gnu/dist/gcc/config/m88k/dgux.h @@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */ (TARGET_SVR4 ? DWARF_DEBUG : SDB_DEBUG) #ifndef VERSION_INFO2 -#define VERSION_INFO2 "$Revision: 1.1.1.5 $" +#define VERSION_INFO2 "$Revision: 1.1.1.6 $" #endif #ifndef NO_BUGS #define AS_BUG_IMMEDIATE_LABEL diff --git a/gnu/dist/gcc/config/m88k/m88k.h b/gnu/dist/gcc/config/m88k/m88k.h index c100ef7d5b0..f3b3f6ad99a 100644 --- a/gnu/dist/gcc/config/m88k/m88k.h +++ b/gnu/dist/gcc/config/m88k/m88k.h @@ -198,13 +198,13 @@ extern char * reg_names[]; Redefined in sysv4.h, and luna.h. */ #define VERSION_INFO1 "m88k, " #ifndef VERSION_INFO2 -#define VERSION_INFO2 "$Revision: 1.1.1.5 $" +#define VERSION_INFO2 "$Revision: 1.1.1.6 $" #endif #ifndef VERSION_STRING #define VERSION_STRING version_string #ifdef __STDC__ -#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.1.1.5 $ " __DATE__ +#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.1.1.6 $ " __DATE__ #else #define TM_RCS_ID "$What: <@(#) m88k.h,v 1.1.1.2.2.2> $" #endif /* __STDC__ */ diff --git a/gnu/dist/gcc/config/openbsd.h b/gnu/dist/gcc/config/openbsd.h new file mode 100644 index 00000000000..af8358eb153 --- /dev/null +++ b/gnu/dist/gcc/config/openbsd.h @@ -0,0 +1,302 @@ +/* Base configuration file for all OpenBSD targets. + Copyright (C) 1999 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. */ + +/* Common OpenBSD configuration. + All OpenBSD architectures include this file, which is intended as + a repository for common defines. + + Some defines are common to all architectures, a few of them are + triggered by OBSD_* guards, so that we won't override architecture + defaults by mistakes. + + OBSD_HAS_CORRECT_SPECS: + another mechanism provides correct specs already. + OBSD_NO_DYNAMIC_LIBRARIES: + no implementation of dynamic libraries. + OBSD_OLD_GAS: + older flavor of gas which needs help for PIC. + OBSD_HAS_DECLARE_FUNCTION_NAME, OBSD_HAS_DECLARE_FUNCTION_SIZE, + OBSD_HAS_DECLARE_OBJECT: + PIC support, FUNCTION_NAME/FUNCTION_SIZE are independent, whereas + the corresponding logic for OBJECTS is necessarily coupled. + + There are also a few `default' defines such as ASM_WEAKEN_LABEL, + intended as common ground for arch that don't provide + anything suitable. */ + +/* OPENBSD_NATIVE is defined only when gcc is configured as part of + the OpenBSD source tree, specifically through Makefile.bsd-wrapper. + + In such a case the include path can be trimmed as there is no + distinction between system includes and gcc includes. */ + +/* This configuration method, namely Makefile.bsd-wrapper and + OPENBSD_NATIVE is NOT recommended for building cross-compilers. */ + +#ifdef OPENBSD_NATIVE + +#undef GCC_INCLUDE_DIR +#define GCC_INCLUDE_DIR "/usr/include" + +/* The compiler is configured with ONLY the gcc/g++ standard headers. */ +#undef INCLUDE_DEFAULTS +#define INCLUDE_DEFAULTS \ + { \ + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \ + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \ + { 0, 0, 0, 0 } \ + } + +/* Under OpenBSD, the normal location of the various *crt*.o files is the + /usr/lib directory. */ +#define STANDARD_STARTFILE_PREFIX "/usr/lib/" + +#endif + + +/* Controlling the compilation driver. */ + +/* CPP_SPEC appropriate for OpenBSD. We deal with -posix and -pthread. + XXX the way threads are handling currently is not very satisfying, + since all code must be compiled with -pthread to work. + This two-stage defines makes it easy to pick that for targets that + have subspecs. */ +#define OBSD_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" + +/* LIB_SPEC appropriate for OpenBSD. Select the appropriate libc, + depending on profiling and threads. Basically, + -lc(_r)?(_p)?, select _r for threads, and _p for p or pg. */ +#define OBSD_LIB_SPEC "-lc%{pthread:_r}%{p:_p}%{!p:%{pg:_p}}" + +#ifndef OBSD_HAS_CORRECT_SPECS + +#ifndef OBSD_NO_DYNAMIC_LIBRARIES +#undef SWITCH_TAKES_ARG +#define SWITCH_TAKES_ARG(CHAR) \ + (DEFAULT_SWITCH_TAKES_ARG (CHAR) \ + || (CHAR) == 'R') +#endif + +#undef CPP_SPEC +#define CPP_SPEC OBSD_CPP_SPEC + +#ifdef OBSD_OLD_GAS +/* ASM_SPEC appropriate for OpenBSD. For some architectures, OpenBSD + still uses a special flavor of gas that needs to be told when generating + pic code. */ +#undef ASM_SPEC +#define ASM_SPEC "%{fpic:-k} %{fPIC:-k -K} %|" +#else +/* Since we use gas, stdin -> - is a good idea, but we don't want to + override native specs just for that. */ +#ifndef ASM_SPEC +#define ASM_SPEC "%|" +#endif +#endif + +/* LINK_SPEC appropriate for OpenBSD. Support for GCC options + -static, -assert, and -nostdlib. */ +#undef LINK_SPEC +#ifdef OBSD_NO_DYNAMIC_LIBRARIES +#define LINK_SPEC \ + "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{assert*}" +#else +#define LINK_SPEC \ + "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} %{static:-Bstatic} %{assert*}" +#endif + +#undef LIB_SPEC +#define LIB_SPEC OBSD_LIB_SPEC +#endif + + +/* Runtime target specification. */ + +/* You must redefine CPP_PREDEFINES in any arch specific file. */ +#undef CPP_PREDEFINES + +/* Implicit calls to library routines. */ + +/* Use memcpy and memset instead of bcopy and bzero. */ +#define TARGET_MEM_FUNCTIONS + +/* Miscellaneous parameters. */ + +/* Tell libgcc2.c that OpenBSD targets support atexit. */ +#define HAVE_ATEXIT + +/* Controlling debugging info: dbx options. */ + +/* Don't use the `xsTAG;' construct in DBX output; OpenBSD systems that + use DBX don't support it. */ +#define DBX_NO_XREFS + + +/* Support of shared libraries, mostly imported from svr4.h through netbsd. */ +/* Two differences from svr4.h: + - we use . - _func instead of a local label, + - we put extra spaces in expressions such as + .type _func , @function + This is more readable for a human being and confuses c++filt less. */ + +/* Assembler format: output and generation of labels. */ + +/* Define the strings used for the .type and .size directives. + These strings generally do not vary from one system running OpenBSD + to another, but if a given system needs to use different pseudo-op + names for these, they may be overridden in the arch specific file. */ + +/* OpenBSD assembler is hacked to have .type & .size support even in a.out + format object files. Functions size are supported but not activated + yet (look for GRACE_PERIOD_EXPIRED in gas/config/obj-aout.c). */ + +#undef TYPE_ASM_OP +#undef SIZE_ASM_OP + +#define TYPE_ASM_OP ".type" +#define SIZE_ASM_OP ".size" + +/* The following macro defines the format used to output the second + operand of the .type assembler directive. */ +#undef TYPE_OPERAND_FMT +#define TYPE_OPERAND_FMT "@%s" + +/* Provision if extra assembler code is needed to declare a function's result + (taken from svr4, not needed yet actually). */ +#ifndef ASM_DECLARE_RESULT +#define ASM_DECLARE_RESULT(FILE, RESULT) +#endif + +/* These macros generate the special .type and .size directives which + are used to set the corresponding fields of the linker symbol table + entries under OpenBSD. These macros also have to output the starting + labels for the relevant functions/objects. */ + +#ifndef OBSD_HAS_DECLARE_FUNCTION_NAME +/* Extra assembler code needed to declare a function properly. + Some assemblers may also need to also have something extra said + about the function's return value. We allow for that here. */ +#undef ASM_DECLARE_FUNCTION_NAME +#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ + do { \ + fprintf (FILE, "\t%s\t", TYPE_ASM_OP); \ + assemble_name (FILE, NAME); \ + fputs (" , ", FILE); \ + fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ + putc ('\n', FILE); \ + ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ + ASM_OUTPUT_LABEL(FILE, NAME); \ + } while (0) +#endif + +#ifndef OBSD_HAS_DECLARE_FUNCTION_SIZE +/* Declare the size of a function. */ +#undef ASM_DECLARE_FUNCTION_SIZE +#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ + do { \ + if (!flag_inhibit_size_directive) \ + { \ + fprintf (FILE, "\t%s\t", SIZE_ASM_OP); \ + assemble_name (FILE, (FNAME)); \ + fputs (" , . - ", FILE); \ + assemble_name (FILE, (FNAME)); \ + putc ('\n', FILE); \ + } \ + } while (0) +#endif + +#ifndef OBSD_HAS_DECLARE_OBJECT +/* Extra assembler code needed to declare an object properly. */ +#undef ASM_DECLARE_OBJECT_NAME +#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ + do { \ + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ + assemble_name (FILE, NAME); \ + fputs (" , ", FILE); \ + fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ + putc ('\n', FILE); \ + size_directive_output = 0; \ + if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \ + { \ + size_directive_output = 1; \ + fprintf (FILE, "\t%s\t", SIZE_ASM_OP); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, " , %d\n", int_size_in_bytes (TREE_TYPE (DECL)));\ + } \ + ASM_OUTPUT_LABEL (FILE, NAME); \ + } while (0) + +/* Output the size directive for a decl in rest_of_decl_compilation + in the case where we did not do so before the initializer. + Once we find the error_mark_node, we know that the value of + size_directive_output was set by ASM_DECLARE_OBJECT_NAME + when it was run for the same decl. */ +#undef ASM_FINISH_DECLARE_OBJECT +#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ +do { \ + char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ + if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \ + && ! AT_END && TOP_LEVEL \ + && DECL_INITIAL (DECL) == error_mark_node \ + && !size_directive_output) \ + { \ + size_directive_output = 1; \ + fprintf (FILE, "\t%s\t", SIZE_ASM_OP); \ + assemble_name (FILE, name); \ + fprintf (FILE, " , %d\n", int_size_in_bytes (TREE_TYPE (DECL)));\ + } \ + } while (0) +#endif + + +/* Those are `generic' ways to weaken/globalize a label. We shouldn't need + to override a processor specific definition. Hence, #ifndef ASM_* + In case overriding turns out to be needed, one can always #undef ASM_* + before including this file. */ + +/* Tell the assembler that a symbol is weak. */ +/* Note: netbsd arm32 assembler needs a .globl here. An override may + be needed when/if we go for arm32 support. */ +#ifndef ASM_WEAKEN_LABEL +#define ASM_WEAKEN_LABEL(FILE,NAME) \ + do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ + fputc ('\n', FILE); } while (0) +#endif + +/* Tell the assembler that a symbol is global. */ +#ifndef ASM_GLOBALIZE_LABEL +#define ASM_GLOBALIZE_LABEL(FILE,NAME) \ + do { fputs ("\t.globl\t", FILE); assemble_name (FILE, NAME); \ + fputc ('\n', FILE); } while(0) +#endif + + +/* Storage layout. */ + +/* We don't have to worry about binary compatibility with older C++ code, + but there is a big known bug with vtable thunks which has not been + fixed yet, so DON'T activate it by default. */ +/* #define DEFAULT_VTABLE_THUNKS 1 */ + + +/* Otherwise, since we support weak, gthr.h erroneously tries to use + #pragma weak. */ +#define GTHREAD_USE_WEAK 0 + diff --git a/gnu/dist/gcc/config/rs6000/rs6000.h b/gnu/dist/gcc/config/rs6000/rs6000.h index a2252da1430..f4d51347017 100644 --- a/gnu/dist/gcc/config/rs6000/rs6000.h +++ b/gnu/dist/gcc/config/rs6000/rs6000.h @@ -1960,6 +1960,18 @@ typedef struct rs6000_args #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN) \ do { \ + /* We must recognize output that we have already generated ourselves. */ \ + if (GET_CODE (X) == PLUS \ + && GET_CODE (XEXP (X, 0)) == PLUS \ + && GET_CODE (XEXP (XEXP (X, 0), 0)) == REG \ + && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT \ + && GET_CODE (XEXP (X, 1)) == CONST_INT) \ + { \ + push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL_PTR, \ + BASE_REG_CLASS, GET_MODE (X), VOIDmode, 0, 0, \ + OPNUM, TYPE); \ + goto WIN; \ + } \ if (GET_CODE (X) == PLUS \ && GET_CODE (XEXP (X, 0)) == REG \ && REGNO (XEXP (X, 0)) < FIRST_PSEUDO_REGISTER \ diff --git a/gnu/dist/gcc/config/rs6000/rs6000.md b/gnu/dist/gcc/config/rs6000/rs6000.md index 0224ef34874..b879bbf82f1 100644 --- a/gnu/dist/gcc/config/rs6000/rs6000.md +++ b/gnu/dist/gcc/config/rs6000/rs6000.md @@ -7611,7 +7611,7 @@ if (GET_CODE (operands[1]) != SYMBOL_REF || (INTVAL (operands[3]) & CALL_LONG) != 0) { - if (INTVAL (operands[2]) & CALL_LONG) + if (INTVAL (operands[3]) & CALL_LONG) operands[1] = rs6000_longcall_ref (operands[1]); if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS) diff --git a/gnu/dist/gcc/config/sh/sh.c b/gnu/dist/gcc/config/sh/sh.c index ac30a6676fa..38209809674 100644 --- a/gnu/dist/gcc/config/sh/sh.c +++ b/gnu/dist/gcc/config/sh/sh.c @@ -552,7 +552,9 @@ output_far_jump (insn, op) this.lab = gen_label_rtx (); - if (offset >= -32764 && offset - get_attr_length (insn) <= 32766) + if (TARGET_SH2 + && offset >= -32764 + && offset - get_attr_length (insn) <= 32766) { far = 0; jump = "mov.w %O0,%1;braf %1"; diff --git a/gnu/dist/gcc/config/sparc/openbsd.h b/gnu/dist/gcc/config/sparc/openbsd.h new file mode 100644 index 00000000000..19ece975e99 --- /dev/null +++ b/gnu/dist/gcc/config/sparc/openbsd.h @@ -0,0 +1,68 @@ +/* Configuration file for sparc OpenBSD target. + Copyright (C) 1999 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. */ + +#include <sparc/sparc.h> + +/* Get generic OpenBSD definitions. */ +#define OBSD_OLD_GAS +#include <openbsd.h> + +/* Run-time target specifications. */ +#define CPP_PREDEFINES "-D__unix__ -D__sparc__ -D__OpenBSD__ -Asystem(unix) -Asystem(OpenBSD) -Acpu(sparc) -Amachine(sparc)" + +/* Layout of source language data types */ + +/* This must agree with <machine/ansi.h> */ +#undef SIZE_TYPE +#define SIZE_TYPE "unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +/* Specific options for DBX Output. */ + +/* This is BSD, so it wants DBX format. */ +#define DBX_DEBUGGING_INFO + +/* This is the char to use for continuation */ +#define DBX_CONTIN_CHAR '?' + +/* Stack & calling: aggregate returns. */ + +/* Don't default to pcc-struct-return, because gcc is the only compiler, and + we want to retain compatibility with older gcc versions. */ +#undef DEFAULT_PCC_STRUCT_RETURN +#define DEFAULT_PCC_STRUCT_RETURN 0 + +/* Assembler format: exception region output. */ + +/* All configurations that don't use elf must be explicit about not using + dwarf unwind information. egcs doesn't try too hard to check internal + configuration files... */ +#define DWARF2_UNWIND_INFO 0 + +/* Default sparc.h does already define ASM_OUTPUT_MI_THUNK */ + diff --git a/gnu/dist/gcc/config/sparc/sparc.c b/gnu/dist/gcc/config/sparc/sparc.c index da7c257ba94..e3507290712 100644 --- a/gnu/dist/gcc/config/sparc/sparc.c +++ b/gnu/dist/gcc/config/sparc/sparc.c @@ -1449,7 +1449,8 @@ legitimize_pic_address (orig, mode, reg) enum machine_mode mode ATTRIBUTE_UNUSED; rtx reg; { - if (GET_CODE (orig) == SYMBOL_REF) + if (GET_CODE (orig) == SYMBOL_REF + || GET_CODE (orig) == LABEL_REF) { rtx pic_ref, address; rtx insn; @@ -1531,9 +1532,6 @@ legitimize_pic_address (orig, mode, reg) } return gen_rtx_PLUS (Pmode, base, offset); } - else if (GET_CODE (orig) == LABEL_REF) - /* ??? Why do we do this? */ - current_function_uses_pic_offset_table = 1; return orig; } @@ -1670,26 +1668,8 @@ emit_move_sequence (operands, mode) } } - if (GET_CODE (operand1) == LABEL_REF - && mode == SImode && flag_pic) - { - if (TARGET_ARCH64) - abort (); - emit_insn (gen_move_pic_label_si (operand0, operand1)); - return 1; - } - /* Non-pic LABEL_REF's in sparc64 are expensive to do the normal way, - so always use special code. */ - else if (GET_CODE (operand1) == LABEL_REF - && mode == DImode) - { - if (! TARGET_ARCH64) - abort (); - emit_insn (gen_move_label_di (operand0, operand1)); - return 1; - } /* DImode HIGH values in sparc64 need a clobber added. */ - else if (TARGET_ARCH64 + if (TARGET_ARCH64 && GET_CODE (operand1) == HIGH && GET_MODE (operand1) == DImode) { emit_insn (gen_sethi_di_sp64 (operand0, XEXP (operand1, 0))); @@ -2754,7 +2734,7 @@ output_scc_insn (operands, insn) /* operands[3] is an unused slot. */ operands[3] = label; - strcpy (string, output_cbranch (operands[2], 3, 0, 1, 0)); + strcpy (string, output_cbranch (operands[2], 3, 0, 1, 0, 0)); strcat (string, "\n\tmov 1,%0\n\tmov 0,%0"); if (need_label) diff --git a/gnu/dist/gcc/config/sparc/sparc.h b/gnu/dist/gcc/config/sparc/sparc.h index 8dcc069a614..e66f5e6a670 100644 --- a/gnu/dist/gcc/config/sparc/sparc.h +++ b/gnu/dist/gcc/config/sparc/sparc.h @@ -2933,12 +2933,10 @@ do { \ ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \ if (Pmode == SImode) \ fprintf (FILE, "\t.word\t"); \ - else if (TARGET_CM_MEDLOW) \ - fprintf (FILE, "\t.word\t0\n\t.word\t"); \ else \ fprintf (FILE, "\t.xword\t"); \ assemble_name (FILE, label); \ - fprintf (FILE, "\n"); \ + fputc ('\n', FILE); \ } while (0) /* This is how to output an element of a case-vector that is relative. @@ -2950,12 +2948,13 @@ do { \ ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \ if (Pmode == SImode) \ fprintf (FILE, "\t.word\t"); \ - else if (TARGET_CM_MEDLOW) \ - fprintf (FILE, "\t.word\t0\n\t.word\t"); \ else \ fprintf (FILE, "\t.xword\t"); \ assemble_name (FILE, label); \ - fprintf (FILE, "-1b\n"); \ + ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \ + fputc ('-', FILE); \ + assemble_name (FILE, label); \ + fputc ('\n', FILE); \ } while (0) /* This is how to output an assembler line @@ -3106,6 +3105,7 @@ do { \ else if (GET_CODE (index) == REG) \ fprintf (FILE, "+%s", reg_names[REGNO (index)]); \ else if (GET_CODE (index) == SYMBOL_REF \ + || GET_CODE (index) == LABEL_REF \ || GET_CODE (index) == CONST) \ fputc ('+', FILE), output_addr_const (FILE, index); \ else abort (); \ diff --git a/gnu/dist/gcc/config/sparc/sparc.md b/gnu/dist/gcc/config/sparc/sparc.md index 4488b73bfb7..ccfde05b21d 100644 --- a/gnu/dist/gcc/config/sparc/sparc.md +++ b/gnu/dist/gcc/config/sparc/sparc.md @@ -1727,61 +1727,6 @@ "rd %%pc,%0" [(set_attr "type" "move")]) -;; Special pic pattern, for loading the address of a label into a register. -;; It clobbers o7 because the call puts the return address (i.e. pc value) -;; there. The pic tablejump pattern also uses this. - -(define_insn "move_pic_label_si" - [(set (match_operand:SI 0 "register_operand" "=r") - ; This was previously (label_ref:SI (match_operand 1 "" "")) but that - ; loses the volatil and other flags of the original label_ref. - (match_operand:SI 1 "label_ref_operand" "")) - (set (reg:SI 15) (pc))] - "flag_pic" - "* -{ - if (get_attr_length (insn) == 2) - return \"\\n1:\;call 2f\;add %%o7,%%lo(%l1-1b),%0\\n2:\"; - else - return \"\\n1:\;call 2f\;sethi %%hi(%l1-1b),%0\\n2:\\tor %0,%%lo(%l1-1b),%0\;add %0,%%o7,%0\"; -}" - [(set_attr "type" "multi") - ; 960 = 4096 bytes / 4 bytes/insn - 64 (for not always perfect length calcs) - (set (attr "length") (if_then_else (ltu (minus (match_dup 1) (pc)) - (const_int 960)) - (const_int 2) - (const_int 4)))]) - -;; Special sparc64 pattern for loading the address of a label into a register. -;; The pic and non-pic cases are the same since it's the most efficient way. -;; -;; ??? The non-pic case doesn't need to use %o7, we could use a scratch -;; instead. But the pic case doesn't need to use %o7 either. We handle them -;; both here so that when this is fixed, they can both be fixed together. -;; Don't forget that the pic jump table stuff uses %o7 (that will need to be -;; changed too). - -(define_insn "move_label_di" - [(set (match_operand:DI 0 "register_operand" "=r") - ; This was previously (label_ref:DI (match_operand 1 "" "")) but that - ; loses the volatil and other flags of the original label_ref. - (match_operand:DI 1 "label_ref_operand" "")) - (set (reg:DI 15) (pc))] - "TARGET_ARCH64" - "* -{ - if (get_attr_length (insn) == 2) - return \"\\n1:\;rd %%pc,%%o7\;add %%o7,%l1-1b,%0\"; - else - return \"\\n1:\;rd %%pc,%%o7\;sethi %%hi(%l1-1b),%0\;add %0,%%lo(%l1-1b),%0\;sra %0,0,%0\;add %0,%%o7,%0\"; -}" - [(set_attr "type" "multi") - ; 960 = 4096 bytes / 4 bytes/insn - 64 (for not always perfect length calcs) - (set (attr "length") (if_then_else (ltu (minus (match_dup 1) (pc)) - (const_int 960)) - (const_int 2) - (const_int 5)))]) - (define_insn "*sethi_hi" [(set (match_operand:HI 0 "register_operand" "=r") (high:HI (match_operand 1 "" "")))] @@ -5604,34 +5549,19 @@ if (! TARGET_ARCH64) if (GET_MODE (operands[0]) != Pmode) abort (); - /* We need to use the PC value in %o7 that was set up when the address - of the label was loaded into a register, so we need different RTL. */ + /* In pic mode, our address differences are against the base of the + table. Add that base value back in; CSE ought to be able to combine + the two address loads. */ if (flag_pic) { - if (!TARGET_PTR64) - emit_jump_insn (gen_pic_tablejump_32 (operands[0], operands[1])); - else - emit_jump_insn (gen_pic_tablejump_64 (operands[0], operands[1])); - DONE; + rtx tmp, tmp2; + tmp = gen_rtx_LABEL_REF (Pmode, operands[1]); + tmp2 = operands[0]; + tmp = gen_rtx_PLUS (Pmode, tmp2, tmp); + operands[0] = memory_address (Pmode, tmp); } }") -(define_insn "pic_tablejump_32" - [(set (pc) (match_operand:SI 0 "register_operand" "r")) - (use (label_ref (match_operand 1 "" ""))) - (use (reg:SI 15))] - "! TARGET_PTR64" - "jmp %%o7+%0%#" - [(set_attr "type" "uncond_branch")]) - -(define_insn "pic_tablejump_64" - [(set (pc) (match_operand:DI 0 "register_operand" "r")) - (use (label_ref (match_operand 1 "" ""))) - (use (reg:DI 15))] - "TARGET_PTR64" - "jmp %%o7+%0%#" - [(set_attr "type" "uncond_branch")]) - (define_insn "*tablejump_sp32" [(set (pc) (match_operand:SI 0 "address_operand" "p")) (use (label_ref (match_operand 1 "" "")))] diff --git a/gnu/dist/gcc/config/sparc/xm-openbsd.h b/gnu/dist/gcc/config/sparc/xm-openbsd.h new file mode 100644 index 00000000000..2df7fb3e363 --- /dev/null +++ b/gnu/dist/gcc/config/sparc/xm-openbsd.h @@ -0,0 +1,23 @@ +/* Configuration file for an host running sparc OpenBSD. + Copyright (C) 1999 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. */ + +#include <xm-openbsd.h> +#include <sparc/xm-sparc.h> + diff --git a/gnu/dist/gcc/config/t-install-cpp b/gnu/dist/gcc/config/t-install-cpp new file mode 100644 index 00000000000..9f887543d03 --- /dev/null +++ b/gnu/dist/gcc/config/t-install-cpp @@ -0,0 +1,3 @@ +# Handle cpp installation. +INSTALL_CPP=install-cpp +UNINSTALL_CPP=uninstall-cpp diff --git a/gnu/dist/gcc/config/t-openbsd b/gnu/dist/gcc/config/t-openbsd new file mode 100644 index 00000000000..6bd8123d8af --- /dev/null +++ b/gnu/dist/gcc/config/t-openbsd @@ -0,0 +1,9 @@ +# Don't run fixproto +STMP_FIXPROTO = + +# We don't need GCC's own include files but we do need lang specific ones. +USER_H = ${LANG_EXTRA_HEADERS} +INSTALL_ASSERT_H = + +# We don't want collisions with our mkstemps +T_CFLAGS=-Dmkstemps=my_mkstemps diff --git a/gnu/dist/gcc/config/t-openbsd-thread b/gnu/dist/gcc/config/t-openbsd-thread new file mode 100644 index 00000000000..4b25f25a4e5 --- /dev/null +++ b/gnu/dist/gcc/config/t-openbsd-thread @@ -0,0 +1,5 @@ +# This is currently needed to compile libgcc2 for threads support +TARGET_LIBGCC2_CFLAGS=-pthread +#T_CFLAGS=-pthread +#T_CPPFLAGS=-pthread + diff --git a/gnu/dist/gcc/config/xm-openbsd.h b/gnu/dist/gcc/config/xm-openbsd.h new file mode 100644 index 00000000000..74a842184c3 --- /dev/null +++ b/gnu/dist/gcc/config/xm-openbsd.h @@ -0,0 +1,35 @@ +/* Configuration fragment for hosts running a version of OpenBSD. + Copyright (C) 1999 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. */ +/* This file gets included by all architectures. It holds stuff + that ought to be defined when hosting a compiler on an OpenBSD + machine, independently of the architecture. It's included by + ${cpu_type}/xm-openbsd.h, not included directly. */ + +/* OpenBSD is trying to be POSIX-compliant, to the point of fixing + problems that may occur with gcc's interpretation. */ +#undef POSIX +#define POSIX + +/* Ensure we get gnu C's defaults. */ +#ifdef __GNUC__ +#define alloca __builtin_alloca +#endif + + diff --git a/gnu/dist/gcc/cp/tree.c b/gnu/dist/gcc/cp/tree.c index dce01cb6724..7c7768fdefc 100644 --- a/gnu/dist/gcc/cp/tree.c +++ b/gnu/dist/gcc/cp/tree.c @@ -47,6 +47,7 @@ static tree list_hash_lookup PROTO((int, int, int, int, tree, tree, static void propagate_binfo_offsets PROTO((tree, tree)); static void unshare_base_binfos PROTO((tree)); static int avoid_overlap PROTO((tree, tree)); +static int equal_functions PROTO((tree, tree)); #define CEIL(x,y) (((x) + (y) - 1) / (y)) @@ -1423,6 +1424,20 @@ build_overload (decl, chain) return ovl_cons (decl, chain); } +/* Returns true iff functions are equivalent. Equivalent functions are + not identical only if one is a function-local extern function. + This assumes that function-locals don't have TREE_PERMANENT. */ + +static int +equal_functions (fn1, fn2) + tree fn1; + tree fn2; +{ + if (!TREE_PERMANENT (fn1) || !TREE_PERMANENT (fn2)) + return decls_match (fn1, fn2); + return fn1 == fn2; +} + /* True if fn is in ovl. */ int @@ -1433,9 +1448,9 @@ ovl_member (fn, ovl) if (ovl == NULL_TREE) return 0; if (TREE_CODE (ovl) != OVERLOAD) - return decls_match (ovl, fn); + return equal_functions (ovl, fn); for (; ovl; ovl = OVL_CHAIN (ovl)) - if (decls_match (OVL_FUNCTION (ovl), fn)) + if (equal_functions (OVL_FUNCTION (ovl), fn)) return 1; return 0; } diff --git a/gnu/dist/gcc/cp/typeck2.c b/gnu/dist/gcc/cp/typeck2.c index 56082fed98f..39b0626c465 100644 --- a/gnu/dist/gcc/cp/typeck2.c +++ b/gnu/dist/gcc/cp/typeck2.c @@ -383,7 +383,7 @@ my_friendly_abort (i) ack ("Internal compiler error."); else ack ("Internal compiler error %d.", i); - ack ("Please submit a full bug report to `egcs-bugs@cygnus.com'."); + ack ("Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'."); ack ("See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details."); } else @@ -398,7 +398,7 @@ my_friendly_abort (i) else error ("Internal compiler error %d.", i); - error ("Please submit a full bug report to `egcs-bugs@cygnus.com'."); + error ("Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'."); fatal ("See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details."); } diff --git a/gnu/dist/gcc/cpp.in b/gnu/dist/gcc/cpp.in new file mode 100644 index 00000000000..5e85c0b54de --- /dev/null +++ b/gnu/dist/gcc/cpp.in @@ -0,0 +1,41 @@ +#! /bin/sh + +# Copyright (C) 1999 Free Software Foundation, Inc. +# This program 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 program 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 program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# cpp: wrapper script for `gcc -E' + +# Check whether an input file was specified. +# This has some limited awareness of which switches take arguments. + +stdin="-" +next_is_arg= +for arg +do + if [ -n "$next_is_arg" ] + then next_is_arg= + else + case "$arg" in + -i* | -o | -x) next_is_arg=t;; + -) stdin= ;; + -*) ;; + *) stdin= ;; + esac + fi +done + +# Hand off to the gcc driver, with -E (preprocess only) +# and -xc (treat unknown files as source, not linker scripts) +exec @GCC@ -E -xc ${1+"$@"} $stdin diff --git a/gnu/dist/gcc/crtstuff.c b/gnu/dist/gcc/crtstuff.c index 8e50ac740d7..a1b9ef8706e 100644 --- a/gnu/dist/gcc/crtstuff.c +++ b/gnu/dist/gcc/crtstuff.c @@ -56,6 +56,45 @@ Boston, MA 02111-1307, USA. */ #include <stddef.h> #include "frame.h" +/* This really belongs in gansidecl.h, but for the egcs-1.1.x branch, the + only code which uses weak attributes is in this file and this file does + not include gansidecl.h. */ +#ifndef TARGET_ATTRIBUTE_WEAK +# if SUPPORTS_WEAK +# define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak)) +# else +# define TARGET_ATTRIBUTE_WEAK +# endif +#endif + +/* We do not want to add the weak attribute to the declarations of these + routines in frame.h because that will cause the definition of these + symbols to be weak as well. + + This exposes a core issue, how to handle creating weak references vs + how to create weak definitions. Either we have to have the definition + of TARGET_WEAK_ATTRIBUTE be conditional in the shared header files or + have a second declaration if we want a function's references to be weak, + but not its definition. + + Making TARGET_WEAK_ATTRIBUTE conditional seems like a good solution until + one thinks about scaling to larger problems -- ie, the condition under + which TARGET_WEAK_ATTRIBUTE is active will eventually get far too + complicated. + + So, we take an approach similar to #pragma weak -- we have a second + declaration for functions that we want to have weak references. + + Neither way is particularly good. */ + +/* References to __register_frame_info and __deregister_frame_info should + be weak in this file if at all possible. */ +extern void __register_frame_info (void *, struct object *) + TARGET_ATTRIBUTE_WEAK; + +extern void *__deregister_frame_info (void *) + TARGET_ATTRIBUTE_WEAK; + /* Provide default definitions for the pseudo-ops used to switch to the .ctors and .dtors sections. @@ -142,7 +181,8 @@ __do_global_dtors_aux () } #ifdef EH_FRAME_SECTION_ASM_OP - __deregister_frame_info (__EH_FRAME_BEGIN__); + if (__deregister_frame_info) + __deregister_frame_info (__EH_FRAME_BEGIN__); #endif completed = 1; } @@ -170,7 +210,8 @@ static void frame_dummy () { static struct object object; - __register_frame_info (__EH_FRAME_BEGIN__, &object); + if (__register_frame_info) + __register_frame_info (__EH_FRAME_BEGIN__, &object); } static void __attribute__ ((__unused__)) @@ -254,7 +295,8 @@ __do_global_dtors () (*p) (); #ifdef EH_FRAME_SECTION_ASM_OP - __deregister_frame_info (__EH_FRAME_BEGIN__); + if (__deregister_frame_info) + __deregister_frame_info (__EH_FRAME_BEGIN__); #endif } @@ -266,7 +308,8 @@ void __frame_dummy () { static struct object object; - __register_frame_info (__EH_FRAME_BEGIN__, &object); + if (__register_frame_info) + __register_frame_info (__EH_FRAME_BEGIN__, &object); } #endif #endif diff --git a/gnu/dist/gcc/cse.c b/gnu/dist/gcc/cse.c index 5d121870afb..cfcc4fac8ef 100644 --- a/gnu/dist/gcc/cse.c +++ b/gnu/dist/gcc/cse.c @@ -5167,7 +5167,11 @@ fold_rtx (x, insn) /* Indicate this is a constant. This isn't a valid form of CONST, but it will only be used to fold the next insns and then discarded, so - it should be safe. */ + it should be safe. + + Note this expression must be explicitly discarded, + by cse_insn, else it may end up in a REG_EQUAL note + and "escape" to cause problems elsewhere. */ return gen_rtx_CONST (GET_MODE (new), new); } } @@ -5913,7 +5917,7 @@ record_jump_cond (code, mode, op0, op1, reversed_nonequality) /* If OP0 and OP1 are known equal, and either is a paradoxical SUBREG, we know that they are also equal in the smaller mode (this is also true for all smaller modes whether or not there is a SUBREG, but - is not worth testing for with no SUBREG. */ + is not worth testing for with no SUBREG). */ /* Note that GET_MODE (op0) may not equal MODE. */ if (code == EQ && GET_CODE (op0) == SUBREG @@ -7046,9 +7050,18 @@ cse_insn (insn, libcall_insn) equivalent constant, we want to add a REG_NOTE. We don't want to write a REG_EQUAL note for a constant pseudo since verifying that that pseudo hasn't been eliminated is a pain. Such a note also - won't help anything. */ + won't help anything. + + Avoid a REG_EQUAL note for (CONST (MINUS (LABEL_REF) (LABEL_REF))) + which can be created for a reference to a compile time computable + entry in a jump table. */ + if (n_sets == 1 && src_const && GET_CODE (dest) == REG - && GET_CODE (src_const) != REG) + && GET_CODE (src_const) != REG + && ! (GET_CODE (src_const) == CONST + && GET_CODE (XEXP (src_const, 0)) == MINUS + && GET_CODE (XEXP (XEXP (src_const, 0), 0)) == LABEL_REF + && GET_CODE (XEXP (XEXP (src_const, 0), 1)) == LABEL_REF)) { tem = find_reg_note (insn, REG_EQUAL, NULL_RTX); @@ -7991,6 +8004,7 @@ invalidate_skipped_block (start) invalidate_for_call (); } + invalidate_from_clobbers (PATTERN (insn)); note_stores (PATTERN (insn), invalidate_skipped_set); } } diff --git a/gnu/dist/gcc/f/BUGS b/gnu/dist/gcc/f/BUGS index e00f7464857..ae6efd90854 100644 --- a/gnu/dist/gcc/f/BUGS +++ b/gnu/dist/gcc/f/BUGS @@ -6,54 +6,59 @@ permission notice. Bugs in GNU Fortran ******************* - This section identifies bugs that `g77' *users* might run into. -This includes bugs that are actually in the `gcc' back end (GBE) or in -`libf2c', because those sets of code are at least somewhat under the -control of (and necessarily intertwined with) `g77', so it isn't worth -separating them out. + This section identifies bugs that `g77' *users* might run into in +the `egcs'-1.1.2 version of `g77'. This includes bugs that are +actually in the `gcc' back end (GBE) or in `libf2c', because those sets +of code are at least somewhat under the control of (and necessarily +intertwined with) `g77', so it isn't worth separating them out. + + For information on bugs in *other* versions of `g77', see +`egcs/gcc/f/NEWS'. + + An online, "live" version of this document (derived directly from +the up-to-date mainline version of `g77' within `egcs') is available at +`http://egcs.cygnus.com/onlinedocs/g77_bugs.html'. For information on bugs that might afflict people who configure, -port, build, and install `g77', *Note Problems Installing::. +port, build, and install `g77', see "Problems Installing" in +`egcs/gcc/f/INSTALL'. - * `g77' sometimes crashes when compiling code containing the - construct `CMPLX(0.)' or similar. This is a `gcc' back-end bug. - It can be worked around using `-fno-emulate-complex', though that - might trigger other, older bugs. Compiling without optimization - is another work-around. + * `g77' generates bad code for assignments, or other conversions, of + `REAL' or `COMPLEX' constant expressions to type `INTEGER(KIND=2)' + (often referred to as `INTEGER*8'). - Fixed in `egcs' 1.1. + For example, `INTEGER*8 J; J = 4E10' is miscompiled on some + systems--the wrong value is stored in J. - * Automatic arrays aren't working on HP-UX systems, at least in - HP-UX version 10.20. Writing into them apparently causes - over-writing of statically declared data in the main program. - This probably means the arrays themselves are being - under-allocated, or pointers to them being improperly handled, - e.g. not passed to other procedures as they should be. + * The `IDate' Intrinsic (VXT) fails to return the year in the + documented, non-Y2K-compliant range of 0-99, instead returning 100 + for the year 2000. - * Some Fortran code has been found to be miscompiled by `g77' built - on `gcc' version 2.8.1 on m68k-next-nextstep3 configurations when - using the `-O2' option. Even a C function is known to miscompile - on that configuration when using the `-O2 -funroll-loops' options. + * Year 2000 (Y2K) compliance information is missing from the + documentation. - Fixed in `egcs'. + * `g77' crashes when compiling I/O statements using keywords that + define `INTEGER' values, such as `IOSTAT=J', where J is other than + default `INTEGER' (such as `INTEGER*2'). - * A code-generation bug afflicts Intel x86 targets when `-O2' is - specified compiling, for example, an old version of the `DNRM2' - routine. The x87 coprocessor stack is being mismanaged in cases - where assigned `GOTO' and `ASSIGN' are involved. + * The `-ax' option is not obeyed when compiling Fortran programs. + (It is not passed to the `f771' driver.) - Fixed in `egcs' version 1.1. + * `g77' fails to warn about a reference to a function when the + corresponding *subsequent* function program unit disagrees with + the reference concerning the type of the function. + + * Automatic arrays possibly aren't working on HP-UX systems, at + least in HP-UX version 10.20. Writing into them apparently causes + over-writing of statically declared data in the main program. + This probably means the arrays themselves are being + under-allocated, or pointers to them being improperly handled, + e.g. not passed to other procedures as they should be. * `g77' fails to warn about use of a "live" iterative-DO variable as an implied-DO variable in a `WRITE' or `PRINT' statement (although it does warn about this in a `READ' statement). - * A compiler crash, or apparently infinite run time, can result when - compiling complicated expressions involving `COMPLEX' arithmetic - (especially multiplication). - - Fixed in `egcs' version 1.1. - * Something about `g77''s straightforward handling of label references and definitions sometimes prevents the GBE from unrolling loops. Until this is solved, try inserting or removing @@ -98,10 +103,7 @@ port, build, and install `g77', *Note Problems Installing::. compiler.) Note that `g77' does display a warning message to notify the user - before the compiler appears to hang. *Note Initialization of - Large Aggregate Areas: Large Initialization, for information on - how to change the point at which `g77' decides to issue this - warning. + before the compiler appears to hang. * `g77' doesn't emit variable and array members of common blocks for use with a debugger (the `-g' command-line option). The code is @@ -114,9 +116,6 @@ port, build, and install `g77', *Note Problems Installing::. whereby some rudimentary information on a member is written as a string that is the member's value as a character string. - *Note Options for Code Generation Conventions: Code Gen Options, - for information on the `-fdebug-kludge' option. - * When debugging, after starting up the debugger but before being able to see the source code for the main program unit, the user must currently set a breakpoint at `MAIN__' (or `MAIN___' or @@ -160,13 +159,6 @@ port, build, and install `g77', *Note Problems Installing::. the same "broken" mechanism as that used by versions of `g77' prior to 0.5.20. - * `g77' sometimes produces invalid assembler code when using the - `-fPIC' option (such as compiling for ELF targets) on the Intel - x86 architecture target. The symptom is that the assembler - complains about invalid opcodes. This bug is in the gcc back end. - - Fixed in `egcs' version 1.0.2. - * `g77' currently inserts needless padding for things like `COMMON A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)' on machines like x86, because the back end insists that `IPAD' be diff --git a/gnu/dist/gcc/f/Make-lang.in b/gnu/dist/gcc/f/Make-lang.in index 0f3e1a19592..38712fd5d62 100644 --- a/gnu/dist/gcc/f/Make-lang.in +++ b/gnu/dist/gcc/f/Make-lang.in @@ -67,7 +67,7 @@ g77.c: $(srcdir)/gcc.c if [ -f lang-f77 ]; then \ rm -f g77.c; \ $(LN_S) $(srcdir)/gcc.c g77.c; \ - fi + else true; fi g77spec.o: $(srcdir)/f/g77spec.c $(srcdir)/f/version.h case "$(LANGUAGES)" in \ @@ -76,7 +76,7 @@ g77spec.o: $(srcdir)/f/g77spec.c $(srcdir)/f/version.h esac if [ -f lang-f77 ]; then \ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/f/g77spec.c; \ - fi + else true; fi g77version.o: $(srcdir)/f/version.c case "$(LANGUAGES)" in \ @@ -86,7 +86,7 @@ g77version.o: $(srcdir)/f/version.c if [ -f lang-f77 ]; then \ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -o g77version.o \ $(srcdir)/f/version.c; \ - fi + else true; fi # N.B.: This is a copy of the gcc.o rule, with -DLANG_SPECIFIC_DRIVER added. # It'd be nice if we could find an easier way to do this---rather than have @@ -100,7 +100,7 @@ g77.o: $(CONFIG_H) multilib.h config.status $(lang_specs_files) g77.c if [ -f lang-f77 ]; then \ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(DRIVER_DEFINES) \ -DLANG_SPECIFIC_DRIVER -c g77.c; \ - fi + else true; fi # Create the compiler driver for g77. g77$(exeext): g77.o g77spec.o g77version.o version.o choose-temp.o pexecute.o prefix.o mkstemp.o \ @@ -108,14 +108,14 @@ g77$(exeext): g77.o g77spec.o g77version.o version.o choose-temp.o pexecute.o pr if [ -f lang-f77 ]; then \ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g77.o g77spec.o g77version.o \ version.o choose-temp.o pexecute.o prefix.o mkstemp.o $(EXTRA_GCC_OBJS) $(LIBS); \ - fi + else true; fi # Create a version of the g77 driver which calls the cross-compiler. g77-cross$(exeext): g77$(exeext) if [ -f lang-f77 ]; then \ rm -f g77-cross$(exeext); \ cp g77$(exeext) g77-cross$(exeext); \ - fi + else true; fi F77_SRCS = \ $(srcdir)/f/assert.j \ @@ -252,7 +252,7 @@ f/g77.info: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \ if [ -f lang-f77 ]; then \ rm -f $(srcdir)/f/g77.info-*; \ $(MAKEINFO) -I$(srcdir)/f -o f/g77.info $(srcdir)/f/g77.texi; \ - fi + else true; fi f/g77.dvi: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \ $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \ @@ -270,7 +270,7 @@ f/g77.dvi: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \ texindex g77.??; \ TEXINPUTS=$(srcdir)/f:$$TEXINPUTS tex $(srcdir)/f/g77.texi; \ mv g77.dvi f; \ - fi + else true; fi # This dance is all about producing accurate documentation for g77's # intrinsics with minimum fuss. f/ansify appends "\n\" to C strings @@ -304,7 +304,7 @@ $(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.in f/ansify.c f/intrin.def f/intrin `echo $(srcdir)/f/intdoc.c | sed 's,^\./,,'` -o f/intdoc; \ f/intdoc > $(srcdir)/f/intdoc.texi; \ rm f/intdoc f/ansify f/intdoc.h0; \ - fi + else true; fi $(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \ diff --git a/gnu/dist/gcc/f/NEWS b/gnu/dist/gcc/f/NEWS index cfb545542e4..ff1bb451a07 100644 --- a/gnu/dist/gcc/f/NEWS +++ b/gnu/dist/gcc/f/NEWS @@ -38,6 +38,25 @@ clarify how they differ from other versions, though this can make getting a complete picture of what a particular `egcs' version contains somewhat more difficult. + An online, "live" version of this document (derived directly from +the up-to-date mainline version of `g77' within `egcs') is available at +`http://egcs.cygnus.com/onlinedocs/g77_news.html'. + +In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1): +===================================================== + + * Fix the `IDate' Intrinsic (VXT) so the returned year is in the + documented, non-Y2K-compliant range of 0-99, instead of being + returned as 100 in the year 2000. + + * Fix the `Date_and_Time' intrinsic (in `libg2c') to return the + milliseconds value properly in VALUES(8). + + * Fix the `LStat' intrinsic (in `libg2c') to return device-ID + information properly in SARRAY(7). + + * Improve documentation. + In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1): =================================================== @@ -193,6 +212,9 @@ In 0.5.24 and `egcs' 1.1 (versus 0.5.23): * `g77' no longer crashes when compiling code containing specification statements such as `INTEGER(KIND=7) PTR'. + * `g77' no longer crashes when compiling code such as `J = SIGNAL(1, + 2)'. + * `g77' now treats `%LOC(EXPR)' and `LOC(EXPR)' as "ordinary" expressions when they are used as arguments in procedure calls. This change applies only to global (filewide) analysis, making it @@ -233,9 +255,8 @@ In 0.5.23 (versus 0.5.22): patching it to fix a few bugs and improve performance in a few cases. - *Note Actual Bugs We Haven't Fixed Yet: Actual Bugs, available in - plain-text format in `gcc/f/BUGS', for information on the known - bugs in this version, including the regressions. + See `egcs/gcc/f/BUGS', for information on the known bugs in this + version, including the regressions. Features that have been dropped from this version of `g77' due to their being implemented via `g77'-specific patches to the `gcc' @@ -489,9 +510,8 @@ In `egcs' 1.0 (versus 0.5.21): of patching it to fix a few bugs and improve performance in a few cases. - *Note Actual Bugs We Haven't Fixed Yet: Actual Bugs, available in - plain-text format in `gcc/f/BUGS', for information on the known - bugs in this version, including the regressions. + See `egcs/gcc/f/BUGS', for information on the known bugs in this + version, including the regressions. Features that have been dropped from this version of `g77' due to their being implemented via `g77'-specific patches to the `gcc' diff --git a/gnu/dist/gcc/f/bugs.texi b/gnu/dist/gcc/f/bugs.texi index af18d80cdbc..52c92874823 100644 --- a/gnu/dist/gcc/f/bugs.texi +++ b/gnu/dist/gcc/f/bugs.texi @@ -5,7 +5,11 @@ @c The text of this file appears in the file BUGS @c in the G77 distribution, as well as in the G77 manual. -@c 1998-09-01 +@c 1999-03-13 + +@ifset BUGSONLY +@set which-g77 @code{egcs}-1.1.2 +@end ifset @ifclear BUGSONLY @node Actual Bugs @@ -13,31 +17,92 @@ @end ifclear This section identifies bugs that @code{g77} @emph{users} -might run into. +might run into in the @value{which-g77} version +of @code{g77}. This includes bugs that are actually in the @code{gcc} back end (GBE) or in @code{libf2c}, because those sets of code are at least somewhat under the control -of (and necessarily intertwined with) @code{g77}, so it -isn't worth separating them out. - +of (and necessarily intertwined with) @code{g77}, +so it isn't worth separating them out. + +@ifset last-up-date +For information on bugs in @emph{other} versions of @code{g77}, +@ref{News,,News About GNU Fortran}. +@end ifset + +@ifset BUGSONLY +For information on bugs in @emph{other} versions of @code{g77}, +see @file{egcs/gcc/f/NEWS}. +@end ifset + +An online, ``live'' version of this document +(derived directly from the up-to-date mainline version +of @code{g77} within @code{egcs}) +is available at +@uref{http://egcs.cygnus.com/onlinedocs/g77_bugs.html}. + +@ifset last-up-date For information on bugs that might afflict people who configure, port, build, and install @code{g77}, @ref{Problems Installing}. +@end ifset + +@ifset BUGSONLY +For information on bugs that might afflict people who +configure, port, build, and install @code{g77}, +see ``Problems Installing'' in @file{egcs/gcc/f/INSTALL}. +@end ifset @itemize @bullet @item -@code{g77} sometimes crashes when compiling code -containing the construct @samp{CMPLX(0.)} or similar. -This is a @code{gcc} back-end bug. -It can be worked around using @samp{-fno-emulate-complex}, -though that might trigger other, older bugs. -Compiling without optimization is another work-around. +@code{g77} generates bad code for assignments, +or other conversions, +of @code{REAL} or @code{COMPLEX} constant expressions +to type @code{INTEGER(KIND=2)} +(often referred to as @code{INTEGER*8}). + +For example, @samp{INTEGER*8 J; J = 4E10} is miscompiled +on some systems---the wrong value is stored in @var{J}. + +@item +The @code{IDate} Intrinsic (VXT) +fails to return the year in the documented, non-Y2K-compliant range +of 0--99, +instead returning 100 for the year 2000. + +@c Fixed in @code{egcs} 1.2. + +@item +Year 2000 (Y2K) compliance information +is missing from the documentation. + +@c Fixed in @code{egcs} 1.2. + +@item +@code{g77} crashes when compiling +I/O statements using keywords that define @code{INTEGER} values, +such as @samp{IOSTAT=@var{j}}, +where @var{j} is other than default @code{INTEGER} +(such as @code{INTEGER*2}). + +@c Fixed in @code{egcs} 1.2. + +@item +The @samp{-ax} option is not obeyed when compiling Fortran programs. +(It is not passed to the @file{f771} driver.) + +@c Fixed in @code{egcs} 1.2. + +@item +@code{g77} fails to warn about a reference to a function +when the corresponding @emph{subsequent} function program unit +disagrees with the reference concerning the type of the function. -Fixed in @code{egcs} 1.1. +@c Fixed in @code{egcs} 1.2. @item @c Tim Prince discovered this. -Automatic arrays aren't working on HP-UX systems, +Automatic arrays possibly aren't working on HP-UX systems, at least in HP-UX version 10.20. Writing into them apparently causes over-writing of statically declared data in the main program. @@ -46,33 +111,6 @@ or pointers to them being improperly handled, e.g. not passed to other procedures as they should be. @item -@c Toon Moene discovered these. -Some Fortran code has been found to be miscompiled -by @code{g77} built on @code{gcc} version 2.8.1 -on m68k-next-nextstep3 configurations -when using the @samp{-O2} option. -Even a C function is known to miscompile -on that configuration -when using the @samp{-O2 -funroll-loops} options. - -Fixed in @code{egcs}. - -@cindex DNRM2 -@cindex stack, 387 coprocessor -@cindex ix86 -@cindex -O2 -@item -A code-generation bug afflicts -Intel x86 targets when @samp{-O2} is specified -compiling, for example, an old version of -the @samp{DNRM2} routine. -The x87 coprocessor stack is being -mismanaged in cases where assigned @code{GOTO} -and @code{ASSIGN} are involved. - -Fixed in @code{egcs} version 1.1. - -@item @code{g77} fails to warn about use of a ``live'' iterative-DO variable as an implied-DO variable @@ -80,14 +118,6 @@ in a @samp{WRITE} or @samp{PRINT} statement (although it does warn about this in a @samp{READ} statement). @item -A compiler crash, or apparently infinite run time, -can result when compiling complicated expressions -involving @code{COMPLEX} arithmetic -(especially multiplication). - -Fixed in @code{egcs} version 1.1. - -@item Something about @code{g77}'s straightforward handling of label references and definitions sometimes prevents the GBE from unrolling loops. @@ -149,9 +179,11 @@ improvements to the compiler.) Note that @code{g77} does display a warning message to notify the user before the compiler appears to hang. +@ifset last-up-date @xref{Large Initialization,,Initialization of Large Aggregate Areas}, for information on how to change the point at which @code{g77} decides to issue this warning. +@end ifset @cindex debugging @cindex common blocks @@ -169,8 +201,10 @@ As of Version 0.5.19, a temporary kludge solution is provided whereby some rudimentary information on a member is written as a string that is the member's value as a character string. +@ifset last-up-date @xref{Code Gen Options,,Options for Code Generation Conventions}, for information on the @samp{-fdebug-kludge} option. +@end ifset @cindex code, displaying main source @cindex displaying main source code @@ -233,19 +267,6 @@ The new option @samp{-fno-emulate-complex} avoids the work-around, reverting to using the same ``broken'' mechanism as that used by versions of @code{g77} prior to 0.5.20. -@cindex ELF support -@cindex support, ELF -@cindex -fPIC option -@cindex options, -fPIC -@item -@code{g77} sometimes produces invalid assembler code -when using the @samp{-fPIC} option (such as compiling for ELF targets) -on the Intel x86 architecture target. -The symptom is that the assembler complains about invalid opcodes. -This bug is in the gcc back end. - -Fixed in @code{egcs} version 1.0.2. - @cindex padding @cindex structures @cindex common blocks diff --git a/gnu/dist/gcc/f/g77.texi b/gnu/dist/gcc/f/g77.texi index 62c2f66912a..48c36e924a4 100644 --- a/gnu/dist/gcc/f/g77.texi +++ b/gnu/dist/gcc/f/g77.texi @@ -14,12 +14,15 @@ @c %**start of header @setfilename g77.info -@set last-up-date 1998-09-01 +@set last-up-date 1999-03-11 @set version-g77 0.5.24 -@set email-general egcs@@cygnus.com -@set email-bugs egcs-bugs@@cygnus.com +@set version-egcs 1.1.2 +@set email-general egcs@@egcs.cygnus.com +@set email-bugs egcs-bugs@@egcs.cygnus.com +@set email-burley craig@@jcb-sc.com @set path-g77 egcs/gcc/f @set path-libf2c egcs/libf2c +@set which-g77 @code{egcs}-@value{version-egcs} @c @setfilename useg77.info @c @setfilename portg77.info @@ -99,7 +102,7 @@ translations approved by the Free Software Foundation instead of in the original English. @end ifinfo -Contributed by James Craig Burley (@email{burley@@gnu.org}). +Contributed by James Craig Burley (@email{@value{email-burley}}). Inspired by a first pass at translating @file{g77-0.5.16/f/DOC} that was contributed to Craig by David Ronis (@email{ronis@@onsager.chem.mcgill.ca}). @@ -179,6 +182,12 @@ as well as its new features and incompatibilities, and how to report bugs. It corresponds to GNU Fortran version @value{version-g77}. @end ifclear +An online, ``live'' version of this document +(derived directly from the up-to-date mainline version +of @code{g77} within @code{egcs}) +is available at +@uref{http://egcs.cygnus.com/onlinedocs/g77_toc.html}. + @end ifinfo @menu * Copying:: GNU General Public License says @@ -775,7 +784,7 @@ without royalty; alteration is not permitted. @cindex improvements, funding Work on GNU Fortran is still being done mostly by its author, -James Craig Burley (@email{burley@@gnu.org}), who is a volunteer +James Craig Burley (@email{@value{email-burley}}), who is a volunteer for, not an employee of, the Free Software Foundation (FSF). As with other GNU software, funding is important because it can pay for needed equipment, personnel, and so on. @@ -11536,19 +11545,45 @@ instead of converting them to double precision first. This would tend to result in output that is more consistent with that produced by some other Fortran implementations. -A useful source of information on floating point computation is David +A useful source of information on floating-point computation is David Goldberg, `What Every Computer Scientist Should Know About Floating-Point Arithmetic', Computing Surveys, 23, March 1991, pp.@: -5--48. At the time of writing this is available online under -@uref{http://docs.sun.com} and there is a supplemented version at -@uref{http://www.validgh.com/}. Information related to the IEEE 754 -floating point standard by a leading light can be found at -@uref{http://http.cs.berkeley.edu/%7Ewkahan/ieee754status }; see also -slides from the short course referenced from +5--48. +An online version is available at +@uref{http://docs.sun.com}, +and there is a supplemented version, in PostScript form, at +@uref{http://www.validgh.com/goldberg/paper.ps}. + +Information related to the IEEE 754 +floating-point standard by a leading light can be found at +@uref{http://http.cs.berkeley.edu/%7Ewkahan/ieee754status}; +see also slides from the short course referenced from @uref{http://http.cs.berkeley.edu/%7Efateman/}. -@uref{http://www.suburbia.net/%7Ebillm/floating-point/} has a brief -guide to IEEE 754, a somewhat x86 GNU/Linux-specific FAQ and library -code for GNU/Linux x86 systems. +@uref{http://www.linuxsupportline.com/%7Ebillm/} has a brief +guide to IEEE 754, a somewhat x86-GNU/Linux-specific FAQ, +and library code for GNU/Linux x86 systems. + +The supplement to the PostScript-formatted Goldberg document, +referenced above, is available in HTML format. +See `Differences Among IEEE 754 Implementations' by Doug Priest, +available online at +@uref{http://www.validgh.com/goldberg/addendum.html}. +This document explores some of the issues surrounding computing +of extended (80-bit) results on processors such as the x86, +especially when those results are arbitrarily truncated +to 32-bit or 64-bit values by the compiler +as ``spills''. + +@cindex spills of floating-point results +@cindex 80-bit spills +@cindex truncation, of floating-point values +(@emph{Note:} @code{g77} specifically, and @code{gcc} generally, +does arbitrarily truncate 80-bit results during spills +as of this writing. +It is not yet clear whether a future version of +the GNU compiler suite will offer 80-bit spills +as an option, or perhaps even as the default behavior.) + @c xref would be different between editions: The GNU C library provides routines for controlling the FPU, and other documentation about this. diff --git a/gnu/dist/gcc/f/intdoc.in b/gnu/dist/gcc/f/intdoc.in index 62b93645b1e..203dd61dbf5 100644 --- a/gnu/dist/gcc/f/intdoc.in +++ b/gnu/dist/gcc/f/intdoc.in @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. * This is part of the G77 manual. * For copying conditions, see the file g77.texi. */ @@ -285,7 +285,7 @@ be zero. @xref{Exp Intrinsic}, for the inverse of this function. -@xref{Log10 Intrinsic}, for the base-10 logarithm function. +@xref{Log10 Intrinsic}, for the `common' (base-10) logarithm function. ") DEFDOC (ALOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) @@ -296,19 +296,18 @@ DEFDOC (DLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) DEFDOC (CDLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) -DEFDOC (LOG10, "Natural logarithm.", "\ -Returns the natural logarithm of @var{@1@}, which must -be greater than zero or, if type @code{COMPLEX}, must not -be zero. +DEFDOC (LOG10, "Common logarithm.", "\ +Returns the common logarithm (base 10) of @var{@1@}, which must +be greater than zero. The inverse of this function is @samp{10. ** LOG10(@var{@1@})}. @xref{Log Intrinsic}, for the natural logarithm function. ") -DEFDOC (ALOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10)) +DEFDOC (ALOG10, "Common logarithm (archaic).", ARCHAIC (LOG10, Log10)) -DEFDOC (DLOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10)) +DEFDOC (DLOG10, "Common logarithm (archaic).", ARCHAIC (LOG10, Log10)) DEFDOC (MAX, "Maximum value.", "\ Returns the argument with the largest value. @@ -1263,6 +1262,13 @@ DEFDOC (MCLOCK8, "Get number of clock ticks for process.", "\ Returns the number of clock ticks since the start of the process. Supported on systems with @code{clock(3)} (q.v.). +@emph{Warning:} this intrinsic does not increase the range +of the timing values over that returned by @code{clock(3)}. +On a system with a 32-bit @code{clock(3)}, +@code{@0@} will return a 32-bit value, +even though converted to an @samp{INTEGER(KIND=2)} value. +That means overflows of the 32-bit value can still occur. + No Fortran implementations other than GNU Fortran are known to support this intrinsic at the time of this writing. @@ -1288,7 +1294,7 @@ DEFDOC (SECOND_subr, "Get CPU time for process@99@in seconds.", "\ Returns the process's runtime in seconds in @var{@1@}---the same value as the UNIX function @code{etime} returns. -This routine is known from Cray Fortran. @xref{CPU_Time Intrinsic} +This routine is known from Cray Fortran. @xref{CPU_Time Intrinsic}, for a standard equivalent. ") @@ -1315,6 +1321,13 @@ Returns the current time encoded as a long integer This value is suitable for passing to @code{CTIME}, @code{GMTIME}, and @code{LTIME}. +@emph{Warning:} this intrinsic does not increase the range +of the timing values over that returned by @code{time(3)}. +On a system with a 32-bit @code{time(3)}, +@code{@0@} will return a 32-bit value, +even though converted to an @samp{INTEGER(KIND=2)} value. +That means overflows of the 32-bit value can still occur. + No Fortran implementations other than GNU Fortran are known to support this intrinsic at the time of this writing. @@ -1538,16 +1551,13 @@ extracted from the @code{stat} structure as returned by @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -1559,6 +1569,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -1571,10 +1585,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -1592,16 +1606,13 @@ extracted from the @code{stat} structure as returned by @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -1613,6 +1624,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -1625,10 +1640,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -1656,16 +1671,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -1677,6 +1689,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -1689,10 +1705,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -1716,16 +1732,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -1737,6 +1750,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -1749,10 +1766,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -1778,16 +1795,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -1799,6 +1813,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -1811,10 +1829,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -1834,16 +1852,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -1855,6 +1870,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -1867,10 +1886,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -2396,18 +2415,18 @@ DEFDOC (TIME_vxt, "Get the time as a character value.", "\ Returns in @var{@1@} a character representation of the current time as obtained from @code{ctime(3)}. -@xref{Fdate Intrinsic (subroutine)} for an equivalent routine. +@xref{Fdate Intrinsic (subroutine)}, for an equivalent routine. ") DEFDOC (IBCLR, "Clear a bit.", "\ Returns the value of @var{@1@} with bit @var{@2@} cleared (set to zero). -@xref{BTest Intrinsic} for information on bit positions. +@xref{BTest Intrinsic}, for information on bit positions. ") DEFDOC (IBSET, "Set a bit.", "\ Returns the value of @var{@1@} with bit @var{@2@} set (to one). -@xref{BTest Intrinsic} for information on bit positions. +@xref{BTest Intrinsic}, for information on bit positions. ") DEFDOC (IBITS, "Extract a bit subfield of a variable.", "\ @@ -2430,7 +2449,7 @@ Bits shifted out from the left end or the right end, as the case may be, are lost. Zeros are shifted in from the opposite end. -@xref{IShftC Intrinsic} for the circular-shift equivalent. +@xref{IShftC Intrinsic}, for the circular-shift equivalent. ") DEFDOC (ISHFTC, "Circular bit shift.", "\ @@ -2446,7 +2465,7 @@ must be less than or equal to @var{@3@}. The value of @var{@3@} must be greater than or equal to one and less than or equal to @samp{BIT_SIZE(@var{@1@})}. -@xref{IShft Intrinsic} for the logical shift equivalent. +@xref{IShft Intrinsic}, for the logical shift equivalent. ") DEFDOC (MVBITS, "Moving a bit field.", "\ @@ -2490,7 +2509,8 @@ The difference between local time and UTC (GMT) in the form @var{Shhmm}: sign, hours and minutes, e.g.@: @samp{-0500} (winter in New York); @item @4@ The year, month of the year, day of the month, time difference in -minutes from UTC, hour of the day, minutes of the hour and milliseconds +minutes from UTC, hour of the day, minutes of the hour, seconds +of the minute, and milliseconds of the second in successive values of the array. @end table diff --git a/gnu/dist/gcc/f/intdoc.texi b/gnu/dist/gcc/f/intdoc.texi index e8034113893..a507d41e655 100644 --- a/gnu/dist/gcc/f/intdoc.texi +++ b/gnu/dist/gcc/f/intdoc.texi @@ -46,7 +46,7 @@ @end ifset @ifset familyF77 * ALog Intrinsic:: Natural logarithm (archaic). -* ALog10 Intrinsic:: Natural logarithm (archaic). +* ALog10 Intrinsic:: Common logarithm (archaic). * AMax0 Intrinsic:: Maximum value (archaic). * AMax1 Intrinsic:: Maximum value (archaic). * AMin0 Intrinsic:: Minimum value (archaic). @@ -240,7 +240,7 @@ @ifset familyF77 * DInt Intrinsic:: Truncate to whole number (archaic). * DLog Intrinsic:: Natural logarithm (archaic). -* DLog10 Intrinsic:: Natural logarithm (archaic). +* DLog10 Intrinsic:: Common logarithm (archaic). * DMax1 Intrinsic:: Maximum value (archaic). * DMin1 Intrinsic:: Minimum value (archaic). * DMod Intrinsic:: Remainder (archaic). @@ -530,7 +530,7 @@ @end ifset @ifset familyF77 * Log Intrinsic:: Natural logarithm. -* Log10 Intrinsic:: Natural logarithm. +* Log10 Intrinsic:: Common logarithm. @end ifset @ifset familyF90 * Logical Intrinsic:: (Reserved for future use.) @@ -3012,7 +3012,8 @@ The difference between local time and UTC (GMT) in the form @var{Shhmm}: sign, hours and minutes, e.g.@: @samp{-0500} (winter in New York); @item Values The year, month of the year, day of the month, time difference in -minutes from UTC, hour of the day, minutes of the hour and milliseconds +minutes from UTC, hour of the day, minutes of the hour, seconds +of the minute, and milliseconds of the second in successive values of the array. @end table @@ -4935,16 +4936,13 @@ extracted from the @code{stat} structure as returned by @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -4956,6 +4954,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -4968,10 +4970,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -5020,16 +5022,13 @@ extracted from the @code{stat} structure as returned by @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -5041,6 +5040,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -5053,10 +5056,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -5654,7 +5657,7 @@ Description: Returns the value of @var{I} with bit @var{Pos} cleared (set to zero). -@xref{BTest Intrinsic} for information on bit positions. +@xref{BTest Intrinsic}, for information on bit positions. @node IBits Intrinsic @subsubsection IBits Intrinsic @@ -5718,7 +5721,7 @@ Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}. Description: Returns the value of @var{I} with bit @var{Pos} set (to one). -@xref{BTest Intrinsic} for information on bit positions. +@xref{BTest Intrinsic}, for information on bit positions. @end ifset @ifset familyF77 @@ -6604,7 +6607,7 @@ Bits shifted out from the left end or the right end, as the case may be, are lost. Zeros are shifted in from the opposite end. -@xref{IShftC Intrinsic} for the circular-shift equivalent. +@xref{IShftC Intrinsic}, for the circular-shift equivalent. @node IShftC Intrinsic @subsubsection IShftC Intrinsic @@ -6646,7 +6649,7 @@ must be less than or equal to @var{Size}. The value of @var{Size} must be greater than or equal to one and less than or equal to @samp{BIT_SIZE(@var{I})}. -@xref{IShft Intrinsic} for the logical shift equivalent. +@xref{IShft Intrinsic}, for the logical shift equivalent. @end ifset @ifset familyF77 @@ -7480,7 +7483,7 @@ be zero. @xref{Exp Intrinsic}, for the inverse of this function. -@xref{Log10 Intrinsic}, for the base-10 logarithm function. +@xref{Log10 Intrinsic}, for the `common' (base-10) logarithm function. @node Log10 Intrinsic @subsubsection Log10 Intrinsic @@ -7504,9 +7507,8 @@ Intrinsic groups: (standard FORTRAN 77). @noindent Description: -Returns the natural logarithm of @var{X}, which must -be greater than zero or, if type @code{COMPLEX}, must not -be zero. +Returns the common logarithm (base 10) of @var{X}, which must +be greater than zero. The inverse of this function is @samp{10. ** LOG10(@var{X})}. @@ -7646,16 +7648,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -7667,6 +7666,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -7679,10 +7682,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -7737,16 +7740,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -7758,6 +7758,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -7770,10 +7774,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -8026,6 +8030,13 @@ Description: Returns the number of clock ticks since the start of the process. Supported on systems with @code{clock(3)} (q.v.). +@emph{Warning:} this intrinsic does not increase the range +of the timing values over that returned by @code{clock(3)}. +On a system with a 32-bit @code{clock(3)}, +@code{MCLOCK8} will return a 32-bit value, +even though converted to an @samp{INTEGER(KIND=2)} value. +That means overflows of the 32-bit value can still occur. + No Fortran implementations other than GNU Fortran are known to support this intrinsic at the time of this writing. @@ -9179,7 +9190,7 @@ Description: Returns the process's runtime in seconds in @var{Seconds}---the same value as the UNIX function @code{etime} returns. -This routine is known from Cray Fortran. @xref{CPU_Time Intrinsic} +This routine is known from Cray Fortran. @xref{CPU_Time Intrinsic}, for a standard equivalent. For information on other intrinsics with the same name: @@ -9725,16 +9736,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -9746,6 +9754,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -9758,10 +9770,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -9812,16 +9824,13 @@ The values in this array are extracted from the @enumerate @item -File mode +Device ID @item Inode number @item -ID of device containing directory entry for file - -@item -Device id (if relevant) +File mode @item Number of links @@ -9833,6 +9842,10 @@ Owner's uid Owner's gid @item +ID of device containing directory entry for file +(0 if not available) + +@item File size (bytes) @item @@ -9845,10 +9858,10 @@ Last modification time Last file status change time @item -Preferred I/O block size +Preferred I/O block size (-1 if not available) @item -Number of blocks allocated +Number of blocks allocated (-1 if not available) @end enumerate Not all these elements are relevant on all systems. @@ -10201,7 +10214,7 @@ Description: Returns in @var{Time} a character representation of the current time as obtained from @code{ctime(3)}. -@xref{Fdate Intrinsic (subroutine)} for an equivalent routine. +@xref{Fdate Intrinsic (subroutine)}, for an equivalent routine. For information on other intrinsics with the same name: @xref{Time Intrinsic (UNIX)}. @@ -10232,6 +10245,13 @@ Returns the current time encoded as a long integer This value is suitable for passing to @code{CTIME}, @code{GMTIME}, and @code{LTIME}. +@emph{Warning:} this intrinsic does not increase the range +of the timing values over that returned by @code{time(3)}. +On a system with a 32-bit @code{time(3)}, +@code{TIME8} will return a 32-bit value, +even though converted to an @samp{INTEGER(KIND=2)} value. +That means overflows of the 32-bit value can still occur. + No Fortran implementations other than GNU Fortran are known to support this intrinsic at the time of this writing. diff --git a/gnu/dist/gcc/f/news.texi b/gnu/dist/gcc/f/news.texi index 6ff133043c6..3885137fcc2 100644 --- a/gnu/dist/gcc/f/news.texi +++ b/gnu/dist/gcc/f/news.texi @@ -1,11 +1,11 @@ -@c Copyright (C) 1995-1997 Free Software Foundation, Inc. +@c Copyright (C) 1995-1999 Free Software Foundation, Inc. @c This is part of the G77 manual. @c For copying conditions, see the file g77.texi. @c The text of this file appears in the file BUGS @c in the G77 distribution, as well as in the G77 manual. -@c 1998-11-03 +@c 1999-03-11 @ifclear NEWSONLY @node News @@ -58,6 +58,34 @@ though this can make getting a complete picture of what a particular @code{egcs} version contains somewhat more difficult. +An online, ``live'' version of this document +(derived directly from the up-to-date mainline version +of @code{g77} within @code{egcs}) +is available at +@uref{http://egcs.cygnus.com/onlinedocs/g77_news.html}. + +@heading In 0.5.24 and @code{egcs} 1.1.2 (versus 0.5.23 and 1.1.1): +@itemize @bullet +@item +Fix the @code{IDate} Intrinsic (VXT) +so the returned year is in the documented, non-Y2K-compliant range +of 0--99, +instead of being returned as 100 in the year 2000. + +@item +Fix the @samp{Date_and_Time} intrinsic (in @code{libg2c}) +to return the milliseconds value properly +in @var{Values}(8). + +@item +Fix the @samp{LStat} intrinsic (in @code{libg2c}) +to return device-ID information properly +in @var{SArray}(7). + +@item +Improve documentation. +@end itemize + @heading In 0.5.24 and @code{egcs} 1.1.1 (versus 0.5.23 and 1.1): @itemize @bullet @item @@ -293,6 +321,10 @@ containing specification statements such as @samp{INTEGER(KIND=7) PTR}. @item +@code{g77} no longer crashes when compiling code +such as @samp{J = SIGNAL(1, 2)}. + +@item @code{g77} now treats @samp{%LOC(@var{expr})} and @samp{LOC(@var{expr})} as ``ordinary'' expressions when they are used as arguments in procedure calls. @@ -354,10 +386,17 @@ version 0.5.22 of @code{g77}, due to using the it to fix a few bugs and improve performance in a few cases. +@ifset last-up-date @xref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet}, -available in plain-text format in @code{gcc/f/BUGS}, for information on the known bugs in this version, including the regressions. +@end ifset + +@ifset NEWSONLY +See @file{egcs/gcc/f/BUGS}, +for information on the known bugs in this version, +including the regressions. +@end ifset Features that have been dropped from this version of @code{g77} due to their being implemented @@ -736,10 +775,17 @@ due to using the it to fix a few bugs and improve performance in a few cases. +@ifset last-up-date @xref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet}, -available in plain-text format in @code{gcc/f/BUGS}, for information on the known bugs in this version, including the regressions. +@end ifset + +@ifset NEWSONLY +See @file{egcs/gcc/f/BUGS}, +for information on the known bugs in this version, +including the regressions. +@end ifset Features that have been dropped from this version of @code{g77} due to their being implemented diff --git a/gnu/dist/gcc/f/version.c b/gnu/dist/gcc/f/version.c index 417a538b18c..3d5baf74fe1 100644 --- a/gnu/dist/gcc/f/version.c +++ b/gnu/dist/gcc/f/version.c @@ -1 +1 @@ -char *ffe_version_string = "0.5.24-19980804"; +char *ffe_version_string = "0.5.24-19981002"; diff --git a/gnu/dist/gcc/fixincludes b/gnu/dist/gcc/fixincludes index f02bdd334d3..09e10bbed54 100644 --- a/gnu/dist/gcc/fixincludes +++ b/gnu/dist/gcc/fixincludes @@ -2537,6 +2537,36 @@ if [ -r ${LIB}/$file ]; then fi fi +# Fix <c_asm.h> on Digital UNIX V4.0: +# It contains a prototype for a DEC C internal asm() function, clashing with +# gcc's asm keyword. So protect this with __DECC. +file=c_asm.h +if [ -r $file ] && [ ! -r ${LIB}/$file ]; then + cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file" + chmod +w ${LIB}/$file 2>/dev/null + chmod a+r ${LIB}/$file 2>/dev/null +fi + +if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e '/^[ ]*float[ ]*fasm/i\ +#ifdef __DECC +' \ + -e '/^[ ]*#[ ]*pragma[ ]*intrinsic([ ]*dasm/a\ +#endif +' ${LIB}/$file > ${LIB}/${file}.sed + rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file + if cmp $file ${LIB}/$file >/dev/null 2>&1; then + rm ${LIB}/$file + else + # Find any include directives that use "file". + for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${LIB}/$file | sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`; do + dir=`echo $file | sed -e s'|/[^/]*$||'` + required="$required ${INPUT} $dir/$include ${LIB}/$dir/$include" + done + fi +fi + # This file on SunOS 4 has a very large macro. When the sed loop # tries pull it in, it overflows the pattern space size of the SunOS # sed (GNU sed does not have this problem). Since the file does not diff --git a/gnu/dist/gcc/flags.h b/gnu/dist/gcc/flags.h index 37c1bd96a91..9fa976bf872 100644 --- a/gnu/dist/gcc/flags.h +++ b/gnu/dist/gcc/flags.h @@ -291,6 +291,11 @@ extern int flag_fast_math; extern int flag_rerun_loop_opt; +/* Nonzero means to assume that a structure or an array reference at + a varying address cannot alias a scalar at a fixed address. */ + +extern int flag_structure_noalias; + /* Nonzero means make functions that look like good inline candidates go inline. */ diff --git a/gnu/dist/gcc/frame.h b/gnu/dist/gcc/frame.h index 7493d92f80b..9d0d693975b 100644 --- a/gnu/dist/gcc/frame.h +++ b/gnu/dist/gcc/frame.h @@ -34,6 +34,11 @@ struct object { struct object *next; }; +/* Note the following routines are exported interfaces from libgcc; do not + change these interfaces. Instead create new interfaces. Also note + references to these functions may be made weak in files where they + are referenced. */ + extern void __register_frame (void * ); extern void __register_frame_table (void *); extern void __deregister_frame (void *); diff --git a/gnu/dist/gcc/gcc.c b/gnu/dist/gcc/gcc.c index c186df30011..06a688f8c68 100644 --- a/gnu/dist/gcc/gcc.c +++ b/gnu/dist/gcc/gcc.c @@ -3650,12 +3650,12 @@ do_spec_1 (spec, inswitch, soft_matched_part) if (p[0] == '%' && p[1] == 'O') { + p += 2; /* We don't support extra suffix characters after %O. */ if (*p == '.' || ISALPHA (*p)) abort (); suffix = OBJECT_SUFFIX; suffix_length = strlen (OBJECT_SUFFIX); - p += 2; } else { @@ -4947,7 +4947,7 @@ main (argc, argv) if (! verbose_flag) { - printf ("\nReport bugs to egcs-bugs@cygnus.com.\n"); + printf ("\nReport bugs to egcs-bugs@egcs.cygnus.com.\n"); printf ("Please see the file BUGS (included with the sources) first.\n"); exit (0); @@ -5137,7 +5137,7 @@ main (argc, argv) if (print_help_list) { - printf ("\nReport bugs to egcs-bugs@cygnus.com.\n"); + printf ("\nReport bugs to egcs-bugs@egcs.cygnus.com.\n"); printf ("Please see the file BUGS (included with the sources) first.\n"); } diff --git a/gnu/dist/gcc/gcc.texi b/gnu/dist/gcc/gcc.texi index 7e896244741..6eb51c1fb1b 100644 --- a/gnu/dist/gcc/gcc.texi +++ b/gnu/dist/gcc/gcc.texi @@ -150,7 +150,7 @@ instead of in the original English. @sp 1 @c The version number appears five times more in this file. -@center for egcs-1.1.1 +@center for egcs-1.1.2 @page @vskip 0pt plus 1filll Copyright @copyright{} 1988, 89, 92, 93, 94, 95, 96, 98 Free Software Foundation, Inc. @@ -194,19 +194,19 @@ instead of in the original English. @ifset USING This manual documents how to run, install and port the GNU compiler, as well as its new features and incompatibilities, and how to -report bugs. It corresponds to EGCS version 1.1.1. +report bugs. It corresponds to EGCS version 1.1.2. @end ifset @end ifset @ifclear INTERNALS This manual documents how to run and install the GNU compiler, as well as its new features and incompatibilities, and how to report -bugs. It corresponds to EGCS version 1.1.1. +bugs. It corresponds to EGCS version 1.1.2. @end ifclear @ifclear USING This manual documents how to port the GNU compiler, as well as its new features and incompatibilities, and how to report -bugs. It corresponds to EGCS version 1.1.1. +bugs. It corresponds to EGCS version 1.1.2. @end ifclear @end ifinfo @@ -2188,13 +2188,13 @@ for improvement of GNU CC or GNU C++ are welcome in any case. @node Bug Lists @section Where to Report Bugs @cindex bug report mailing lists -@kindex egcs-bugs@@cygnus.com -Send bug reports for GNU C to @samp{egcs-bugs@@cygnus.com}. +@kindex egcs-bugs@@egcs.cygnus.com +Send bug reports for GNU C to @samp{egcs-bugs@@egcs.cygnus.com}. -@kindex egcs-bugs@@cygnus.com -@kindex egcs-bugs@@cygnus.com +@kindex egcs-bugs@@egcs.cygnus.com +@kindex egcs-bugs@@egcs.cygnus.com Send bug reports for GNU C++ and the C++ runtime libraries to -@samp{egcs-bugs@@cygnus.com}. +@samp{egcs-bugs@@egcs.cygnus.com}. Often people think of posting bug reports to the newsgroup instead of mailing them. This appears to work, but it has one problem which can be @@ -2248,11 +2248,19 @@ Please report each bug in a separate message. This makes it easier for us to track which bugs have been fixed and to forward your bugs reports to the appropriate maintainer. -Do not compress and encode any part of your bug report using programs -such as @file{uuencode}. If you do so it will slow down the processing -of your bug. If you must submit multiple large files, use @file{shar}, -which allows us to read your message without having to run any -decompression programs. +If you include source code in your message, you can send it as clear +text if it is small. If the message is larger, you may compress it using +@file{gzip}, @file{bzip2}, or @file{pkzip}. Please be aware that sending +compressed files needs an additional binary-safe mechanism such as +@code{MIME} or @code{uuencode}. There is a 100k message limit on the +@samp{egcs-bugs@@egcs.cygnus.com} mailing list at the time of this +writing (March 1999). We're trying to create some mechanism for larger +bug reports to be submitted; please check the on-line FAQ for more +up-to-date instructions. Don't think that just posting a URL to the +code is better, we do want to archive bug reports, and not all +maintainers have good network connectivity to download large pieces of +software when they need them; it's much easier for them to have them in +their mailboxes. To enable someone to investigate the bug, you should include all these things: @@ -2480,7 +2488,7 @@ we should be able to reproduce the crash ourselves. If you would like to write bug fixes or improvements for the GNU C compiler, that is very helpful. Send suggested fixes to the bug report -mailing list, @code{egcs-bugs@@cygnus.com}. +mailing list, @code{egcs-bugs@@egcs.cygnus.com}. Please follow these guidelines so we can study your patches efficiently. If you don't follow these guidelines, your information might still be @@ -2600,8 +2608,8 @@ ways to find it: @itemize @bullet @item Send a message to a suitable network mailing list. First try -@code{egcs-bugs@@cygnus.com}, and if that brings no response, try -@code{egcs@@cygnus.com}. +@code{egcs-bugs@@egcs.cygnus.com}, and if that brings no response, try +@code{egcs@@egcs.cygnus.com}. @item Look in the service directory for someone who might help you for a fee. @@ -2614,13 +2622,13 @@ GNU CC distribution. If you would like to help pretest GNU CC releases to assure they work well, or if you would like to work on improving GNU CC, please contact -the maintainers at @code{egcs@@cygnus.com}. A pretester should +the maintainers at @code{egcs@@egcs.cygnus.com}. A pretester should be willing to try to investigate bugs as well as report them. If you'd like to work on improvements, please ask for suggested projects or suggest your own ideas. If you have already written an improvement, please tell us about it. If you have not yet started work, it is useful -to contact @code{egcs@@cygnus.com} before you start; the +to contact @code{egcs@@egcs.cygnus.com} before you start; the maintainers may be able to suggest ways to make your extension fit in better with the rest of GNU CC and with other development plans. diff --git a/gnu/dist/gcc/ginclude/va-alpha.h b/gnu/dist/gcc/ginclude/va-alpha.h index 2a4ba60b532..2528a712ada 100644 --- a/gnu/dist/gcc/ginclude/va-alpha.h +++ b/gnu/dist/gcc/ginclude/va-alpha.h @@ -10,7 +10,6 @@ #ifndef __GNUC_VA_LIST #define __GNUC_VA_LIST - /* In VMS, __gnuc_va_list is simply char *; on OSF, it's a structure. */ #ifdef __VMS__ @@ -23,16 +22,19 @@ typedef struct { } __gnuc_va_list; #endif -#endif /* not __GNUC_VA_LIST */ +#endif /* __GNUC_VA_LIST */ /* If this is for internal libc use, don't define anything but __gnuc_va_list. */ -#if defined (_STDARG_H) || defined (_VARARGS_H) -#define va_list __gnuc_va_list +#if !defined(__GNUC_VA_LIST_1) && (defined (_STDARG_H) || defined (_VARARGS_H)) +#define __GNUC_VA_LIST_1 + #define _VA_LIST #define _VA_LIST_ +typedef __gnuc_va_list va_list; + #if !defined(_STDARG_H) /* varargs support */ @@ -63,8 +65,6 @@ typedef struct { #endif /* _STDARG_H */ -#ifndef va_end - #define va_end(__va) ((void) 0) /* Values returned by __builtin_classify_type. */ @@ -92,8 +92,6 @@ enum { __lang_type_class }; -#endif - /* Note that parameters are always aligned at least to a word boundary (when passed) regardless of what GCC's __alignof__ operator says. */ @@ -127,5 +125,4 @@ enum { /* Copy __gnuc_va_list into another variable of this type. */ #define __va_copy(dest, src) (dest) = (src) -#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ - +#endif /* __GNUC_VA_LIST_1 */ diff --git a/gnu/dist/gcc/ginclude/va-sh.h b/gnu/dist/gcc/ginclude/va-sh.h index f1671c7b0b6..b4a4f43e32e 100644 --- a/gnu/dist/gcc/ginclude/va-sh.h +++ b/gnu/dist/gcc/ginclude/va-sh.h @@ -140,13 +140,13 @@ enum __va_type_classes { __extension__ \ ({(sizeof (TYPE) == 1 \ ? ({union {TYPE t; char c;} __t; \ - asm("" \ + __asm("" \ : "=r" (__t.c) \ : "0" ((((union { int i, j; } *) (AP))++)->i)); \ __t.t;}) \ : sizeof (TYPE) == 2 \ ? ({union {TYPE t; short s;} __t; \ - asm("" \ + __asm("" \ : "=r" (__t.s) \ : "0" ((((union { int i, j; } *) (AP))++)->i)); \ __t.t;}) \ diff --git a/gnu/dist/gcc/invoke.texi b/gnu/dist/gcc/invoke.texi index 8056b8478bb..01dd7a88605 100644 --- a/gnu/dist/gcc/invoke.texi +++ b/gnu/dist/gcc/invoke.texi @@ -158,6 +158,7 @@ in the following sections. -fschedule-insns2 -fstrength-reduce -fthread-jumps -funroll-all-loops -funroll-loops -fmove-all-movables -freduce-all-givs -fstrict-aliasing +-fstructure-noalias -O -O0 -O1 -O2 -O3 -Os @end smallexample @@ -2425,7 +2426,7 @@ These two options are intended to be removed someday, once they have helped determine the efficacy of various approaches to improving loop optimizations. -Please let us (@code{egcs@@cygnus.com} and @code{fortran@@gnu.org}) +Please let us (@code{egcs@@egcs.cygnus.com} and @code{fortran@@gnu.org}) know how use of these options affects the performance of your production code. We're very interested in code that runs @emph{slower} @@ -2501,6 +2502,17 @@ allowed to alias. For an example, see the C front-end function @code{c_get_alias_set}. @end ifset +@item -fstructure-noalias +Allows the compiler to assume that structure / varying array references +do not alias fixed scalars. + +Although this optimization is safe, GCC can occasionally lose track +of which references refer to scalars and which to structures, +leading it to perform unsafe transformations. Release 1.2 of EGCS +will incorporate changes which allow GCC to track the +scalar/structure distinction safely. Thus, the optimization will +always be same, and this option will likely be removed or will have +no effect. @end table @node Preprocessor Options @@ -5008,7 +5020,7 @@ there. You can specify that an individual function is called with this calling sequence with the function attribute @samp{stdcall}. You can also override the @samp{-mrtd} option by using the function attribute -@samp{cdecl}. @xref{Function Attributes} +@samp{cdecl}. @xref{Function Attributes}. @strong{Warning:} this calling convention is incompatible with the one normally used on Unix, so you cannot use it if you need to call @@ -5034,7 +5046,8 @@ supported letters are: @code{a} allocate EAX; @code{b} allocate EBX; Control how many registers are used to pass integer arguments. By default, no registers are used to pass arguments, and at most 3 registers can be used. You can control this behavior for a specific -function by using the function attribute @samp{regparm}. @xref{Function Attributes} +function by using the function attribute @samp{regparm}. +@xref{Function Attributes}. @strong{Warning:} if you use this switch, and @var{num} is nonzero, then you must build all modules with the same @@ -5670,7 +5683,7 @@ All variants support @samp{-mcpu=base}, this is the default. Put functions, data, and readonly data in @var{text section}, @var{data section}, and @var{readonly data section} respectively by default. This can be overridden with the @code{section} attribute. -@xref{Variable Attributes} +@xref{Variable Attributes}. @end table diff --git a/gnu/dist/gcc/jump.c b/gnu/dist/gcc/jump.c index ad728a0b513..ff4680c7662 100644 --- a/gnu/dist/gcc/jump.c +++ b/gnu/dist/gcc/jump.c @@ -59,6 +59,7 @@ Boston, MA 02111-1307, USA. */ #include "regs.h" #include "insn-config.h" #include "insn-flags.h" +#include "insn-attr.h" #include "recog.h" #include "expr.h" #include "real.h" @@ -3650,6 +3651,17 @@ delete_computation (insn) } #endif +#ifdef INSN_SCHEDULING + /* ?!? The schedulers do not keep REG_DEAD notes accurate after + reload has completed. The schedulers need to be fixed. Until + they are, we must not rely on the death notes here. */ + if (reload_completed && flag_schedule_insns_after_reload) + { + delete_insn (insn); + return; + } +#endif + for (note = REG_NOTES (insn); note; note = next) { rtx our_prev; @@ -4345,6 +4357,10 @@ rtx_renumbered_equal_p (x, y) case SYMBOL_REF: return XSTR (x, 0) == XSTR (y, 0); + case CODE_LABEL: + /* If we didn't match EQ equality above, they aren't the same. */ + return 0; + default: break; } diff --git a/gnu/dist/gcc/just-fixinc b/gnu/dist/gcc/just-fixinc index 2df0e3a2626..d64fc18bf1b 100644 --- a/gnu/dist/gcc/just-fixinc +++ b/gnu/dist/gcc/just-fixinc @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: just-fixinc,v 1.1.1.5 1998/12/13 00:04:33 tv Exp $ +# $Id: just-fixinc,v 1.1.1.6 1999/04/06 15:08:14 tv Exp $ # This script exists for use after installing # the GCC binaries from a distribution tape/CD-ROM. # Use it *after* copying the directory of binaries diff --git a/gnu/dist/gcc/loop.c b/gnu/dist/gcc/loop.c index 70271147771..04c80837284 100644 --- a/gnu/dist/gcc/loop.c +++ b/gnu/dist/gcc/loop.c @@ -195,6 +195,9 @@ static rtx loop_store_mems[NUM_STORES]; /* Index of first available slot in above array. */ static int loop_store_mems_idx; +/* The insn where the first of these was found. */ +static rtx first_loop_store_insn; + /* Nonzero if we don't know what MEMs were changed in the current loop. This happens if the loop contains a call (in which case `loop_has_call' will also be set) or if we store into more than NUM_STORES MEMs. */ @@ -790,10 +793,10 @@ scan_loop (loop_start, end, nregs, unroll_p) (1) it is used only in the same basic block as the set (2) the set is guaranteed to be executed once the loop starts, and the reg is not used until after that. */ - else if (! ((! maybe_never - && ! loop_reg_used_before_p (set, p, loop_start, - scan_start, end)) - || reg_in_basic_block_p (p, SET_DEST (set)))) + else if (! (reg_in_basic_block_p (p, SET_DEST (set)) + || (! maybe_never + && ! loop_reg_used_before_p (set, p, loop_start, + scan_start, end)))) ; else if ((tem = invariant_p (src)) && (dependencies == 0 @@ -2288,6 +2291,7 @@ prescan_loop (start, end) unknown_address_altered = 0; loop_has_call = 0; loop_has_volatile = 0; + first_loop_store_insn = NULL_RTX; loop_store_mems_idx = 0; num_mem_sets = 0; @@ -2334,6 +2338,9 @@ prescan_loop (start, end) loop_has_volatile = 1; note_stores (PATTERN (insn), note_addr_stored); + if (! first_loop_store_insn && loop_store_mems_idx != 0) + first_loop_store_insn = insn; + } } } @@ -2694,6 +2701,11 @@ mark_loop_jump (x, loop_num) mark_loop_jump (XEXP (x, 1), loop_num); return; + case LO_SUM: + /* This may refer to a LABEL_REF or SYMBOL_REF. */ + mark_loop_jump (XEXP (x, 1), loop_num); + return; + case SIGN_EXTEND: case ZERO_EXTEND: mark_loop_jump (XEXP (x, 0), loop_num); @@ -2781,21 +2793,21 @@ mark_loop_jump (x, loop_num) return; default: - /* Treat anything else (such as a symbol_ref) - as a branch out of this loop, but not into any loop. */ - + /* Strictly speaking this is not a jump into the loop, only a possible + jump out of the loop. However, we have no way to link the destination + of this jump onto the list of exit labels. To be safe we mark this + loop and any containing loops as invalid. */ if (loop_num != -1) { -#ifdef HAIFA - LABEL_OUTSIDE_LOOP_P (x) = 1; - LABEL_NEXTREF (x) = loop_number_exit_labels[loop_num]; -#endif /* HAIFA */ - - loop_number_exit_labels[loop_num] = x; - for (outer_loop = loop_num; outer_loop != -1; outer_loop = loop_outer_loop[outer_loop]) - loop_number_exit_count[outer_loop]++; + { + if (loop_dump_stream && ! loop_invalid[outer_loop]) + fprintf (loop_dump_stream, + "\nLoop at %d ignored due to unknown exit jump.\n", + INSN_UID (loop_number_loop_starts[outer_loop])); + loop_invalid[outer_loop] = 1; + } } return; } @@ -6274,9 +6286,26 @@ check_dbra_loop (loop_end, insn_count, loop_start) case, the insn should have been moved out of the loop. */ if (num_mem_sets == 1) - reversible_mem_store - = (! unknown_address_altered - && ! invariant_p (XEXP (loop_store_mems[0], 0))); + { + struct induction *v; + + reversible_mem_store + = (! unknown_address_altered + && ! invariant_p (XEXP (loop_store_mems[0], 0))); + + /* If the store depends on a register that is set after the + store, it depends on the initial value, and is thus not + reversible. */ + for (v = bl->giv; reversible_mem_store && v; v = v->next_iv) + { + if (v->giv_type == DEST_REG + && reg_mentioned_p (v->dest_reg, loop_store_mems[0]) + && (INSN_UID (v->insn) >= max_uid_for_loop + || (INSN_LUID (v->insn) + > INSN_LUID (first_loop_store_insn)))) + reversible_mem_store = 0; + } + } /* This code only acts for innermost loops. Also it simplifies the memory address check by only reversing loops with diff --git a/gnu/dist/gcc/md.texi b/gnu/dist/gcc/md.texi index c23f88b469c..e9d810c7602 100644 --- a/gnu/dist/gcc/md.texi +++ b/gnu/dist/gcc/md.texi @@ -2175,7 +2175,7 @@ pattern or a @samp{tst@var{m}} pattern. Machines that use a pseudo register for the condition code value, or where the mode used for the comparison depends on the condition being -tested, should also use the above mechanism. @xref{Jump Patterns} +tested, should also use the above mechanism. @xref{Jump Patterns}. The above discussion also applies to the @samp{mov@var{mode}cc} and @samp{s@var{cond}} patterns. diff --git a/gnu/dist/gcc/regclass.c b/gnu/dist/gcc/regclass.c index 3cad5aa54b1..25cac8f282f 100644 --- a/gnu/dist/gcc/regclass.c +++ b/gnu/dist/gcc/regclass.c @@ -1866,18 +1866,19 @@ allocate_reg_info (num_regs, new_p, renumber_p) size_t max_index = reg_data->max_index; reg_next = reg_data->next; - if (min_index <= regno_allocated) + if (min <= max_index) { size_t max = max_index; - if (max > regno_allocated) - max = regno_allocated; + size_t local_min = min - min_index; + if (min < min_index) + local_min = 0; if (!reg_data->used_p) /* page just allocated with calloc */ reg_data->used_p = 1; /* no need to zero */ else - bzero ((char *) ®_data->data, - sizeof (reg_info) * (max - min_index + 1)); + bzero ((char *) ®_data->data[local_min], + sizeof (reg_info) * (max - min_index - local_min + 1)); - for (i = min_index; i <= max; i++) + for (i = min_index+local_min; i <= max; i++) { VARRAY_REG (reg_n_info, i) = ®_data->data[i-min_index]; REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN; diff --git a/gnu/dist/gcc/regmove.c b/gnu/dist/gcc/regmove.c index 0a598912d50..605169a5d82 100644 --- a/gnu/dist/gcc/regmove.c +++ b/gnu/dist/gcc/regmove.c @@ -1,5 +1,5 @@ /* Move registers around to reduce number of move instructions needed. - Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 89, 92-98, 1999 Free Software Foundation, Inc. This file is part of GNU CC. @@ -254,10 +254,10 @@ optimize_reg_copy_1 (insn, dest, src) && GET_MODE (XEXP (note, 0)) == GET_MODE (src)) { int failed = 0; - int length = 0; int d_length = 0; - int n_calls = 0; + int s_length = 0; int d_n_calls = 0; + int s_n_calls = 0; /* We can do the optimization. Scan forward from INSN again, replacing regs as we go. Set FAILED if a replacement can't @@ -291,42 +291,14 @@ optimize_reg_copy_1 (insn, dest, src) insn in the REG_N_REFS updates below. If this is not correct, no great harm is done. - - We do not undo this substitution if something later - fails. Therefore, we must update the other REG_N_* - counters now to keep them accurate. */ + Since we do not know if we will change the lifetime of + SREGNO or DREGNO, we must not update REG_LIVE_LENGTH + or REG_N_CALLS_CROSSED at this time. */ if (sregno >= FIRST_PSEUDO_REGISTER) - { - REG_N_REFS (sregno) -= loop_depth; - - if (REG_LIVE_LENGTH (sregno) >= 0) - { - REG_LIVE_LENGTH (sregno) -= length; - /* REG_LIVE_LENGTH is only an approximation after - combine if sched is not run, so make sure that - we still have a reasonable value. */ - if (REG_LIVE_LENGTH (sregno) < 2) - REG_LIVE_LENGTH (sregno) = 2; - } - - REG_N_CALLS_CROSSED (sregno) -= n_calls; - } + REG_N_REFS (sregno) -= loop_depth; if (dregno >= FIRST_PSEUDO_REGISTER) - { - REG_N_REFS (dregno) += loop_depth; - - if (REG_LIVE_LENGTH (dregno) >= 0) - REG_LIVE_LENGTH (dregno) += d_length; - - REG_N_CALLS_CROSSED (dregno) += d_n_calls; - } - - /* We've done a substitution, clear the counters. */ - length = 0; - d_length = 0; - n_calls = 0; - d_n_calls = 0; + REG_N_REFS (dregno) += loop_depth; } else { @@ -335,9 +307,10 @@ optimize_reg_copy_1 (insn, dest, src) } } - /* Count the insns and CALL_INSNs passed. If we passed the - death note of DEST, show increased live length. */ - length++; + /* For SREGNO, count the total number of insns scanned. + For DREGNO, count the total number of insns scanned after + passing the death note for DREGNO. */ + s_length++; if (dest_death) d_length++; @@ -345,7 +318,9 @@ optimize_reg_copy_1 (insn, dest, src) as a call that has been crossed. Otherwise, count it. */ if (q != p && GET_CODE (q) == CALL_INSN) { - n_calls++; + /* Similarly, total calls for SREGNO, total calls beyond + the death note for DREGNO. */ + s_n_calls++; if (dest_death) d_n_calls++; } @@ -365,11 +340,13 @@ optimize_reg_copy_1 (insn, dest, src) if (! failed) { + /* These counters need to be updated if and only if we are + going to move the REG_DEAD note. */ if (sregno >= FIRST_PSEUDO_REGISTER) { if (REG_LIVE_LENGTH (sregno) >= 0) { - REG_LIVE_LENGTH (sregno) -= length; + REG_LIVE_LENGTH (sregno) -= s_length; /* REG_LIVE_LENGTH is only an approximation after combine if sched is not run, so make sure that we still have a reasonable value. */ @@ -377,15 +354,7 @@ optimize_reg_copy_1 (insn, dest, src) REG_LIVE_LENGTH (sregno) = 2; } - REG_N_CALLS_CROSSED (sregno) -= n_calls; - } - - if (dregno >= FIRST_PSEUDO_REGISTER) - { - if (REG_LIVE_LENGTH (dregno) >= 0) - REG_LIVE_LENGTH (dregno) += d_length; - - REG_N_CALLS_CROSSED (dregno) += d_n_calls; + REG_N_CALLS_CROSSED (sregno) -= s_n_calls; } /* Move death note of SRC from P to INSN. */ @@ -399,6 +368,15 @@ optimize_reg_copy_1 (insn, dest, src) { XEXP (dest_death, 1) = REG_NOTES (p); REG_NOTES (p) = dest_death; + + if (dregno >= FIRST_PSEUDO_REGISTER) + { + /* If and only if we are moving the death note for DREGNO, + then we need to update its counters. */ + if (REG_LIVE_LENGTH (dregno) >= 0) + REG_LIVE_LENGTH (dregno) += d_length; + REG_N_CALLS_CROSSED (dregno) += d_n_calls; + } } return ! failed; diff --git a/gnu/dist/gcc/tm.texi b/gnu/dist/gcc/tm.texi index 1c5d3b665a2..8265773175d 100644 --- a/gnu/dist/gcc/tm.texi +++ b/gnu/dist/gcc/tm.texi @@ -5906,13 +5906,20 @@ names. @findex ASM_OUTPUT_DESTRUCTOR This is like @code{ASM_OUTPUT_CONSTRUCTOR} but used for termination functions rather than initialization functions. + +When @code{ASM_OUTPUT_CONSTRUCTOR} and @code{ASM_OUTPUT_DESTRUCTOR} are +defined, the initializaiton routine generated for the generated object +file will have static linkage. @end table If your system uses @code{collect2} as the means of processing constructors, then that program normally uses @code{nm} to scan an -object file for constructor functions to be called. On certain kinds of -systems, you can define these macros to make @code{collect2} work faster -(and, in some cases, make it work at all): +object file for constructor functions to be called. On such systems you +must not define @code{ASM_OUTPUT_CONSTRUCTOR} and @code{ASM_OUTPUT_DESTRUCTOR} +as the object file's initialization routine must have global scope. + +On certain kinds of systems, you can define these macros to make +@code{collect2} work faster (and, in some cases, make it work at all): @table @code @findex OBJECT_FORMAT_COFF diff --git a/gnu/dist/gcc/toplev.c b/gnu/dist/gcc/toplev.c index 9b7c50674ad..497359e0e2a 100644 --- a/gnu/dist/gcc/toplev.c +++ b/gnu/dist/gcc/toplev.c @@ -554,6 +554,11 @@ static int flag_gcse; static int flag_rerun_cse_after_loop; +/* Nonzero means to assume that a structure or an array reference at + a varying address cannot alias a scalar at a fixed address. */ + +int flag_structure_noalias = 0; + /* Nonzero means to run loop optimizations twice. */ int flag_rerun_loop_opt; @@ -840,6 +845,8 @@ lang_independent_options f_options[] = "Perform the global common subexpression elimination" }, {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1, "Run CSE pass after loop optimisations"}, + {"structure-noalias", &flag_structure_noalias, 1, + "Assume structure / array reference and fixed scalar cannot alias"}, {"rerun-loop-opt", &flag_rerun_loop_opt, 1, "Run the loop optimiser twice"}, {"pretend-float", &flag_pretend_float, 1, diff --git a/gnu/dist/gcc/tree.c b/gnu/dist/gcc/tree.c index d1e8b3419a6..ebe6e14e151 100644 --- a/gnu/dist/gcc/tree.c +++ b/gnu/dist/gcc/tree.c @@ -269,6 +269,8 @@ int (*lang_get_alias_set) PROTO((tree)); codes are made. */ #define TYPE_HASH(TYPE) ((unsigned long) (TYPE) & 0777777) +static void append_random_chars PROTO((char *)); + extern char *mode_name[]; void gcc_obstack_init (); @@ -4804,44 +4806,104 @@ dump_tree_statistics () #define FILE_FUNCTION_PREFIX_LEN 9 #ifndef NO_DOLLAR_IN_LABEL -#define FILE_FUNCTION_FORMAT "_GLOBAL_$D$%s" +#define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s" #else /* NO_DOLLAR_IN_LABEL */ #ifndef NO_DOT_IN_LABEL -#define FILE_FUNCTION_FORMAT "_GLOBAL_.D.%s" +#define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s" #else /* NO_DOT_IN_LABEL */ -#define FILE_FUNCTION_FORMAT "_GLOBAL__D_%s" +#define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s" #endif /* NO_DOT_IN_LABEL */ #endif /* NO_DOLLAR_IN_LABEL */ extern char * first_global_object_name; extern char * weak_global_object_name; -/* If KIND=='I', return a suitable global initializer (constructor) name. - If KIND=='D', return a suitable global clean-up (destructor) name. */ +/* Appends 6 random characters to TEMPLATE to (hopefully) avoid name + clashes in cases where we can't reliably choose a unique name. + + Derived from mkstemp.c in libiberty. */ + +static void +append_random_chars (template) + char *template; +{ + static const char letters[] + = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + static unsigned HOST_WIDE_INT value; + unsigned HOST_WIDE_INT v; + +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; +#endif + + template += strlen (template); + +#ifdef HAVE_GETTIMEOFDAY + /* Get some more or less random data. */ + gettimeofday (&tv, NULL); + value += ((unsigned HOST_WIDE_INT) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid (); +#else + value += getpid (); +#endif + + v = value; + + /* Fill in the random bits. */ + template[0] = letters[v % 62]; + v /= 62; + template[1] = letters[v % 62]; + v /= 62; + template[2] = letters[v % 62]; + v /= 62; + template[3] = letters[v % 62]; + v /= 62; + template[4] = letters[v % 62]; + v /= 62; + template[5] = letters[v % 62]; + + template[6] = '\0'; +} + +/* Generate a name for a function unique to this translation unit. + TYPE is some string to identify the purpose of this function to the + linker or collect2. */ tree -get_file_function_name (kind) - int kind; +get_file_function_name_long (type) + char *type; { char *buf; register char *p; if (first_global_object_name) p = first_global_object_name; - else if (weak_global_object_name) - p = weak_global_object_name; - else if (main_input_filename) - p = main_input_filename; else - p = input_filename; + { + /* We don't have anything that we know to be unique to this translation + unit, so use what we do have and throw in some randomness. */ + + char *name = weak_global_object_name; + char *file = main_input_filename; + + if (! name) + name = ""; + if (! file) + file = input_filename; - buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)); + p = (char *) alloca (7 + strlen (name) + strlen (file)); + + sprintf (p, "%s%s", name, file); + append_random_chars (p); + } + + buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + + strlen (type)); /* Set up the name of the file-level functions we may need. */ /* Use a global object (which is already required to be unique over the program) rather than the file name (which imposes extra constraints). -- Raeburn@MIT.EDU, 10 Jan 1990. */ - sprintf (buf, FILE_FUNCTION_FORMAT, p); + sprintf (buf, FILE_FUNCTION_FORMAT, type, p); /* Don't need to pull weird characters out of global names. */ if (p != first_global_object_name) @@ -4864,10 +4926,23 @@ get_file_function_name (kind) *p = '_'; } - buf[FILE_FUNCTION_PREFIX_LEN] = kind; - return get_identifier (buf); } + +/* If KIND=='I', return a suitable global initializer (constructor) name. + If KIND=='D', return a suitable global clean-up (destructor) name. */ + +tree +get_file_function_name (kind) + int kind; +{ + char p[2]; + p[0] = kind; + p[1] = 0; + + return get_file_function_name_long (p); +} + /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node. The result is placed in BUFFER (which has length BIT_SIZE), diff --git a/gnu/dist/gcc/unroll.c b/gnu/dist/gcc/unroll.c index 72f1f046442..cfb51f66c37 100644 --- a/gnu/dist/gcc/unroll.c +++ b/gnu/dist/gcc/unroll.c @@ -1,5 +1,5 @@ /* Try to unroll loops, and split induction variables. - Copyright (C) 1992, 93, 94, 95, 97, 1998 Free Software Foundation, Inc. + Copyright (C) 1992, 93, 94, 95, 97, 98, 1999 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. This file is part of GNU CC. @@ -2925,8 +2925,11 @@ find_splittable_givs (bl, unroll_type, loop_start, loop_end, increment, To share a register here, the values must be equal. */ && rtx_equal_p (v->same->mult_val, v->mult_val) - && rtx_equal_p (v->same->add_val, v->add_val)) - + && rtx_equal_p (v->same->add_val, v->add_val) + /* If the memory references have different modes, + then the address may not be valid and we must + not share registers. */ + && verify_addresses (v, giv_inc, unroll_number)) { v->dest_reg = v->same->dest_reg; v->shared = 1; diff --git a/gnu/dist/gcc/varasm.c b/gnu/dist/gcc/varasm.c index 39e09c76f22..0055d6889a4 100644 --- a/gnu/dist/gcc/varasm.c +++ b/gnu/dist/gcc/varasm.c @@ -4286,6 +4286,13 @@ declare_weak (decl) error_with_decl (decl, "weak declaration of `%s' must precede definition"); else if (SUPPORTS_WEAK) DECL_WEAK (decl) = 1; + +#ifdef HANDLE_PRAGMA_WEAK + /* Make sure this function name gets on the weak declaration list. */ + handle_pragma_weak (ps_name, + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), + NULL); +#endif } /* Emit any pending weak declarations. */ diff --git a/gnu/dist/gcc/version.c b/gnu/dist/gcc/version.c index cff0b89ae39..573f16bc430 100644 --- a/gnu/dist/gcc/version.c +++ b/gnu/dist/gcc/version.c @@ -1 +1 @@ -char *version_string = "egcs-2.91.60 19981201 (egcs-1.1.1 release)"; +char *version_string = "egcs-2.91.66 19990314 (egcs-1.1.2 release)"; |
